@@ -284,12 +284,13 @@ static inline zend_string* extendBuffer(zend_string* buffer, size_t offset, size
284
284
return buffer;
285
285
}
286
286
287
- static zend_string* writeByte (zend_string* buffer, size_t & offset, int8_t value) {
288
- buffer = extendBuffer (buffer, offset, sizeof (int8_t ));
287
+ template <typename TValue>
288
+ static zend_string* writeByte (zend_string* buffer, size_t & offset, TValue value) {
289
+ buffer = extendBuffer (buffer, offset, sizeof (TValue));
289
290
290
291
ZSTR_VAL (buffer)[offset] = *reinterpret_cast <char *>(&value);
291
292
292
- offset += sizeof (int8_t );
293
+ offset += sizeof (TValue );
293
294
294
295
return buffer;
295
296
}
@@ -655,45 +656,52 @@ PHP_RINIT_FUNCTION(encoding)
655
656
/* }}} */
656
657
657
658
#define READ_FIXED_TYPE_FENTRY (zend_name, native_type, result_wrapper, arg_info ) \
658
- ZEND_RAW_FENTRY (zend_name " LE" , (zif_readType<native_type, (readFixedSizeType<native_type, ByteOrder::LittleEndian>), result_wrapper>), arg_info, ZEND_ACC_PUBLIC) \
659
- ZEND_RAW_FENTRY(zend_name " BE" , (zif_readType<native_type, (readFixedSizeType<native_type, ByteOrder::BigEndian>), result_wrapper>), arg_info, ZEND_ACC_PUBLIC)
659
+ ZEND_RAW_FENTRY (" read " zend_name " LE" , (zif_readType<native_type, (readFixedSizeType<native_type, ByteOrder::LittleEndian>), result_wrapper>), arg_info, ZEND_ACC_PUBLIC) \
660
+ ZEND_RAW_FENTRY(" read " zend_name " BE" , (zif_readType<native_type, (readFixedSizeType<native_type, ByteOrder::BigEndian>), result_wrapper>), arg_info, ZEND_ACC_PUBLIC)
660
661
661
662
#define READ_VARINT_FENTRY (size_name, unsigned_type, signed_type ) \
662
663
ZEND_RAW_FENTRY (" readUnsignedVar" size_name, (zif_readType<unsigned_type, (readUnsignedVarInt<unsigned_type>), zval_long_wrapper>), arginfo_read_integer, ZEND_ACC_PUBLIC) \
663
664
ZEND_RAW_FENTRY(" readSignedVar" size_name, (zif_readType<signed_type, (readSignedVarInt<unsigned_type, signed_type>), zval_long_wrapper>), arginfo_read_integer, ZEND_ACC_PUBLIC)
664
665
665
666
#define WRITE_FIXED_TYPE_FENTRY (zend_name, native_type, parse_parameters_wrapper, arg_info ) \
666
- ZEND_RAW_FENTRY (zend_name " LE" , (zif_writeType<native_type, parse_parameters_wrapper<native_type>, (writeFixedSizeType<native_type, ByteOrder::LittleEndian>)>), arg_info, ZEND_ACC_PUBLIC) \
667
- ZEND_RAW_FENTRY(zend_name " BE" , (zif_writeType<native_type, parse_parameters_wrapper<native_type>, (writeFixedSizeType<native_type, ByteOrder::BigEndian>)>), arg_info, ZEND_ACC_PUBLIC)
667
+ ZEND_RAW_FENTRY (" write " zend_name " LE" , (zif_writeType<native_type, parse_parameters_wrapper<native_type>, (writeFixedSizeType<native_type, ByteOrder::LittleEndian>)>), arg_info, ZEND_ACC_PUBLIC) \
668
+ ZEND_RAW_FENTRY(" write " zend_name " BE" , (zif_writeType<native_type, parse_parameters_wrapper<native_type>, (writeFixedSizeType<native_type, ByteOrder::BigEndian>)>), arg_info, ZEND_ACC_PUBLIC)
668
669
669
670
#define WRITE_VARINT_FENTRY (size_name, unsigned_type, signed_type ) \
670
671
ZEND_RAW_FENTRY (" writeUnsignedVar" size_name, (zif_writeType<unsigned_type, zend_parse_parameters_long_wrapper<unsigned_type>, (writeUnsignedVarInt<unsigned_type>)>), arginfo_write_integer, ZEND_ACC_PUBLIC) \
671
672
ZEND_RAW_FENTRY(" writeSignedVar" size_name, (zif_writeType<signed_type, zend_parse_parameters_long_wrapper<signed_type>, (writeSignedVarInt<unsigned_type, signed_type>)>), arginfo_write_integer, ZEND_ACC_PUBLIC)
672
673
674
+ #define READ_WRITE_LONG_ENTRY (zend_name, unsigned_native, signed_native ) \
675
+ READ_FIXED_TYPE_FENTRY (" Unsigned" zend_name, unsigned_native, zval_long_wrapper, arginfo_read_integer) \
676
+ READ_FIXED_TYPE_FENTRY(" Signed" zend_name, signed_native, zval_long_wrapper, arginfo_read_integer) \
677
+ WRITE_FIXED_TYPE_FENTRY(" Unsigned" zend_name, unsigned_native, zend_parse_parameters_long_wrapper, arginfo_write_integer) \
678
+ WRITE_FIXED_TYPE_FENTRY(" Signed" zend_name, signed_native, zend_parse_parameters_long_wrapper, arginfo_write_integer)
679
+
680
+ #define READ_WRITE_FLOAT_ENTRY (zend_name, native_type ) \
681
+ READ_FIXED_TYPE_FENTRY (zend_name, native_type, zval_double_wrapper, arginfo_read_float) \
682
+ WRITE_FIXED_TYPE_FENTRY(zend_name, native_type, zend_parse_parameters_double_wrapper, arginfo_write_float)
683
+
684
+ #define READ_WRITE_VARINT_ENTRY (zend_name, unsigned_type, signed_type ) \
685
+ READ_VARINT_FENTRY (zend_name, unsigned_type, signed_type) \
686
+ WRITE_VARINT_FENTRY(zend_name, unsigned_type, signed_type)
687
+
688
+ #define READ_WRITE_BYTE_ENTRY (zend_name, native_type ) \
689
+ ZEND_RAW_FENTRY (" read" zend_name, (zif_readType<native_type, readByte<native_type>, zval_long_wrapper>), arginfo_read_integer, ZEND_ACC_PUBLIC) \
690
+ ZEND_RAW_FENTRY(" write" zend_name, (zif_writeType<native_type, zend_parse_parameters_long_wrapper<native_type>, writeByte<native_type>>), arginfo_write_integer, ZEND_ACC_PUBLIC)
691
+
673
692
static zend_function_entry byte_buffer_methods[] = {
674
- ZEND_RAW_FENTRY (" readUnsignedByte" , (zif_readType<uint8_t , readByte<uint8_t >, zval_long_wrapper>), arginfo_read_integer, ZEND_ACC_PUBLIC)
675
- ZEND_RAW_FENTRY (" readSignedByte" , (zif_readType<int8_t , readByte<int8_t >, zval_long_wrapper>), arginfo_read_integer, ZEND_ACC_PUBLIC)
676
-
677
- READ_FIXED_TYPE_FENTRY (" readUnsignedShort" , uint16_t , zval_long_wrapper, arginfo_read_integer)
678
- READ_FIXED_TYPE_FENTRY (" readSignedShort" , int16_t , zval_long_wrapper, arginfo_read_integer)
679
- READ_FIXED_TYPE_FENTRY (" readUnsignedInt" , uint32_t , zval_long_wrapper, arginfo_read_integer)
680
- READ_FIXED_TYPE_FENTRY (" readSignedInt" , int32_t , zval_long_wrapper, arginfo_read_integer)
681
- READ_FIXED_TYPE_FENTRY (" readSignedLong" , uint64_t , zval_long_wrapper, arginfo_read_integer)
682
- READ_FIXED_TYPE_FENTRY (" readFloat" , float , zval_double_wrapper, arginfo_read_float)
683
- READ_FIXED_TYPE_FENTRY (" readDouble" , double , zval_double_wrapper, arginfo_read_float)
684
-
685
- READ_VARINT_FENTRY (" Int" , uint32_t , int32_t )
686
- READ_VARINT_FENTRY (" Long" , uint64_t , int64_t )
687
-
688
- ZEND_RAW_FENTRY (" writeByte" , (zif_writeType<int8_t , zend_parse_parameters_long_wrapper<int8_t >, writeByte>), arginfo_write_integer, ZEND_ACC_PUBLIC)
689
- WRITE_FIXED_TYPE_FENTRY (" writeShort" , int16_t , zend_parse_parameters_long_wrapper, arginfo_write_integer)
690
- WRITE_FIXED_TYPE_FENTRY (" writeInt" , int32_t , zend_parse_parameters_long_wrapper, arginfo_write_integer)
691
- WRITE_FIXED_TYPE_FENTRY (" writeLong" , int64_t , zend_parse_parameters_long_wrapper, arginfo_write_integer)
692
- WRITE_FIXED_TYPE_FENTRY (" writeFloat" , float , zend_parse_parameters_double_wrapper, arginfo_write_float)
693
- WRITE_FIXED_TYPE_FENTRY (" writeDouble" , double , zend_parse_parameters_double_wrapper, arginfo_write_float)
694
-
695
- WRITE_VARINT_FENTRY (" Int" , uint32_t , int32_t )
696
- WRITE_VARINT_FENTRY (" Long" , uint64_t , int64_t )
693
+ READ_WRITE_BYTE_ENTRY (" UnsignedByte" , uint8_t )
694
+ READ_WRITE_BYTE_ENTRY (" SignedByte" , int8_t )
695
+
696
+ READ_WRITE_LONG_ENTRY (" Short" , uint16_t , int16_t )
697
+ READ_WRITE_LONG_ENTRY (" Int" , uint32_t , int32_t )
698
+ READ_WRITE_LONG_ENTRY (" Long" , uint64_t , int64_t )
699
+
700
+ READ_WRITE_FLOAT_ENTRY (" Float" , float )
701
+ READ_WRITE_FLOAT_ENTRY (" Double" , double )
702
+
703
+ READ_WRITE_VARINT_ENTRY (" Int" , uint32_t , int32_t )
704
+ READ_WRITE_VARINT_ENTRY (" Long" , uint64_t , int64_t )
697
705
698
706
PHP_ME (ByteBuffer, __construct, ByteBuffer___construct, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
699
707
PHP_ME (ByteBuffer, toString, ByteBuffer_toString, ZEND_ACC_PUBLIC)
0 commit comments