@@ -144,7 +144,7 @@ const currentTypedArray = getTypedArrayName(it.spec.baseType);
144144const currentTypedArrayElementType = getTypedArrayElementName(it.spec.baseType);
145145
146146function shouldRequire(baseType, fieldType) {
147- let requiredModule = '{{=getPackageNameByType(fieldType)}}/{{=getJSFileNameByType (fieldType)}}';
147+ let requiredModule = '{{=getPackageNameByType(fieldType)}}/{{=getModulePathByType (fieldType)}}';
148148 let shouldRequire = !isPrimitivePackage(baseType) && (fieldType.isArray || !fieldType.isPrimitiveType || fieldType.type === 'string');
149149
150150 if (shouldRequire && !isExisted(requiredModule)) {
@@ -163,8 +163,8 @@ function getWrapperNameByType(type) {
163163 }
164164}
165165
166- function getJSFileNameByType (type) {
167- if (type.isPrimitiveType) {
166+ function getModulePathByType (type) {
167+ if (type.isPrimitiveType) {
168168 return 'std_msgs__msg__' + getPrimitiveNameByType(type) + '.js';
169169 } else {
170170 return type.pkgName + '__msg__' + type.type + '.js';
@@ -199,35 +199,35 @@ const deallocator = require('../../rosidl_gen/deallocator.js');
199199
200200{{~ it.spec.fields :field}}
201201{{? shouldRequire(it.spec.baseType, field.type)}}
202- let {{=getWrapperNameByType(field.type)}} = require('../../generated/{{=getPackageNameByType(field.type)}}/{{=getJSFileNameByType (field.type)}}');
202+ const {{=getWrapperNameByType(field.type)}} = require('../../generated/{{=getPackageNameByType(field.type)}}/{{=getModulePathByType (field.type)}}');
203203{{?}}
204204{{~}}
205205
206206{{? it.spec.msgName === 'String'}}
207207const {{=refObjectType}} = primitiveTypes.string;
208208{{??}}
209209const {{=refObjectType}} = StructType({
210- {{~ it.spec.fields :field}}
210+ {{~ it.spec.fields :field}}
211211 {{? field.type.isPrimitiveType && !field.type.isArray}}
212212 {{=field.name}}: primitiveTypes.{{=field.type.type}},
213213 {{?? field.type.isArray}}
214214 {{=field.name}}: {{=getWrapperNameByType(field.type)}}.refObjectArrayType,
215215 {{?? true}}
216216 {{=field.name}}: {{=getWrapperNameByType(field.type)}}.refObjectType,
217217 {{?}}
218- {{~}}
218+ {{~}}
219219});
220220{{?}}
221221
222222const {{=refArrayType}} = ArrayType({{=refObjectType}});
223223const {{=refObjectArrayType}} = StructType({
224- {{? usePlainTypedArray }}
224+ {{? usePlainTypedArray}}
225225 data: ref.refType(ref.types.{{=currentTypedArrayElementType}}),
226226{{?? true}}
227227 data: {{=refArrayType}},
228228{{?}}
229229 size : ref.types.size_t,
230- capacity: ref.types.size_t,
230+ capacity: ref.types.size_t
231231});
232232
233233// Define the wrapper class.
@@ -246,6 +246,7 @@ class {{=objectWrapper}} {
246246 {{? field.type.isPrimitiveType && !field.type.isArray}}
247247 this._{{=field.name}}Intialized = true;
248248 {{?}}
249+
249250 {{? field.type.isArray}}
250251 this._wrapperFields.{{=field.name}} = {{=getWrapperNameByType(field.type)}}.createArray();
251252 this._wrapperFields.{{=field.name}}.copy(other._wrapperFields.{{=field.name}});
@@ -262,6 +263,7 @@ class {{=objectWrapper}} {
262263 {{? field.type.isPrimitiveType && !field.type.isArray}}
263264 this._{{=field.name}}Intialized = false;
264265 {{?}}
266+
265267 {{? field.type.isArray}}
266268 this._wrapperFields.{{=field.name}} = {{=getWrapperNameByType(field.type)}}.createArray();
267269 {{?? !field.type.isPrimitiveType || (field.type.type === 'string' && it.spec.msgName !== 'String')}}
@@ -271,7 +273,6 @@ class {{=objectWrapper}} {
271273 {{?}}
272274 {{~}}
273275 }
274-
275276 this.freeze();
276277 }
277278
@@ -305,13 +306,14 @@ class {{=objectWrapper}} {
305306 freeze(own = false, checkConsistency = false) {
306307 if (checkConsistency) {
307308 {{~ it.spec.fields :field}}
308- {{? field.type.isPrimitiveType && !field.type.isArray}}
309+ {{? field.type.isPrimitiveType && !field.type.isArray}}
309310 if (!this._{{=field.name}}Intialized) {
310311 throw new TypeError('Invalid argument: {{=field.name}} in {{=it.spec.msgName}}');
311312 }
312- {{?}}
313+ {{?}}
313314 {{~}}
314315 }
316+
315317 {{~ it.spec.fields :field}}
316318 {{? field.type.isArray && field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
317319 this._wrapperFields.{{=field.name}}.fill(this._{{=field.name}}Array);
@@ -322,7 +324,7 @@ class {{=objectWrapper}} {
322324 this._refObject.{{=field.name}} = this._wrapperFields.{{=field.name}}.refObject;
323325 {{?? field.type.type === 'string' && it.spec.msgName !== 'String'}}
324326 if (own) {
325- primitiveTypes.initString( this._wrapperFields.{{=field.name}}.refObject.ref(), own );
327+ this._wrapperFields.{{=field.name}}.freeze(own, checkConsistency );
326328 }
327329 this._refObject.{{=field.name}} = this._wrapperFields.{{=field.name}}.refObject;
328330 {{?? it.spec.msgName === 'String'}}
@@ -339,10 +341,11 @@ class {{=objectWrapper}} {
339341 }
340342
341343 deserialize(refObject) {
342- {{~ it.spec.fields :field}}
344+ {{~ it.spec.fields :field}}
343345 {{? field.type.isPrimitiveType && !field.type.isArray}}
344346 this._{{=field.name}}Intialized = true;
345347 {{?}}
348+
346349 {{? field.type.isArray && field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
347350 refObject.{{=field.name}}.data.length = refObject.{{=field.name}}.size ;
348351 for (let index = 0; index < refObject.{{=field.name}}.size ; index++) {
@@ -355,11 +358,11 @@ class {{=objectWrapper}} {
355358 {{?? field.type.isPrimitiveType}}
356359 this._refObject.{{=field.name}} = refObject.{{=field.name}};
357360 {{?}}
358- {{~}}
361+ {{~}}
359362 }
360363
361364 static freeStruct(refObject) {
362- {{~ it.spec.fields :field}}
365+ {{~ it.spec.fields :field}}
363366 {{? field.type.isArray}}
364367 if (refObject.{{=field.name}}.size != 0) {
365368 {{=getWrapperNameByType(field.type)}}.ArrayType.freeArray(refObject.{{=field.name}});
@@ -374,7 +377,7 @@ class {{=objectWrapper}} {
374377 {{?? it.spec.msgName === 'String'}}
375378 deallocator.freeStructMember(refObject, {{=getWrapperNameByType(field.type)}}.refObjectType, '{{=field.name}}');
376379 {{?}}
377- {{~}}
380+ {{~}}
378381 }
379382
380383 static destoryRawROS(msg) {
@@ -452,6 +455,7 @@ class {{=objectWrapper}} {
452455 {{? field.type.isPrimitiveType && !field.type.isArray}}
453456 this._{{=field.name}}Intialized = true;
454457 {{?}}
458+
455459 {{? field.type.isArray && field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
456460 refObject.{{=field.name}}.data.length = refObject.{{=field.name}}.size ;
457461 for (let index = 0; index < refObject.{{=field.name}}.size ; index++) {
@@ -470,6 +474,7 @@ class {{=objectWrapper}} {
470474 {{? field.type.isPrimitiveType && !field.type.isArray}}
471475 this._{{=field.name}}Intialized = true;
472476 {{?}}
477+
473478 {{? field.type.isArray && field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
474479 this._{{=field.name}}Array = other._{{=field.name}}Array.slice();
475480 {{?? !field.type.isPrimitiveType || field.type.isArray || (field.type.type === 'string' && it.spec.msgName !== 'String')}}
@@ -503,15 +508,15 @@ class {{=arrayWrapper}} {
503508 }
504509
505510 fill(values) {
506- {{? usePlainTypedArray }}
511+ {{? usePlainTypedArray}}
507512 if (Array.isArray(values)) {
508513 // Convert JavaScript array
509514 this._wrappers = new {{=currentTypedArray}}(values);
510515 } else {
511516 this._wrappers = values;
512517 }
513- {{?? isPrimitivePackage(it.spec.baseType) }}
514- // Now only for string/bool array
518+ {{?? isPrimitivePackage(it.spec.baseType)}}
519+ // Now for primitive arrays, only string/bool/int64/uint64 array drops here.
515520 const length = values.length;
516521 this._resize(length);
517522 for (let i = 0; i < length; ++i) {
@@ -530,17 +535,19 @@ class {{=arrayWrapper}} {
530535
531536 // Put all data currently stored in `this._wrappers` into `this._refObject`
532537 freeze(own) {
533- {{? usePlainTypedArray }}
538+ {{? usePlainTypedArray}}
534539 // When it's a TypedArray: no need to copy to `this._refArray`
535540 {{?? true}}
536541 this._wrappers.forEach((wrapper, index) => {
537542 wrapper.freeze(own);
538543 this._refArray[index] = wrapper.refObject;
539544 });
540545 {{?}}
546+
541547 this._refObject.size = this._wrappers.length;
542548 this._refObject.capacity = this._wrappers.length;
543- {{? usePlainTypedArray }}
549+
550+ {{? usePlainTypedArray}}
544551 const buffer = Buffer.from(new Uint8Array(this._wrappers.buffer));
545552 this._refObject.data = buffer;
546553 {{?? true}}
@@ -588,18 +595,19 @@ class {{=arrayWrapper}} {
588595 throw new RangeError('Invalid argument: should provide a positive number');
589596 return;
590597 }
591- {{? usePlainTypedArray }}
598+ {{? usePlainTypedArray}}
592599 this._refArray = undefined;
593- {{?? true }}
600+ {{?? true}}
594601 this._refArray = new {{=refArrayType}}(size );
595602 {{?}}
603+
596604 this._refObject = new {{=refObjectArrayType}}();
597605 this._refObject.size = size ;
598606 this._refObject.capacity = size ;
599607
600- {{? usePlainTypedArray }}
608+ {{? usePlainTypedArray}}
601609 this._wrappers = new {{=currentTypedArray}}(size );
602- {{?? true }}
610+ {{?? true}}
603611 this._wrappers = new Array();
604612 for (let i = 0; i < size ; i++) {
605613 this._wrappers.push(new {{=objectWrapper}}());
@@ -611,12 +619,12 @@ class {{=arrayWrapper}} {
611619 copyRefObject(refObject) {
612620 this._refObject = refObject;
613621
614- {{? usePlainTypedArray }}
622+ {{? usePlainTypedArray}}
615623 const byteLen = refObject.size * ref.types.{{=currentTypedArrayElementType}}.size ;
616624 // An ArrayBuffer object that doesn't hold the ownership of the address
617625 const arrayBuffer = rclnodejs.createArrayBufferFromAddress(refObject.data, byteLen);
618626 this._wrappers = new {{=currentTypedArray}}(arrayBuffer);
619- {{?? true }}
627+ {{?? true}}
620628 let refObjectArray = this._refObject.data;
621629 refObjectArray.length = this._refObject.size ;
622630 this._resize(this._refObject.size );
@@ -633,9 +641,9 @@ class {{=arrayWrapper}} {
633641 }
634642
635643 this._resize(other.size );
636- {{? usePlainTypedArray }}
644+ {{? usePlainTypedArray}}
637645 this._wrappers = other._wrappers.slice();
638- {{?? true }}
646+ {{?? true}}
639647 // Array deep copy
640648 other._wrappers.forEach((wrapper, index) => {
641649 this._wrappers[index].copy(wrapper);
@@ -644,9 +652,9 @@ class {{=arrayWrapper}} {
644652 }
645653
646654 static freeArray(refObject) {
647- {{? usePlainTypedArray }}
655+ {{? usePlainTypedArray}}
648656 // For TypedArray: .data will be 'free()'-ed in parent struct
649- {{?? true }}
657+ {{?? true}}
650658 let refObjectArray = refObject.data;
651659 refObjectArray.length = refObject.size ;
652660 for (let index = 0; index < refObject.size ; index++) {
0 commit comments