Skip to content

Commit da20c08

Browse files
committed
JavaScript: optimised vector iteration and index access.
1 parent e5e77e9 commit da20c08

1 file changed

Lines changed: 21 additions & 27 deletions

File tree

‎src/bindings/javascript/main.cpp‎

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -68,44 +68,38 @@ EMSCRIPTEN_BINDINGS(libOpenCOR)
6868
}
6969
});
7070

71-
prototype[Symbol.iterator] = function() {
72-
let i = 0;
71+
prototype[Symbol.iterator] = function*() {
7372
let n = this.size();
74-
let iterator = {};
7573

76-
iterator.next = () => {
77-
let result = {};
78-
79-
if (i < n) {
80-
result.value = this.get(i++);
81-
result.done = false;
82-
} else {
83-
result.value = undefined;
84-
result.done = true;
85-
}
86-
87-
return result;
88-
};
89-
90-
return iterator;
74+
for (let i = 0; i < n; ++i) {
75+
yield this.get(i);
76+
}
9177
};
9278

9379
Object.setPrototypeOf(prototype, new Proxy(Object.getPrototypeOf(prototype), {
94-
get: (target, prop, receiver) => {
95-
if (typeof prop === 'string' && /^[0-9]+$/.test(prop)) {
96-
return receiver.get(parseInt(prop));
80+
get: (target, property, receiver) => {
81+
if (typeof property === 'string') {
82+
let number = property >>> 0;
83+
84+
if (String(number) === property) {
85+
return receiver.get(number);
86+
}
9787
}
9888

99-
return Reflect.get(target, prop, receiver);
89+
return Reflect.get(target, property, receiver);
10090
},
101-
set: (target, prop, value, receiver) => {
102-
if (typeof prop === 'string' && /^[0-9]+$/.test(prop)) {
103-
receiver.set(parseInt(prop), value);
91+
set: (target, property, value, receiver) => {
92+
if (typeof property === 'string') {
93+
let number = property >>> 0;
94+
95+
if (String(number) === property) {
96+
receiver.set(number, value);
10497

105-
return true;
98+
return true;
99+
}
106100
}
107101

108-
return Reflect.set(target, prop, value, receiver);
102+
return Reflect.set(target, property, value, receiver);
109103
}
110104
}));
111105
});

0 commit comments

Comments
 (0)