@@ -284,12 +284,13 @@ static inline zend_string* extendBuffer(zend_string* buffer, size_t offset, size
284284 return buffer;
285285}
286286
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));
289290
290291 ZSTR_VAL (buffer)[offset] = *reinterpret_cast <char *>(&value);
291292
292- offset += sizeof (int8_t );
293+ offset += sizeof (TValue );
293294
294295 return buffer;
295296}
@@ -655,45 +656,52 @@ PHP_RINIT_FUNCTION(encoding)
655656/* }}} */
656657
657658#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)
660661
661662#define READ_VARINT_FENTRY (size_name, unsigned_type, signed_type ) \
662663 ZEND_RAW_FENTRY (" readUnsignedVar" size_name, (zif_readType<unsigned_type, (readUnsignedVarInt<unsigned_type>), zval_long_wrapper>), arginfo_read_integer, ZEND_ACC_PUBLIC) \
663664 ZEND_RAW_FENTRY(" readSignedVar" size_name, (zif_readType<signed_type, (readSignedVarInt<unsigned_type, signed_type>), zval_long_wrapper>), arginfo_read_integer, ZEND_ACC_PUBLIC)
664665
665666#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)
668669
669670#define WRITE_VARINT_FENTRY (size_name, unsigned_type, signed_type ) \
670671 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) \
671672 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)
672673
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+
673692static 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 )
697705
698706 PHP_ME (ByteBuffer, __construct, ByteBuffer___construct, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
699707 PHP_ME (ByteBuffer, toString, ByteBuffer_toString, ZEND_ACC_PUBLIC)
0 commit comments