16 void ByteArrayMethods::registerConstants(
MinitScript* minitScript) {
19 void ByteArrayMethods::registerMethods(
MinitScript* minitScript) {
30 MinitScript::TYPE_BYTEARRAY
32 minitScript(minitScript) {}
33 const string getMethodName()
override {
37 if (arguments.size() == 0) {
38 returnValue.
setType(MinitScript::TYPE_BYTEARRAY);
56 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false }
58 MinitScript::TYPE_INTEGER
60 minitScript(minitScript) {}
61 const string getMethodName()
override {
62 return "ByteArray::getSize";
65 if (arguments.size() == 1 &&
66 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY) {
67 returnValue.
setValue(
static_cast<int64_t
>(arguments[0].getByteArraySize()));
73 minitScript->
registerMethod(
new MethodByteArrayGetSize(minitScript));
82 MethodByteArrayGetReadPosition(
MinitScript* minitScript):
85 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false }
87 MinitScript::TYPE_INTEGER
89 minitScript(minitScript) {}
90 const string getMethodName()
override {
91 return "ByteArray::getReadPosition";
94 if (arguments.size() == 1 &&
95 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY) {
96 returnValue.
setValue(*arguments[0].getByteArrayReadPointer());
102 minitScript->
registerMethod(
new MethodByteArrayGetReadPosition(minitScript));
111 MethodByteArraySetReadPosition(
MinitScript* minitScript):
114 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
115 { .type = MinitScript::TYPE_INTEGER, .name =
"position", .optional =
false, .reference =
false, .nullable =
false }
117 MinitScript::TYPE_NULL
119 minitScript(minitScript) {}
120 const string getMethodName()
override {
121 return "ByteArray::setReadPosition";
125 if (arguments.size() == 2 &&
126 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY &&
127 MinitScript::getIntegerValue(arguments, 1, position) ==
true) {
128 const auto byteArrayReadPtr = arguments[0].getByteArrayReadPointer();
129 if (position < 0ll) {
130 minitScript->
complain(getMethodName(), subStatement,
"Byte array read position must not be lesser than 0");
132 if (position >= arguments[0].getByteArraySize()) {
133 minitScript->
complain(getMethodName(), subStatement,
"Byte array read position exceeding byte array size: " + to_string(*byteArrayReadPtr) +
" >= " + to_string(arguments[0].getByteArraySize()));
135 *byteArrayReadPtr = position;
142 minitScript->
registerMethod(
new MethodByteArraySetReadPosition(minitScript));
151 MethodByteArrayGetWritePosition(
MinitScript* minitScript):
154 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false }
156 MinitScript::TYPE_INTEGER
158 minitScript(minitScript) {}
159 const string getMethodName()
override {
160 return "ByteArray::getWritePosition";
163 if (arguments.size() == 1 &&
164 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY) {
165 returnValue.
setValue(*arguments[0].getByteArrayWritePointer());
171 minitScript->
registerMethod(
new MethodByteArrayGetWritePosition(minitScript));
180 MethodByteArraySetWritePosition(
MinitScript* minitScript):
183 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
184 { .type = MinitScript::TYPE_INTEGER, .name =
"position", .optional =
false, .reference =
false, .nullable =
false }
186 MinitScript::TYPE_NULL
188 minitScript(minitScript) {}
189 const string getMethodName()
override {
190 return "ByteArray::setWritePosition";
194 if (arguments.size() == 2 &&
195 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY &&
196 MinitScript::getIntegerValue(arguments, 1, position) ==
true) {
197 const auto byteArrayWritePtr = arguments[0].getByteArrayWritePointer();
198 if (position < 0ll) {
199 minitScript->
complain(getMethodName(), subStatement,
"Byte array write position must not be lesser than 0");
201 if (position > arguments[0].getByteArraySize()) {
202 minitScript->
complain(getMethodName(), subStatement,
"Byte array write position exceeding byte array size: " + to_string(*byteArrayWritePtr) +
" >= " + to_string(arguments[0].getByteArraySize()));
204 *byteArrayWritePtr = position;
211 minitScript->
registerMethod(
new MethodByteArraySetWritePosition(minitScript));
223 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
225 MinitScript::TYPE_BOOLEAN,
228 minitScript(minitScript) {}
229 const string getMethodName()
override {
230 return "ByteArray::readBool";
233 if (arguments.size() == 1 &&
234 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY) {
235 const auto byteArrayReadPtr = arguments[0].getByteArrayReadPointer();
236 if ((*byteArrayReadPtr) + 1 > arguments[0].getByteArraySize()) {
237 minitScript->
complain(getMethodName(), subStatement,
"Exceeding byte array size while reading boolean value, because of read position " + to_string(*byteArrayReadPtr) +
" + 1 >= " + to_string(arguments[0].getByteArraySize()));
239 returnValue.
setValue(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++) != 0);
246 minitScript->
registerMethod(
new MethodByteArrayReadBool(minitScript));
258 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false }
260 MinitScript::TYPE_INTEGER,
263 minitScript(minitScript) {}
264 const string getMethodName()
override {
265 return "ByteArray::readInt8";
268 if (arguments.size() == 1 &&
269 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY) {
270 const auto byteArrayReadPtr = arguments[0].getByteArrayReadPointer();
271 if ((*byteArrayReadPtr) + 1 > arguments[0].getByteArraySize()) {
272 minitScript->
complain(getMethodName(), subStatement,
"Exceeding byte array size while reading 8 bit integer value, because of read position " + to_string(*byteArrayReadPtr) +
" + 1 >= " + to_string(arguments[0].getByteArraySize()));
274 returnValue.
setValue(
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)));
281 minitScript->
registerMethod(
new MethodByteArrayReadInt8(minitScript));
290 MethodByteArrayReadInt16(
MinitScript* minitScript):
293 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
295 MinitScript::TYPE_INTEGER,
298 minitScript(minitScript) {}
299 const string getMethodName()
override {
300 return "ByteArray::readInt16";
303 if (arguments.size() == 1 &&
304 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY) {
305 const auto byteArrayReadPtr = arguments[0].getByteArrayReadPointer();
306 if ((*byteArrayReadPtr) + 2 > arguments[0].getByteArraySize()) {
307 minitScript->
complain(getMethodName(), subStatement,
"Exceeding byte array size while reading 16 bit integer value, because of read position " + to_string(*byteArrayReadPtr) +
" + 2 >= " + to_string(arguments[0].getByteArraySize()));
310 static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) +
311 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 8)
319 minitScript->
registerMethod(
new MethodByteArrayReadInt16(minitScript));
328 MethodByteArrayReadInt32(
MinitScript* minitScript):
331 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
333 MinitScript::TYPE_INTEGER,
336 minitScript(minitScript) {}
337 const string getMethodName()
override {
338 return "ByteArray::readInt32";
341 if (arguments.size() == 1 &&
342 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY) {
343 const auto byteArrayReadPtr = arguments[0].getByteArrayReadPointer();
344 if ((*byteArrayReadPtr) + 4 > arguments[0].getByteArraySize()) {
345 minitScript->
complain(getMethodName(), subStatement,
"Exceeding byte array size while reading 32 bit integer value, because of read position " + to_string(*byteArrayReadPtr) +
" + 4 >= " + to_string(arguments[0].getByteArraySize()));
348 static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) +
349 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 8) +
350 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 16) +
351 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 24)
359 minitScript->
registerMethod(
new MethodByteArrayReadInt32(minitScript));
368 MethodByteArrayReadInt64(
MinitScript* minitScript):
371 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
373 MinitScript::TYPE_INTEGER,
376 minitScript(minitScript) {}
377 const string getMethodName()
override {
378 return "ByteArray::readInt64";
381 if (arguments.size() == 1 &&
382 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY) {
383 const auto byteArrayReadPtr = arguments[0].getByteArrayReadPointer();
384 if ((*byteArrayReadPtr) + 8 > arguments[0].getByteArraySize()) {
385 minitScript->
complain(getMethodName(), subStatement,
"Exceeding byte array size while reading 64 bit integer value, because of read position " + to_string(*byteArrayReadPtr) +
" + 8 >= " + to_string(arguments[0].getByteArraySize()));
388 static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) +
389 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 8) +
390 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 16) +
391 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 24) +
392 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 32) +
393 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 40) +
394 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 48) +
395 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 56)
404 minitScript->
registerMethod(
new MethodByteArrayReadInt64(minitScript));
413 MethodByteArrayReadFloat(
MinitScript* minitScript):
416 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
418 MinitScript::TYPE_FLOAT,
421 minitScript(minitScript) {}
422 const string getMethodName()
override {
423 return "ByteArray::readFloat";
426 if (arguments.size() == 1 &&
427 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY) {
428 const auto byteArrayReadPtr = arguments[0].getByteArrayReadPointer();
429 if ((*byteArrayReadPtr) + 4 > arguments[0].getByteArraySize()) {
430 minitScript->
complain(getMethodName(), subStatement,
"Exceeding byte array size while reading 32 bit float value, because of read position " + to_string(*byteArrayReadPtr) +
" + 4 >= " + to_string(arguments[0].getByteArraySize()));
432 uint32_t floatAsInt =
433 static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) +
434 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 8) +
435 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 16) +
436 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 24);
437 returnValue.
setValue(*((
float*)&floatAsInt));
444 minitScript->
registerMethod(
new MethodByteArrayReadFloat(minitScript));
453 MethodByteArrayReadSmallString(
MinitScript* minitScript):
456 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
458 MinitScript::TYPE_STRING,
461 minitScript(minitScript) {}
462 const string getMethodName()
override {
463 return "ByteArray::readSmallString";
466 if (arguments.size() == 1 &&
467 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY) {
468 const auto byteArrayReadPtr = arguments[0].getByteArrayReadPointer();
469 if ((*byteArrayReadPtr) + 1 > arguments[0].getByteArraySize()) {
470 minitScript->
complain(getMethodName(), subStatement,
"Exceeding byte array size while reading 8 bit string size, because of read position " + to_string(*byteArrayReadPtr) +
" + 1 >= " + to_string(arguments[0].getByteArraySize()));
473 auto size =
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++));
474 if ((*byteArrayReadPtr) + size > arguments[0].getByteArraySize()) {
475 minitScript->
complain(getMethodName(), subStatement,
"Exceeding byte array size while reading string bytes, because of read position " + to_string(*byteArrayReadPtr) +
" + " + to_string(size) +
" >= " + to_string(arguments[0].getByteArraySize()));
478 for (
auto i = 0; i < size; i++) value.data()[i] = arguments[0].getByteArrayEntry((*byteArrayReadPtr)++);
487 minitScript->
registerMethod(
new MethodByteArrayReadSmallString(minitScript));
496 MethodByteArrayReadMediumString(
MinitScript* minitScript):
499 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
501 MinitScript::TYPE_STRING,
504 minitScript(minitScript) {}
505 const string getMethodName()
override {
506 return "ByteArray::readMediumString";
509 if (arguments.size() == 1 &&
510 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY) {
511 const auto byteArrayReadPtr = arguments[0].getByteArrayReadPointer();
512 if ((*byteArrayReadPtr) + 2 > arguments[0].getByteArraySize()) {
513 minitScript->
complain(getMethodName(), subStatement,
"Exceeding byte array size while reading 16 bit string size, because of read position " + to_string(*byteArrayReadPtr) +
" + 2 >= " + to_string(arguments[0].getByteArraySize()));
517 static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) +
518 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 8);
519 if ((*byteArrayReadPtr) + size > arguments[0].getByteArraySize()) {
520 minitScript->
complain(getMethodName(), subStatement,
"Exceeding byte array size while reading string bytes, because of read position " + to_string(*byteArrayReadPtr) +
" + " + to_string(size) +
" >= " + to_string(arguments[0].getByteArraySize()));
523 for (
auto i = 0; i < size; i++) value.data()[i] = arguments[0].getByteArrayEntry((*byteArrayReadPtr)++);
532 minitScript->
registerMethod(
new MethodByteArrayReadMediumString(minitScript));
541 MethodByteArrayReadLargeString(
MinitScript* minitScript):
544 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
546 MinitScript::TYPE_STRING,
549 minitScript(minitScript) {}
550 const string getMethodName()
override {
551 return "ByteArray::readLargeString";
554 if (arguments.size() == 1 &&
555 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY) {
556 const auto byteArrayReadPtr = arguments[0].getByteArrayReadPointer();
557 if ((*byteArrayReadPtr) + 4 > arguments[0].getByteArraySize()) {
558 minitScript->
complain(getMethodName(), subStatement,
"Exceeding byte array size while reading 32 bit string size, because of read position " + to_string(*byteArrayReadPtr) +
" + 4 >= " + to_string(arguments[0].getByteArraySize()));
562 static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) +
563 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 8) +
564 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 16) +
565 (
static_cast<int64_t
>(arguments[0].getByteArrayEntry((*byteArrayReadPtr)++)) << 24);
566 if ((*byteArrayReadPtr) + size > arguments[0].getByteArraySize()) {
567 minitScript->
complain(getMethodName(), subStatement,
"Exceeding byte array size while reading string bytes, because of read position " + to_string(*byteArrayReadPtr) +
" + " + to_string(size) +
" >= " + to_string(arguments[0].getByteArraySize()));
570 for (
auto i = 0; i < size; i++) value.data()[i] = arguments[0].getByteArrayEntry((*byteArrayReadPtr)++);
579 minitScript->
registerMethod(
new MethodByteArrayReadLargeString(minitScript));
588 MethodByteArrayWriteBool(
MinitScript* minitScript):
591 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
592 { .type = MinitScript::TYPE_BOOLEAN, .name =
"value", .optional =
false, .reference =
false, .nullable =
false }
594 MinitScript::TYPE_NULL
596 minitScript(minitScript) {}
597 const string getMethodName()
override {
598 return "ByteArray::writeBool";
602 if (arguments.size() == 2 &&
603 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY &&
604 MinitScript::getBooleanValue(arguments, 1, value) ==
true) {
605 const auto byteArrayWritePtr = arguments[0].getByteArrayWritePointer();
606 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, value);
612 minitScript->
registerMethod(
new MethodByteArrayWriteBool(minitScript));
621 MethodByteArrayWriteInt8(
MinitScript* minitScript):
624 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
625 { .type = MinitScript::TYPE_INTEGER, .name =
"value", .optional =
false, .reference =
false, .nullable =
false }
627 MinitScript::TYPE_NULL
629 minitScript(minitScript) {}
630 const string getMethodName()
override {
631 return "ByteArray::writeInt8";
635 if (arguments.size() == 2 &&
636 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY &&
637 MinitScript::getIntegerValue(arguments, 1, value) ==
true) {
638 const auto byteArrayWritePtr = arguments[0].getByteArrayWritePointer();
639 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, value);
645 minitScript->
registerMethod(
new MethodByteArrayWriteInt8(minitScript));
654 MethodByteArrayWriteInt16(
MinitScript* minitScript):
657 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
658 { .type = MinitScript::TYPE_INTEGER, .name =
"value", .optional =
false, .reference =
false, .nullable =
false }
660 MinitScript::TYPE_NULL
662 minitScript(minitScript) {}
663 const string getMethodName()
override {
664 return "ByteArray::writeInt16";
668 if (arguments.size() == 2 &&
669 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY &&
670 MinitScript::getIntegerValue(arguments, 1, value) ==
true) {
671 const auto byteArrayWritePtr = arguments[0].getByteArrayWritePointer();
672 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, value & 0xff);
673 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (value >> 8) & 0xff);
679 minitScript->
registerMethod(
new MethodByteArrayWriteInt16(minitScript));
688 MethodByteArrayWriteInt32(
MinitScript* minitScript):
691 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
692 { .type = MinitScript::TYPE_INTEGER, .name =
"value", .optional =
false, .reference =
false, .nullable =
false }
694 MinitScript::TYPE_NULL
696 minitScript(minitScript) {}
697 const string getMethodName()
override {
698 return "ByteArray::writeInt32";
702 if (arguments.size() == 2 &&
703 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY &&
704 MinitScript::getIntegerValue(arguments, 1, value) ==
true) {
705 const auto byteArrayWritePtr = arguments[0].getByteArrayWritePointer();
706 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, value & 0xff);
707 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (value >> 8) & 0xff);
708 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (value >> 16) & 0xff);
709 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (value >> 24) & 0xff);
715 minitScript->
registerMethod(
new MethodByteArrayWriteInt32(minitScript));
724 MethodByteArrayWriteInt64(
MinitScript* minitScript):
727 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
728 { .type = MinitScript::TYPE_INTEGER, .name =
"value", .optional =
false, .reference =
false, .nullable =
false }
730 MinitScript::TYPE_NULL
732 minitScript(minitScript) {}
733 const string getMethodName()
override {
734 return "ByteArray::writeInt64";
738 if (arguments.size() == 2 &&
739 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY &&
740 MinitScript::getIntegerValue(arguments, 1, value) ==
true) {
741 const auto byteArrayWritePtr = arguments[0].getByteArrayWritePointer();
742 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, value & 0xff);
743 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (value >> 8) & 0xff);
744 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (value >> 16) & 0xff);
745 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (value >> 24) & 0xff);
746 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (value >> 32) & 0xff);
747 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (value >> 40) & 0xff);
748 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (value >> 48) & 0xff);
749 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (value >> 56) & 0xff);
755 minitScript->
registerMethod(
new MethodByteArrayWriteInt64(minitScript));
764 MethodByteArrayWriteFloat(
MinitScript* minitScript):
767 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
768 { .type = MinitScript::TYPE_INTEGER, .name =
"value", .optional =
false, .reference =
false, .nullable =
false }
770 MinitScript::TYPE_NULL
772 minitScript(minitScript) {}
773 const string getMethodName()
override {
774 return "ByteArray::writeFloat";
778 if (arguments.size() == 2 &&
779 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY &&
780 MinitScript::getFloatValue(arguments, 1, value) ==
true) {
781 const auto byteArrayWritePtr = arguments[0].getByteArrayWritePointer();
782 uint32_t intValue = *((uint32_t*)&value);
783 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, intValue & 0xff);
784 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (intValue >> 8) & 0xff);
785 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (intValue >> 16) & 0xff);
786 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (intValue >> 24) & 0xff);
792 minitScript->
registerMethod(
new MethodByteArrayWriteFloat(minitScript));
801 MethodByteArrayWriteSmallString(
MinitScript* minitScript):
804 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
805 { .type = MinitScript::TYPE_STRING, .name =
"value", .optional =
false, .reference =
false, .nullable =
false }
807 MinitScript::TYPE_NULL
809 minitScript(minitScript) {}
810 const string getMethodName()
override {
811 return "ByteArray::writeSmallString";
815 if (arguments.size() == 2 &&
816 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY &&
817 MinitScript::getStringValue(arguments, 1, value) ==
true) {
818 if (value.size() > 255) {
819 minitScript->
complain(getMethodName(), subStatement,
"Exceeding small string size of 255 bytes: " + to_string(value.size()) +
" > 255");
821 const auto byteArrayWritePtr = arguments[0].getByteArrayWritePointer();
822 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, value.size());
823 for (
auto i = 0; i < value.size(); i++) {
824 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, value[i]);
832 minitScript->
registerMethod(
new MethodByteArrayWriteSmallString(minitScript));
841 MethodByteArrayWriteMediumString(
MinitScript* minitScript):
844 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
845 { .type = MinitScript::TYPE_STRING, .name =
"value", .optional =
false, .reference =
false, .nullable =
false }
847 MinitScript::TYPE_NULL
849 minitScript(minitScript) {}
850 const string getMethodName()
override {
851 return "ByteArray::writeMediumString";
855 if (arguments.size() == 2 &&
856 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY &&
857 MinitScript::getStringValue(arguments, 1, value) ==
true) {
858 if (value.size() > 65535) {
859 minitScript->
complain(getMethodName(), subStatement,
"Exceeding medium string size of 65535 bytes: " + to_string(value.size()) +
" > 65535");
861 const auto byteArrayWritePtr = arguments[0].getByteArrayWritePointer();
862 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, value.size() & 0xff);
863 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (value.size() >> 8) & 0xff);
864 for (
auto i = 0; i < value.size(); i++) {
865 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, value[i]);
873 minitScript->
registerMethod(
new MethodByteArrayWriteMediumString(minitScript));
882 MethodByteArrayWriteLargeString(
MinitScript* minitScript):
885 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
886 { .type = MinitScript::TYPE_STRING, .name =
"value", .optional =
false, .reference =
false, .nullable =
false }
888 MinitScript::TYPE_NULL
890 minitScript(minitScript) {}
891 const string getMethodName()
override {
892 return "ByteArray::writeLargeString";
896 if (arguments.size() == 2 &&
897 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY &&
898 MinitScript::getStringValue(arguments, 1, value) ==
true) {
899 if (value.size() > 4294967295) {
900 minitScript->
complain(getMethodName(), subStatement,
"Exceeding medium string size of 4294967295 bytes: " + to_string(value.size()) +
" > 4294967295");
902 const auto byteArrayWritePtr = arguments[0].getByteArrayWritePointer();
903 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, value.size() & 0xff);
904 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (value.size() >> 8) & 0xff);
905 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (value.size() >> 16) & 0xff);
906 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, (value.size() >> 24) & 0xff);
907 for (
auto i = 0; i < value.size(); i++) {
908 arguments[0].setByteArrayEntry((*byteArrayWritePtr)++, value[i]);
916 minitScript->
registerMethod(
new MethodByteArrayWriteLargeString(minitScript));
928 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false },
929 { .type = MinitScript::TYPE_INTEGER, .name =
"index", .optional =
false, .reference =
false, .nullable =
false },
930 { .type = MinitScript::TYPE_INTEGER, .name =
"size", .optional =
false, .reference =
false, .nullable =
false }
932 MinitScript::TYPE_NULL
934 minitScript(minitScript) {}
935 const string getMethodName()
override {
936 return "ByteArray::remove";
941 if ((arguments.size() == 3 && arguments[0].getType() == MinitScript::TYPE_BYTEARRAY) &&
942 MinitScript::getIntegerValue(arguments, 1, index) ==
true &&
943 MinitScript::getIntegerValue(arguments, 2, size) ==
true) {
944 arguments[0].removeByteArray(index, size);
950 minitScript->
registerMethod(
new MethodByteArrayRemove(minitScript));
961 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"bytearray", .optional =
false, .reference =
true, .nullable =
false }
963 MinitScript::TYPE_NULL
965 minitScript(minitScript) {}
966 const string getMethodName()
override {
967 return "ByteArray::clear";
970 if (arguments.size() == 1 && arguments[0].getType() == MinitScript::TYPE_BYTEARRAY) {
971 arguments[0].clearByteArray();
977 minitScript->
registerMethod(
new MethodByteArrayClear(minitScript));
#define MINITSCRIPT_METHODUSAGE_COMPLAIN(methodName)
MinitScript script byte array methods.
void setType(VariableType newType)
Set type.
void setValue(const Variable &variable)
Set value from given variable into variable.
void registerMethod(Method *method)
Register method.
void complain(const string &methodName, const SubStatement &subStatement)
Complain about method usage.