rclnodejs 0.27.4 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,7 +31,7 @@ if (it.spec.fields.length === 0) {
31
31
  },
32
32
  "name": "_dummy"
33
33
  });
34
- } /* if */
34
+ }
35
35
 
36
36
  function getPrimitiveNameByType(type) {
37
37
  if (type.type === 'bool') {
@@ -69,7 +69,7 @@ function getPrimitiveNameByType(type) {
69
69
 
70
70
  function getTypedArrayName(type) {
71
71
  const t = type.type.toLowerCase();
72
- let typedArrayName;
72
+ let typedArrayName = null;
73
73
 
74
74
  switch (t) {
75
75
  case 'byte':
@@ -108,7 +108,6 @@ function getTypedArrayName(type) {
108
108
  default:
109
109
  typedArrayName = '';
110
110
  }
111
-
112
111
  return typedArrayName;
113
112
  }
114
113
 
@@ -158,7 +157,7 @@ function isTypedArrayType(type) {
158
157
  return typedArrayType.indexOf(type.type.toLowerCase()) !== -1;
159
158
  }
160
159
 
161
- const usePlainTypedArray = isTypedArrayType(it.spec.baseType);
160
+ const willUseTypedArray = isTypedArrayType(it.spec.baseType);
162
161
  const currentTypedArray = getTypedArrayName(it.spec.baseType);
163
162
  const currentTypedArrayElementType = getTypedArrayElementName(it.spec.baseType);
164
163
 
@@ -220,7 +219,7 @@ function extractMemberNames(fields) {
220
219
  }
221
220
  }}
222
221
 
223
- {{? usePlainTypedArray}}
222
+ {{? willUseTypedArray}}
224
223
  const rclnodejs = require('bindings')('rclnodejs');
225
224
  {{?}}
226
225
  const ref = require('@rclnodejs/ref-napi');
@@ -231,116 +230,105 @@ const deallocator = require('../../rosidl_gen/deallocator.js');
231
230
  const translator = require('../../rosidl_gen/message_translator.js');
232
231
 
233
232
  {{~ it.spec.fields :field}}
234
- {{? shouldRequire(it.spec.baseType, field.type)}}
235
- const {{=getWrapperNameByType(field.type)}} = require('../../generated/{{=getPackageNameByType(field.type)}}/{{=getModulePathByType(field.type, it.messageInfo)}}');
236
- {{?}}
233
+ {{? shouldRequire(it.spec.baseType, field.type)}}
234
+ const {{=getWrapperNameByType(field.type)}} = require('../../generated/{{=getPackageNameByType(field.type)}}/{{=getModulePathByType(field.type, it.messageInfo)}}');
235
+ {{?}}
237
236
  {{~}}
238
237
 
239
238
  {{? it.spec.msgName === 'String'}}
240
239
  const {{=refObjectType}} = primitiveTypes.string;
241
240
  {{??}}
242
241
  const {{=refObjectType}} = StructType({
243
- {{~ it.spec.fields :field}}
244
- {{? field.type.isPrimitiveType && !field.type.isArray}}
245
- {{=field.name}}: primitiveTypes.{{=field.type.type}},
246
- {{?? field.type.isPrimitiveType && field.type.isArray && field.type.isFixedSizeArray}}
247
- {{=field.name}}: ArrayType(primitiveTypes.{{=field.type.type}}, {{=field.type.arraySize}}),
248
- {{?? !field.type.isPrimitiveType && field.type.isArray && field.type.isFixedSizeArray}}
249
- {{=field.name}}: ArrayType({{=getWrapperNameByType(field.type)}}.refObjectType, {{=field.type.arraySize}}),
250
- {{?? field.type.isArray}}
251
- {{=field.name}}: {{=getWrapperNameByType(field.type)}}.refObjectArrayType,
252
- {{?? true}}
253
- {{=field.name}}: {{=getWrapperNameByType(field.type)}}.refObjectType,
254
- {{?}}
255
- {{~}}
242
+ {{~ it.spec.fields :field}}
243
+ {{? field.type.isPrimitiveType && !field.type.isArray}}
244
+ {{=field.name}}: primitiveTypes.{{=field.type.type}},
245
+ {{?? field.type.isPrimitiveType && field.type.isArray && field.type.isFixedSizeArray}}
246
+ {{=field.name}}: ArrayType(primitiveTypes.{{=field.type.type}}, {{=field.type.arraySize}}),
247
+ {{?? !field.type.isPrimitiveType && field.type.isArray && field.type.isFixedSizeArray}}
248
+ {{=field.name}}: ArrayType({{=getWrapperNameByType(field.type)}}.refObjectType, {{=field.type.arraySize}}),
249
+ {{?? field.type.isArray}}
250
+ {{=field.name}}: {{=getWrapperNameByType(field.type)}}.refObjectArrayType,
251
+ {{??}}
252
+ {{=field.name}}: {{=getWrapperNameByType(field.type)}}.refObjectType,
253
+ {{?}}
254
+ {{~}}
256
255
  });
257
256
  {{?}}
258
257
 
259
258
  const {{=refArrayType}} = ArrayType({{=refObjectType}});
260
259
  const {{=refObjectArrayType}} = StructType({
261
- {{? usePlainTypedArray}}
260
+ {{? willUseTypedArray}}
262
261
  data: ref.refType(ref.types.{{=currentTypedArrayElementType}}),
263
- {{?? true}}
262
+ {{??}}
264
263
  data: {{=refArrayType}},
265
- {{?}}
264
+ {{?}}
266
265
  size: ref.types.size_t,
267
266
  capacity: ref.types.size_t
268
267
  });
269
268
 
270
- // Define the wrapper class.
269
+ {{/* Define the wrapper class for the message. */}}
271
270
  class {{=objectWrapper}} {
272
- constructor(other, willCheckConsistency = false) {
273
- this._wrapperFields = {};
274
- this._willCheckConsistency = willCheckConsistency;
275
- {{~ it.spec.fields :field}}
276
- {{? field.type.isArray && field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
277
- this._{{=field.name}}Array = [];
278
- {{?}}
279
- {{~}}
271
+ constructor(other) {
272
+ this._initialize();
273
+ this._setDefaults();
280
274
 
275
+ {{/* Construct `this` from `other`. */}}
281
276
  if (typeof other === 'object' && other._refObject) {
282
277
  this._refObject = new {{=refObjectType}}(other._refObject.toObject());
283
278
  {{~ it.spec.fields :field}}
284
- {{? field.type.isPrimitiveType && !field.type.isArray}}
285
- this._{{=field.name}}Intialized = true;
286
- {{?}}
287
-
288
- {{? field.type.isArray}}
289
- this._wrapperFields.{{=field.name}} = {{=getWrapperNameByType(field.type)}}.createArray();
290
- this._wrapperFields.{{=field.name}}.copy(other._wrapperFields.{{=field.name}});
291
- {{? field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
292
- this.{{=field.name}} = other.{{=field.name}};
293
- {{?}}
294
- {{?? !field.type.isPrimitiveType || (field.type.type === 'string' && it.spec.msgName !== 'String')}}
295
- this._wrapperFields.{{=field.name}} = new {{=getWrapperNameByType(field.type)}}(other._wrapperFields.{{=field.name}});
296
- {{?}}
279
+ {{? field.type.isArray}}
280
+ this._wrapperFields.{{=field.name}} = {{=getWrapperNameByType(field.type)}}.createArray();
281
+ this._wrapperFields.{{=field.name}}.copy(other._wrapperFields.{{=field.name}});
282
+ {{? field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
283
+ this.{{=field.name}} = other.{{=field.name}};
284
+ {{?}}
285
+ {{?? !field.type.isPrimitiveType || (field.type.type === 'string' && it.spec.msgName !== 'String')}}
286
+ this._wrapperFields.{{=field.name}} = new {{=getWrapperNameByType(field.type)}}(other._wrapperFields.{{=field.name}});
287
+ {{?}}
297
288
  {{~}}
298
289
  } else if (typeof other !== 'undefined') {
299
- this._initMembers();
290
+ {{/* Try to construct the message from a plan object of JavaScript. */}}
300
291
  translator.constructFromPlanObject(this, other);
301
- } else {
302
- this._initMembers();
303
292
  }
304
- this.freeze();
293
+ this.freeze(/*own=*/false);
305
294
  }
306
295
 
307
- _initMembers() {
308
- this._refObject = new {{=refObjectType}}();
296
+ {{/* Set default values if the fields of the message have. */}}
297
+ _setDefaults() {
309
298
  {{~ it.spec.fields :field}}
310
- {{? it.spec.isEmpty}}
311
- this._{{=field.name}}Intialized = true;
312
- {{??}}
313
- {{? field.type.isPrimitiveType && !field.type.isArray}}
314
- {{? field.default_value === null}}
315
- this._{{=field.name}}Intialized = false;
316
- {{?? field.type.type === 'string' || field.type.type === 'wstring'}}
317
- this._refObject.{{=field.name}} = "{{=field.default_value.replace(/"/g, '\\"')}}";
318
- this._{{=field.name}}Intialized = true;
319
- {{??}}
320
- this._refObject.{{=field.name}} = {{=field.default_value}};
321
- this._{{=field.name}}Intialized = true;
322
- {{?}}
323
- {{?}}
299
+ {{? field.type.isPrimitiveType && !field.type.isArray && field.default_value}}
300
+ {{? field.type.type === 'string' || field.type.type === 'wstring'}}
301
+ this._refObject.{{=field.name}} = "{{=field.default_value.replace(/"/g, '\\"')}}";
302
+ {{??}}
303
+ this._refObject.{{=field.name}} = {{=field.default_value}};
304
+ {{?}}
305
+ {{?? field.type.isPrimitiveType && !isTypedArrayType(field.type) && field.default_value}}
306
+ this._{{=field.name}}Array = {{=JSON.stringify(field.default_value)}};
307
+ {{?? field.type.isPrimitiveType && isTypedArrayType(field.type) && field.default_value}}
308
+ this._wrapperFields.{{=field.name}}.fill({{=getTypedArrayName(field.type)}}.from({{=JSON.stringify(field.default_value)}}));
309
+ {{?}}
310
+ {{~}}
311
+ }
324
312
 
325
- {{? field.type.isArray}}
326
- this._wrapperFields.{{=field.name}} = {{=getWrapperNameByType(field.type)}}.createArray();
327
- {{? field.default_value !== null && field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
328
- this._{{=field.name}}Array = {{=JSON.stringify(field.default_value)}};
329
- {{?}}
330
- {{? field.default_value !== null && field.type.isPrimitiveType && isTypedArrayType(field.type)}}
331
- this._wrapperFields.{{=field.name}}.fill({{=getTypedArrayName(field.type)}}.from({{=JSON.stringify(field.default_value)}}));
332
- {{?}}
333
- {{? field.type.type === 'string' && field.type.isFixedSizeArray}}
334
- for (let i = 0; i < {{=field.type.arraySize}}; i++) {
335
- primitiveTypes.initString(this._refObject.{{=field.name}}[i]);
336
- }
337
- {{?}}
338
- {{?? !field.type.isPrimitiveType || (field.type.type === 'string' && it.spec.msgName !== 'String')}}
339
- this._wrapperFields.{{=field.name}} = new {{=getWrapperNameByType(field.type)}}();
340
- {{?? it.spec.msgName === 'String'}}
341
- primitiveTypes.initString(this._refObject);
342
- {{?}}
343
- {{?}}
313
+ _initialize() {
314
+ this._wrapperFields = {};
315
+ this._refObject = new {{=refObjectType}}();
316
+ {{~ it.spec.fields :field}}
317
+ {{? field.type.isArray}}
318
+ this._wrapperFields.{{=field.name}} = {{=getWrapperNameByType(field.type)}}.createArray();
319
+ {{? field.type.type === 'string' && field.type.isFixedSizeArray}}
320
+ for (let i = 0; i < {{=field.type.arraySize}}; i++) {
321
+ primitiveTypes.initString(this._refObject.{{=field.name}}[i]);
322
+ }
323
+ {{?}}
324
+ {{? field.type.isArray && field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
325
+ this._{{=field.name}}Array = [];
326
+ {{?}}
327
+ {{?? !field.type.isPrimitiveType || (field.type.type === 'string' && it.spec.msgName !== 'String')}}
328
+ this._wrapperFields.{{=field.name}} = new {{=getWrapperNameByType(field.type)}}();
329
+ {{?? it.spec.msgName === 'String'}}
330
+ primitiveTypes.initString(this._refObject);
331
+ {{?}}
344
332
  {{~}}
345
333
  }
346
334
 
@@ -367,102 +355,93 @@ class {{=objectWrapper}} {
367
355
  }
368
356
 
369
357
  toRawROS() {
370
- this.freeze(true);
358
+ this.freeze(/*own=*/true);
371
359
  return this._refObject.ref();
372
360
  }
373
361
 
374
- freeze(own = false, checkConsistency = false) {
375
- {{~ it.spec.fields :field}}
376
- {{? field.type.isPrimitiveType && !field.type.isArray}}
377
- if (checkConsistency && !this._{{=field.name}}Intialized) {
378
- throw new TypeError('Invalid argument: {{=field.name}} in {{=it.spec.msgName}}');
379
- }
380
- {{?}}
381
- {{~}}
382
-
362
+ {{ /*Assign values to the ref object wrapped by `this`. */ }}
363
+ freeze(own) {
383
364
  {{~ it.spec.fields :field}}
384
- {{? field.type.isArray && field.type.isPrimitiveType && !isTypedArrayType(field.type) && field.type.isFixedSizeArray }}
385
- {{? field.type.type === 'string'}}
386
- for (let i = 0; i < {{=field.type.arraySize}}; i++) {
365
+ {{? field.type.isArray && field.type.isPrimitiveType && !isTypedArrayType(field.type) && field.type.isFixedSizeArray}}
366
+ {{? field.type.type === 'string'}}
367
+ for (let i = 0; i < {{=field.type.arraySize}}; i++) {
368
+ if (own) {
369
+ primitiveTypes.initString(this._refObject.{{=field.name}}[i].ref(), own);
370
+ } else {
371
+ if (this._{{=field.name}}Array.length === {{=field.type.arraySize}}) {
372
+ const value = this._{{=field.name}}Array[i];
373
+ this._refObject.{{=field.name}}[i].data = value;
374
+ this._refObject.{{=field.name}}[i].size = Buffer.byteLength(value);
375
+ this._refObject.{{=field.name}}[i].capacity = Buffer.byteLength(value) + 1;
376
+ }
377
+ }
378
+ }
379
+ {{??}}
380
+ {{/* For non-TypedArray like int64/uint64/bool. */}}
381
+ this._refObject.{{=field.name}} = this._{{=field.name}}Array;
382
+ {{?}}
383
+ {{?? field.type.isArray && field.type.isPrimitiveType && isTypedArrayType(field.type) && field.type.isFixedSizeArray}}
384
+ this._refObject.{{=field.name}} = Array.from(this._wrapperFields.{{=field.name}}.data);
385
+ {{?? field.type.isArray && field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
387
386
  if (own) {
388
- primitiveTypes.initString(this._refObject.{{=field.name}}[i].ref(), own);
387
+ this._wrapperFields.{{=field.name}}.fill([]);
389
388
  } else {
390
- if (this._{{=field.name}}Array.length === {{=field.type.arraySize}}) {
391
- const value = this._{{=field.name}}Array[i];
392
- this._refObject.{{=field.name}}[i].data = value;
393
- this._refObject.{{=field.name}}[i].size = Buffer.byteLength(value);
394
- this._refObject.{{=field.name}}[i].capacity = Buffer.byteLength(value) + 1;
395
- }
389
+ this._wrapperFields.{{=field.name}}.fill(this._{{=field.name}}Array);
396
390
  }
397
- }
398
- // For non-typed array like int64/uint64/bool.
399
- {{?? true}}
400
- this._refObject.{{=field.name}} = this._{{=field.name}}Array;
401
- {{?}}
402
- {{?? field.type.isArray && field.type.isPrimitiveType && isTypedArrayType(field.type) && field.type.isFixedSizeArray}}
403
- this._refObject.{{=field.name}} = Array.from(this._wrapperFields.{{=field.name}}.data);
404
- {{?? field.type.isArray && field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
405
- if (!own) {
406
- this._wrapperFields.{{=field.name}}.fill(this._{{=field.name}}Array);
407
- this._wrapperFields.{{=field.name}}.freeze(own, checkConsistency);
391
+ this._wrapperFields.{{=field.name}}.freeze(own);
408
392
  this._refObject.{{=field.name}} = this._wrapperFields.{{=field.name}}.refObject;
409
- } else {
410
- this._wrapperFields.{{=field.name}}.fill([]);
411
- this._wrapperFields.{{=field.name}}.freeze(own, checkConsistency);
393
+ {{?? field.type.isArray && field.type.isPrimitiveType && isTypedArrayType(field.type)}}
394
+ if (own) {
395
+ this._wrapperFields.{{=field.name}}.fill({{=getTypedArrayName(field.type)}}.from([]));
396
+ }
397
+ this._wrapperFields.{{=field.name}}.freeze(own);
412
398
  this._refObject.{{=field.name}} = this._wrapperFields.{{=field.name}}.refObject;
413
- }
414
- {{?? field.type.isArray && !field.type.isPrimitiveType && field.type.isFixedSizeArray}}
415
- for (let i = 0; i < {{=field.type.arraySize}}; i++) {
416
- if (this._wrapperFields.{{=field.name}}.data[i]) {
417
- this._wrapperFields.{{=field.name}}.data[i].freeze(own, checkConsistency);
418
- this._refObject.{{=field.name}}[i] = this._wrapperFields.{{=field.name}}.data[i].refObject;
399
+ {{?? field.type.isArray && !field.type.isPrimitiveType && field.type.isFixedSizeArray}}
400
+ for (let i = 0; i < {{=field.type.arraySize}}; i++) {
401
+ if (this._wrapperFields.{{=field.name}}.data[i]) {
402
+ this._wrapperFields.{{=field.name}}.data[i].freeze(own);
403
+ this._refObject.{{=field.name}}[i] = this._wrapperFields.{{=field.name}}.data[i].refObject;
404
+ }
419
405
  }
420
- }
421
- {{?? !field.type.isPrimitiveType || field.type.isArray}}
422
- this._wrapperFields.{{=field.name}}.freeze(own, checkConsistency);
423
- this._refObject.{{=field.name}} = this._wrapperFields.{{=field.name}}.refObject;
424
- {{? field.type.isArray && field.type.isPrimitiveType }}
425
- if (own) {
426
- this._wrapperFields.{{=field.name}}.fill({{=getTypedArrayName(field.type)}}.from([]));
427
- this._wrapperFields.{{=field.name}}.freeze(own, checkConsistency);
406
+ {{?? field.type.isArray || !field.type.isPrimitiveType}}
407
+ {{? field.type.isArray}}
408
+ if (own) {
409
+ this._wrapperFields.{{=field.name}}.fill([]);
410
+ }
411
+ {{?}}
412
+ this._wrapperFields.{{=field.name}}.freeze(own);
428
413
  this._refObject.{{=field.name}} = this._wrapperFields.{{=field.name}}.refObject;
429
- }
430
- {{?}}
431
- {{?? field.type.type === 'string' && it.spec.msgName !== 'String'}}
432
- if (own) {
433
- this._wrapperFields.{{=field.name}}.freeze(own, checkConsistency);
434
- }
435
- this._refObject.{{=field.name}} = this._wrapperFields.{{=field.name}}.refObject;
436
- {{?? it.spec.msgName === 'String'}}
437
- if (own) {
438
- primitiveTypes.initString(this._refObject.ref(), own);
439
- }
440
- {{?}}
414
+ {{?? field.type.type === 'string' && it.spec.msgName !== 'String'}}
415
+ if (own) {
416
+ this._wrapperFields.{{=field.name}}.freeze(own);
417
+ }
418
+ this._refObject.{{=field.name}} = this._wrapperFields.{{=field.name}}.refObject;
419
+ {{?? it.spec.msgName === 'String'}}
420
+ if (own) {
421
+ primitiveTypes.initString(this._refObject.ref(), own);
422
+ }
423
+ {{?}}
441
424
  {{~}}
442
425
  }
443
426
 
444
427
  serialize() {
445
- this.freeze(/*own=*/false, this._willCheckConsistency);
428
+ this.freeze(/*own=*/false);
446
429
  return this._refObject.ref();
447
430
  }
448
431
 
449
432
  deserialize(refObject) {
450
433
  {{~ it.spec.fields :field}}
451
- {{? field.type.isPrimitiveType && !field.type.isArray}}
452
- this._{{=field.name}}Intialized = true;
453
- {{?}}
454
-
455
434
  {{? field.type.isArray && field.type.isPrimitiveType && field.type.isFixedSizeArray && isTypedArrayType(field.type)}}
456
435
  this._wrapperFields.{{=field.name}}.fill(refObject.{{=field.name}}.toArray());
457
436
  {{?? field.type.isArray && field.type.isPrimitiveType && field.type.isFixedSizeArray && !isTypedArrayType(field.type)}}
458
- {{? field.type.type === 'string' }}
459
- for (let index = 0; index < {{=field.type.arraySize}}; index++) {
460
- this._{{=field.name}}Array[index] = refObject.{{=field.name}}[index].data;
461
- }
462
- // For non-typed array like int64/uint64/bool.
463
- {{?? true}}
464
- this._{{=field.name}}Array = refObject.{{=field.name}}.toArray();
465
- {{?}}
437
+ {{? field.type.type === 'string'}}
438
+ for (let index = 0; index < {{=field.type.arraySize}}; index++) {
439
+ this._{{=field.name}}Array[index] = refObject.{{=field.name}}[index].data;
440
+ }
441
+ {{??}}
442
+ {{/* For non-TypedArray like int64/uint64/bool. */}}
443
+ this._{{=field.name}}Array = refObject.{{=field.name}}.toArray();
444
+ {{?}}
466
445
  {{?? field.type.isArray && field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
467
446
  refObject.{{=field.name}}.data.length = refObject.{{=field.name}}.size;
468
447
  for (let index = 0; index < refObject.{{=field.name}}.size; index++) {
@@ -474,7 +453,7 @@ class {{=objectWrapper}} {
474
453
  for (let i = 0; i < {{=field.type.arraySize}}; i++) {
475
454
  this._wrapperFields.{{=field.name}}.data[i].copyRefObject(refObject.{{=field.name}}[i]);
476
455
  }
477
- {{?? !field.type.isPrimitiveType || field.type.isArray}}
456
+ {{?? field.type.isArray || !field.type.isPrimitiveType}}
478
457
  this._wrapperFields.{{=field.name}}.copyRefObject(refObject.{{=field.name}});
479
458
  {{?? field.type.type === 'string' && it.spec.msgName !== 'String'}}
480
459
  this._wrapperFields.{{=field.name}}.data = refObject.{{=field.name}}.data;
@@ -493,9 +472,8 @@ class {{=objectWrapper}} {
493
472
  {{? field.type.isArray && !field.type.isFixedSizeArray}}
494
473
  if (refObject.{{=field.name}}.size != 0) {
495
474
  {{=getWrapperNameByType(field.type)}}.ArrayType.freeArray(refObject.{{=field.name}});
496
- if ({{=getWrapperNameByType(field.type)}}.ArrayType.useTypedArray) {
497
- // Do nothing, the v8 will take the ownership of the ArrayBuffer used by the typed array.
498
- } else {
475
+ {{/* We don't need to free the memory for TypedArray objects, because v8 takes the ownership of it. */}}
476
+ if (!{{=getWrapperNameByType(field.type)}}.ArrayType.useTypedArray) {
499
477
  deallocator.freeStructMember(refObject.{{=field.name}}, {{=getWrapperNameByType(field.type)}}.refObjectArrayType, 'data');
500
478
  }
501
479
  }
@@ -548,27 +526,18 @@ class {{=objectWrapper}} {
548
526
  {{?? !field.type.isPrimitiveType && !field.type.isArray}}
549
527
  return this._wrapperFields.{{=field.name}};
550
528
  {{?? !field.type.isArray && field.type.type === 'string' && it.spec.msgName !== 'String'}}
551
- if (!this._{{=field.name}}Intialized) {
552
- return undefined;
553
- }
554
529
  return this._wrapperFields.{{=field.name}}.data;
555
- {{?? true}}
556
- if (!this._{{=field.name}}Intialized) {
557
- return undefined;
558
- }
530
+ {{??}}
559
531
  return this._refObject.{{=field.name}};
560
532
  {{?}}
561
533
  }
562
534
 
563
535
  set {{=field.name}}(value) {
564
- {{? field.type.isPrimitiveType && !field.type.isArray}}
565
- this._{{=field.name}}Intialized = true;
566
- {{?}}
567
-
568
536
  {{?field.type.isArray && field.type.isFixedSizeArray}}
569
537
  if (value.length !== {{=field.type.arraySize}}) {
570
538
  throw new RangeError('The length of the array must be {{=field.type.arraySize}}.');
571
539
  }
540
+
572
541
  {{?}}
573
542
  {{?field.type.isArray && field.type.isUpperBound}}
574
543
  if (value.length > {{=field.type.arraySize}}) {
@@ -590,11 +559,11 @@ class {{=objectWrapper}} {
590
559
  }
591
560
  {{?? !field.type.isArray && field.type.type === 'string' && it.spec.msgName !== 'String'}}
592
561
  this._wrapperFields.{{=field.name}}.data = value;
593
- {{?? true}}
594
- {{? it.spec.msgName === 'String'}}
595
- this._refObject.size = Buffer.byteLength(value);
596
- this._refObject.capacity = Buffer.byteLength(value) + 1;
597
- {{?}}
562
+ {{??}}
563
+ {{? it.spec.msgName === 'String'}}
564
+ this._refObject.size = Buffer.byteLength(value);
565
+ this._refObject.capacity = Buffer.byteLength(value) + 1;
566
+ {{?}}
598
567
  this._refObject.{{=field.name}} = value;
599
568
  {{?}}
600
569
  }
@@ -604,26 +573,22 @@ class {{=objectWrapper}} {
604
573
  this._refObject = new {{=refObjectType}}(refObject.toObject());
605
574
 
606
575
  {{~ it.spec.fields :field}}
607
- {{? field.type.isPrimitiveType && !field.type.isArray}}
608
- this._{{=field.name}}Intialized = true;
609
- {{?}}
610
-
611
- {{? field.type.isArray && field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
612
- refObject.{{=field.name}}.data.length = refObject.{{=field.name}}.size;
613
- for (let index = 0; index < refObject.{{=field.name}}.size; index++) {
614
- this._{{=field.name}}Array[index] = refObject.{{=field.name}}.data[index].data;
615
- }
616
- {{?? field.type.isArray && field.type.isPrimitiveType && field.type.isFixedSizeArray}}
617
- this._wrapperFields.{{=field.name}}.fill(refObject.{{=field.name}}.toArray());
618
- {{?? field.type.isArray && !field.type.isPrimitiveType && field.type.isFixedSizeArray}}
619
- this._refObject.{{=field.name}} = refObject.{{=field.name}};
620
- this._wrapperFields.{{=field.name}}.size = {{=field.type.arraySize}}
621
- for (let i = 0; i < {{=field.type.arraySize}}; i++) {
622
- this._wrapperFields.{{=field.name}}.data[i].copyRefObject(refObject.{{=field.name}}[i]);
623
- }
624
- {{?? !field.type.isPrimitiveType || field.type.isArray || (field.type.type === 'string' && it.spec.msgName !== 'String')}}
625
- this._wrapperFields.{{=field.name}}.copyRefObject(this._refObject.{{=field.name}});
626
- {{?}}
576
+ {{? field.type.isArray && field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
577
+ refObject.{{=field.name}}.data.length = refObject.{{=field.name}}.size;
578
+ for (let index = 0; index < refObject.{{=field.name}}.size; index++) {
579
+ this._{{=field.name}}Array[index] = refObject.{{=field.name}}.data[index].data;
580
+ }
581
+ {{?? field.type.isArray && field.type.isPrimitiveType && field.type.isFixedSizeArray}}
582
+ this._wrapperFields.{{=field.name}}.fill(refObject.{{=field.name}}.toArray());
583
+ {{?? field.type.isArray && !field.type.isPrimitiveType && field.type.isFixedSizeArray}}
584
+ this._refObject.{{=field.name}} = refObject.{{=field.name}};
585
+ this._wrapperFields.{{=field.name}}.size = {{=field.type.arraySize}}
586
+ for (let i = 0; i < {{=field.type.arraySize}}; i++) {
587
+ this._wrapperFields.{{=field.name}}.data[i].copyRefObject(refObject.{{=field.name}}[i]);
588
+ }
589
+ {{?? !field.type.isPrimitiveType || field.type.isArray || (field.type.type === 'string' && it.spec.msgName !== 'String')}}
590
+ this._wrapperFields.{{=field.name}}.copyRefObject(this._refObject.{{=field.name}});
591
+ {{?}}
627
592
  {{~}}
628
593
  }
629
594
 
@@ -631,15 +596,11 @@ class {{=objectWrapper}} {
631
596
  this._refObject = new {{=refObjectType}}(other._refObject.toObject());
632
597
 
633
598
  {{~ it.spec.fields :field}}
634
- {{? field.type.isPrimitiveType && !field.type.isArray}}
635
- this._{{=field.name}}Intialized = true;
636
- {{?}}
637
-
638
- {{? field.type.isArray && field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
639
- this._{{=field.name}}Array = other._{{=field.name}}Array.slice();
640
- {{?? !field.type.isPrimitiveType || field.type.isArray || (field.type.type === 'string' && it.spec.msgName !== 'String')}}
641
- this._wrapperFields.{{=field.name}}.copy(other._wrapperFields.{{=field.name}});
642
- {{?}}
599
+ {{? field.type.isArray && field.type.isPrimitiveType && !isTypedArrayType(field.type)}}
600
+ this._{{=field.name}}Array = other._{{=field.name}}Array.slice();
601
+ {{?? !field.type.isPrimitiveType || field.type.isArray || (field.type.type === 'string' && it.spec.msgName !== 'String')}}
602
+ this._wrapperFields.{{=field.name}}.copy(other._wrapperFields.{{=field.name}});
603
+ {{?}}
643
604
  {{~}}
644
605
  }
645
606
 
@@ -657,7 +618,7 @@ class {{=objectWrapper}} {
657
618
  }
658
619
  }
659
620
 
660
- // Define the wrapper of array class.
621
+ {{/* Define the wrapper class for the message array. */}}
661
622
  class {{=arrayWrapper}} {
662
623
  constructor(size = 0) {
663
624
  this._resize(size);
@@ -668,15 +629,15 @@ class {{=arrayWrapper}} {
668
629
  }
669
630
 
670
631
  fill(values) {
671
- {{? usePlainTypedArray}}
632
+ {{? willUseTypedArray}}
672
633
  if (Array.isArray(values)) {
673
- // Convert JavaScript array
634
+ {{/* Convert to TypedArray. */}}
674
635
  this._wrappers = new {{=currentTypedArray}}(values);
675
636
  } else {
676
637
  this._wrappers = values;
677
638
  }
678
639
  {{?? isPrimitivePackage(it.spec.baseType)}}
679
- // Now for primitive arrays, only string/bool/int64/uint64 array drops here.
640
+ {{/* For primitive arrays, only string/bool/int64/uint64 array drops here. */}}
680
641
  const length = values.length;
681
642
  this._resize(length);
682
643
  for (let i = 0; i < length; ++i) {
@@ -684,7 +645,7 @@ class {{=arrayWrapper}} {
684
645
  wrapper.data = values[i];
685
646
  this._wrappers[i] = wrapper;
686
647
  }
687
- {{?? true}}
648
+ {{??}}
688
649
  const length = values.length;
689
650
  this._resize(length);
690
651
  values.forEach((value, index) => {
@@ -697,11 +658,10 @@ class {{=arrayWrapper}} {
697
658
  {{?}}
698
659
  }
699
660
 
700
- // Put all data currently stored in `this._wrappers` into `this._refObject`
661
+ {{/* Put all data currently stored in `this._wrappers` into `this._refObject`. */}}
701
662
  freeze(own) {
702
- {{? usePlainTypedArray}}
703
- // When it's a TypedArray: no need to copy to `this._refArray`
704
- {{?? true}}
663
+ {{/* When it's a TypedArray: no need to copy to `this._refArray`. */}}
664
+ {{? !willUseTypedArray}}
705
665
  this._wrappers.forEach((wrapper, index) => {
706
666
  wrapper.freeze(own);
707
667
  this._refArray[index] = wrapper.refObject;
@@ -714,12 +674,12 @@ class {{=arrayWrapper}} {
714
674
  if (this._refObject.capacity === 0) {
715
675
  this._refObject.data = null
716
676
  } else {
717
- {{? usePlainTypedArray}}
718
- const buffer = Buffer.from(new Uint8Array(this._wrappers.buffer));
719
- this._refObject.data = buffer;
720
- {{?? true}}
721
- this._refObject.data = this._refArray.buffer;
722
- {{?}}
677
+ {{? willUseTypedArray}}
678
+ const buffer = Buffer.from(new Uint8Array(this._wrappers.buffer));
679
+ this._refObject.data = buffer;
680
+ {{??}}
681
+ this._refObject.data = this._refArray.buffer;
682
+ {{?}}
723
683
  }
724
684
  }
725
685
 
@@ -738,7 +698,6 @@ class {{=arrayWrapper}} {
738
698
  set size(value) {
739
699
  if (typeof value != 'number') {
740
700
  throw new TypeError('Invalid argument: should provide a number to {{=arrayWrapper}}.size setter');
741
- return;
742
701
  }
743
702
  return this._resize(value);
744
703
  }
@@ -761,11 +720,10 @@ class {{=arrayWrapper}} {
761
720
  _resize(size) {
762
721
  if (size < 0) {
763
722
  throw new RangeError('Invalid argument: should provide a positive number');
764
- return;
765
723
  }
766
- {{? usePlainTypedArray}}
724
+ {{? willUseTypedArray}}
767
725
  this._refArray = undefined;
768
- {{?? true}}
726
+ {{??}}
769
727
  this._refArray = new {{=refArrayType}}(size);
770
728
  {{?}}
771
729
 
@@ -773,9 +731,9 @@ class {{=arrayWrapper}} {
773
731
  this._refObject.size = size;
774
732
  this._refObject.capacity = size;
775
733
 
776
- {{? usePlainTypedArray}}
734
+ {{? willUseTypedArray}}
777
735
  this._wrappers = new {{=currentTypedArray}}(size);
778
- {{?? true}}
736
+ {{??}}
779
737
  this._wrappers = new Array();
780
738
  for (let i = 0; i < size; i++) {
781
739
  this._wrappers.push(new {{=objectWrapper}}());
@@ -783,22 +741,21 @@ class {{=arrayWrapper}} {
783
741
  {{?}}
784
742
  }
785
743
 
786
- // Copy all data from `this._refObject` into `this._wrappers`
744
+ {{/* Copy all data from `this._refObject` into `this._wrappers`. */}}
787
745
  copyRefObject(refObject) {
788
746
  this._refObject = refObject;
789
747
 
790
- {{? usePlainTypedArray}}
748
+ {{? willUseTypedArray}}
791
749
  const byteLen = refObject.size * ref.types.{{=currentTypedArrayElementType}}.size;
792
- // An ArrayBuffer object that doesn't hold the ownership of the address
750
+ {{/* An ArrayBuffer object doesn't hold the ownership of memory block starting from address for TypedArray. */}}
793
751
  const arrayBuffer = refObject.data.length !== 0 ?
794
752
  rclnodejs.createArrayBufferFromAddress(refObject.data.hexAddress(), byteLen) :
795
753
  Buffer.alloc(0);
796
754
  this._wrappers = new {{=currentTypedArray}}(arrayBuffer);
797
- {{?? true}}
755
+ {{??}}
798
756
  let refObjectArray = this._refObject.data;
799
757
  refObjectArray.length = this._refObject.size;
800
758
  this._resize(this._refObject.size);
801
-
802
759
  for (let index = 0; index < this._refObject.size; index++) {
803
760
  this._wrappers[index].copyRefObject(refObjectArray[index]);
804
761
  }
@@ -811,10 +768,10 @@ class {{=arrayWrapper}} {
811
768
  }
812
769
 
813
770
  this._resize(other.size);
814
- {{? usePlainTypedArray}}
771
+ {{? willUseTypedArray}}
815
772
  this._wrappers = other._wrappers.slice();
816
- {{?? true}}
817
- // Array deep copy
773
+ {{??}}
774
+ {{/* Deep copy for non-TypedArray. */}}
818
775
  other._wrappers.forEach((wrapper, index) => {
819
776
  this._wrappers[index].copy(wrapper);
820
777
  });
@@ -822,9 +779,8 @@ class {{=arrayWrapper}} {
822
779
  }
823
780
 
824
781
  static freeArray(refObject) {
825
- {{? usePlainTypedArray}}
826
- // For TypedArray: .data will be 'free()'-ed in parent struct
827
- {{?? true}}
782
+ {{/* We don't need to free the memory for TypedArray objects, because v8 takes the ownership of it. */}}
783
+ {{? !willUseTypedArray}}
828
784
  let refObjectArray = refObject.data;
829
785
  refObjectArray.length = refObject.size;
830
786
  for (let index = 0; index < refObject.size; index++) {
@@ -842,7 +798,7 @@ class {{=arrayWrapper}} {
842
798
  }
843
799
 
844
800
  static get useTypedArray() {
845
- return {{=usePlainTypedArray}};
801
+ return {{=willUseTypedArray}};
846
802
  }
847
803
 
848
804
  get classType() {
@@ -851,19 +807,21 @@ class {{=arrayWrapper}} {
851
807
  }
852
808
 
853
809
  {{? it.spec.constants != undefined && it.spec.constants.length}}
854
- // Define constants ({{=it.spec.constants.length}} in total)
855
- {{~ it.spec.constants :c}}
856
- {{? c.type === "string"}}
857
- Object.defineProperty({{=objectWrapper}}, "{{=c.name}}", {value: "{{=c.value}}", writable: false, enumerable: true, configurable: true});
858
- {{?? true}}
859
- Object.defineProperty({{=objectWrapper}}, "{{=c.name}}", {value: {{=c.value}}, writable: false, enumerable: true, configurable: true});
860
- {{?}}
861
- {{~}}
810
+ {{/* Define constants ({{=it.spec.constants.length}} in total). */}}
811
+ {{~ it.spec.constants :c}}
812
+ {{? c.type === "string"}}
813
+ Object.defineProperty({{=objectWrapper}}, "{{=c.name}}", {value: "{{=c.value}}", writable: false, enumerable: true, configurable: true});
814
+ {{??}}
815
+ Object.defineProperty({{=objectWrapper}}, "{{=c.name}}", {value: {{=c.value}}, writable: false, enumerable: true, configurable: true});
816
+ {{?}}
817
+ {{~}}
862
818
  {{?}}
863
819
 
864
820
  module.exports = {{=objectWrapper}};
865
821
 
822
+ {{? it.isDebug}}
866
823
  /*
867
824
  * The following is the original spec object coming from parser:
868
825
  {{=it.json}}
869
826
  */
827
+ {{?}}