Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: lib/typedObjects/utils.js

Issue 6213754488356864: Issue 258 - [Typed objects] Implement a garbage collection mechanism (Closed)
Patch Set: Updated inline documentation Created April 28, 2014, 8:22 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/typedObjects/objectTypes.js ('k') | test/tests/typedObjects.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <http://adblockplus.org/>, 2 * This file is part of Adblock Plus <http://adblockplus.org/>,
3 * Copyright (C) 2006-2014 Eyeo GmbH 3 * Copyright (C) 2006-2014 Eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 }; 88 };
89 89
90 /** 90 /**
91 * Defines properties with given name and type on an object. 91 * Defines properties with given name and type on an object.
92 * 92 *
93 * @param obj object to define properties on 93 * @param obj object to define properties on
94 * @param properties object mapping property names to their respective types 94 * @param properties object mapping property names to their respective types
95 * @param viewTypes see getViewsForType() 95 * @param viewTypes see getViewsForType()
96 * @param views see getViewsForType() 96 * @param views see getViewsForType()
97 * @param [offset] byte array offset at which the properties should start 97 * @param [offset] byte array offset at which the properties should start
98 * @param [cleanupValues] array of property/value combinations to be set when th e object is created or destroyed
98 * @return new start offset for additional properties 99 * @return new start offset for additional properties
99 */ 100 */
100 exports.defineProperties = function defineProperties(obj, properties, viewTypes, views, offset) 101 exports.defineProperties = function defineProperties(obj, properties, viewTypes, views, offset, cleanupValues)
101 { 102 {
102 offset = offset | 0; 103 offset = offset | 0;
103 104
104 let propList = []; 105 let propList = [];
105 for (let name in properties) 106 for (let name in properties)
106 propList.push([name, properties[name]]); 107 propList.push([name, properties[name]]);
107 108
108 // Put larger properties first to make sure alignment requirements are met. 109 // Put larger properties first to make sure alignment requirements are met.
109 propList.sort(function(a, b) 110 propList.sort(function(a, b)
110 { 111 {
111 return b[1].referenceLength - a[1].referenceLength; 112 return b[1].referenceLength - a[1].referenceLength;
112 }); 113 });
113 114
114 // Generates getters and setters for each property. 115 // Generates getters and setters for each property.
115 let descriptors = {}; 116 let descriptors = {};
116 for (let i = 0, l = propList.length | 0; i < l; i++) 117 for (let i = 0, l = propList.length | 0; i < l; i++)
117 { 118 {
118 let [name, type] = propList[i]; 119 let [name, type] = propList[i];
119 120
120 let viewParams = getViewsForType(type, viewTypes, views); 121 let viewParams = getViewsForType(type, viewTypes, views);
121 descriptors[name] = { 122 descriptors[name] = {
122 get: type.createGetter.apply(type, [offset].concat(viewParams)), 123 get: type.createGetter.apply(type, [offset].concat(viewParams)),
123 set: type.createSetter.apply(type, [offset].concat(viewParams)), 124 set: type.createSetter.apply(type, [offset].concat(viewParams)),
124 configurable: false, 125 configurable: false,
125 enumerable: true 126 enumerable: true
126 }; 127 };
127 offset += type.referenceLength; 128 offset += type.referenceLength;
129 if (cleanupValues && typeof type.cleanupValue != "undefined")
130 cleanupValues.push([name, type.cleanupValue]);
128 } 131 }
129 132
130 // Define properties 133 // Define properties
131 Object.defineProperties(obj, descriptors); 134 Object.defineProperties(obj, descriptors);
132 135
133 return offset; 136 return offset;
134 }; 137 };
OLDNEW
« no previous file with comments | « lib/typedObjects/objectTypes.js ('k') | test/tests/typedObjects.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld