mirror of
https://github.com/esiur/esiur-dart.git
synced 2026-04-03 17:58:21 +00:00
75 lines
2.1 KiB
Dart
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) {}
|
|
}
|