Skip to content

Commit e0c4cfc

Browse files
author
Minggang Wang
authored
Merge pull request #275 from minggangw/cleanup-message-template
Cleanup the message.dot template
2 parents b40312e + 34d0636 commit e0c4cfc

File tree

2 files changed

+40
-32
lines changed

2 files changed

+40
-32
lines changed

rosidl_gen/generator.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rosidl-generator",
3-
"version": "0.0.8",
3+
"version": "0.1.0",
44
"description": "Generate JavaScript object from ROS IDL(.msg) files",
55
"authors": [
66
"Minggang Wang <[email protected]>",

rosidl_gen/templates/message.dot

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ const currentTypedArray = getTypedArrayName(it.spec.baseType);
144144
const currentTypedArrayElementType = getTypedArrayElementName(it.spec.baseType);
145145

146146
function 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'}}
207207
const {{=refObjectType}} = primitiveTypes.string;
208208
{{??}}
209209
const {{=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

222222
const {{=refArrayType}} = ArrayType({{=refObjectType}});
223223
const {{=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

Comments
 (0)