2
0
mirror of https://github.com/esiur/esiur-dart.git synced 2026-04-03 17:58:21 +00:00
Files
esiur-dart/lib/src/Resource/Template/PropertyTemplate.dart
2022-06-16 04:51:26 +03:00

75 lines
2.1 KiB
Dart

import 'MemberTemplate.dart';
import '../../Data/DC.dart';
import '../../Data/BinaryList.dart';
import 'TypeTemplate.dart';
import 'MemberType.dart';
import '../StorageMode.dart';
import '../../Data/RepresentationType.dart';
class PropertyTemplate extends MemberTemplate {
RepresentationType valueType;
int permission = 0;
bool recordable;
String? readAnnotation;
String? writeAnnotation;
DC compose() {
var name = super.compose();
var pv = (permission << 1) | (recordable ? 1 : 0);
if (inherited) pv |= 0x80;
if (writeAnnotation != null && readAnnotation != null) {
var rexp = DC.stringToBytes(readAnnotation as String);
var wexp = DC.stringToBytes(writeAnnotation as String);
return (BinaryList()
..addUint8(0x38 | pv)
..addUint8(name.length)
..addDC(name)
..addDC(valueType.compose())
..addInt32(wexp.length)
..addDC(wexp)
..addInt32(rexp.length)
..addDC(rexp))
.toDC();
} else if (writeAnnotation != null) {
var wexp = DC.stringToBytes(writeAnnotation as String);
return (BinaryList()
..addUint8(0x30 | pv)
..addUint8(name.length)
..addDC(name)
..addDC(valueType.compose())
..addInt32(wexp.length)
..addDC(wexp))
.toDC();
} else if (readAnnotation != null) {
var rexp = DC.stringToBytes(readAnnotation as String);
return (BinaryList()
..addUint8(0x28 | pv)
..addUint8(name.length)
..addDC(name)
..addDC(valueType.compose())
..addInt32(rexp.length)
..addDC(rexp))
.toDC();
} else
return (BinaryList()
..addUint8(0x20 | pv)
..addUint8(name.length)
..addDC(name)
..addDC(valueType.compose()))
.toDC();
}
PropertyTemplate(TypeTemplate template, int index, String name,
bool inherited, this.valueType,
[this.readAnnotation = null,
this.writeAnnotation = null,
this.recordable = false])
: super(template, index, name, inherited) {}
}