@@ -179,8 +179,9 @@ struct VarIntConstants {
179
179
static const unsigned char MSB_MASK = static_cast <unsigned char >(1u << BITS_PER_BYTE);
180
180
};
181
181
182
- template <size_t TYPE_BITS, typename TValue>
182
+ template <typename TValue>
183
183
static inline bool readUnsignedVarInt (zend_string *bytes, size_t used, size_t & offset, TValue &result) {
184
+ const auto TYPE_BITS = sizeof (TValue) * CHAR_BIT;
184
185
result = 0 ;
185
186
for (unsigned int shift = 0 ; shift < TYPE_BITS; shift += VarIntConstants::BITS_PER_BYTE) {
186
187
if (offset >= used) {
@@ -199,10 +200,10 @@ static inline bool readUnsignedVarInt(zend_string *bytes, size_t used, size_t& o
199
200
return false ;
200
201
}
201
202
202
- template <size_t TYPE_BITS, typename TUnsignedValue, typename TSignedValue>
203
+ template <typename TUnsignedValue, typename TSignedValue>
203
204
static inline bool readSignedVarInt (zend_string* bytes, size_t used, size_t & offset, TSignedValue& result) {
204
205
TUnsignedValue unsignedResult;
205
- if (!readUnsignedVarInt<TYPE_BITS, TUnsignedValue>(bytes, used, offset, unsignedResult)) {
206
+ if (!readUnsignedVarInt<TUnsignedValue>(bytes, used, offset, unsignedResult)) {
206
207
return false ;
207
208
}
208
209
@@ -313,8 +314,9 @@ static zend_string* writeFixedSizeType(zend_string* buffer, size_t& offset, TVal
313
314
return buffer;
314
315
}
315
316
316
- template <size_t TYPE_BITS, typename TValue>
317
+ template <typename TValue>
317
318
static inline zend_string* writeUnsignedVarInt (zend_string* buffer, size_t & offset, TValue value) {
319
+ const auto TYPE_BITS = sizeof (TValue) * CHAR_BIT;
318
320
char result[VarIntConstants::MAX_BYTES<TYPE_BITS>];
319
321
320
322
TValue remaining = value;
@@ -343,15 +345,15 @@ static inline zend_string* writeUnsignedVarInt(zend_string* buffer, size_t& offs
343
345
return buffer;
344
346
}
345
347
346
- template <size_t TYPE_BITS, typename TUnsignedType, typename TSignedType>
348
+ template <typename TUnsignedType, typename TSignedType>
347
349
static inline zend_string* writeSignedVarInt (zend_string* buffer, size_t & offset, TSignedType value) {
348
350
TUnsignedType mask = 0 ;
349
351
if (value < 0 ) {
350
352
// we don't know the type of TUnsignedType here, can't use ~0 directly (the compiler will optimise this anyway)
351
353
mask = ~mask;
352
354
}
353
355
354
- return writeUnsignedVarInt<TYPE_BITS, TUnsignedType>(buffer, offset, (static_cast <TUnsignedType>(value) << 1 ) ^ mask);
356
+ return writeUnsignedVarInt<TUnsignedType>(buffer, offset, (static_cast <TUnsignedType>(value) << 1 ) ^ mask);
355
357
}
356
358
357
359
static zend_object* byte_buffer_new (zend_class_entry* ce) {
@@ -656,17 +658,17 @@ PHP_RINIT_FUNCTION(encoding)
656
658
ZEND_RAW_FENTRY (zend_name " LE" , (zif_readType<native_type, (readFixedSizeType<native_type, ByteOrder::LittleEndian>), result_wrapper>), arg_info, ZEND_ACC_PUBLIC) \
657
659
ZEND_RAW_FENTRY(zend_name " BE" , (zif_readType<native_type, (readFixedSizeType<native_type, ByteOrder::BigEndian>), result_wrapper>), arg_info, ZEND_ACC_PUBLIC)
658
660
659
- #define READ_VARINT_FENTRY (size, size_name, unsigned_type, signed_type ) \
660
- ZEND_RAW_FENTRY (" readUnsignedVar" size_name, (zif_readType<unsigned_type, (readUnsignedVarInt<size, unsigned_type>), zval_long_wrapper>), arginfo_read_integer, ZEND_ACC_PUBLIC) \
661
- ZEND_RAW_FENTRY(" readSignedVar" size_name, (zif_readType<signed_type, (readSignedVarInt<size, unsigned_type, signed_type>), zval_long_wrapper>), arginfo_read_integer, ZEND_ACC_PUBLIC)
661
+ #define READ_VARINT_FENTRY (size_name, unsigned_type, signed_type ) \
662
+ ZEND_RAW_FENTRY (" readUnsignedVar" size_name, (zif_readType<unsigned_type, (readUnsignedVarInt<unsigned_type>), zval_long_wrapper>), arginfo_read_integer, ZEND_ACC_PUBLIC) \
663
+ ZEND_RAW_FENTRY(" readSignedVar" size_name, (zif_readType<signed_type, (readSignedVarInt<unsigned_type, signed_type>), zval_long_wrapper>), arginfo_read_integer, ZEND_ACC_PUBLIC)
662
664
663
665
#define WRITE_FIXED_TYPE_FENTRY (zend_name, native_type, parse_parameters_wrapper, arg_info ) \
664
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) \
665
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)
666
668
667
- #define WRITE_VARINT_FENTRY (size, size_name, unsigned_type, signed_type ) \
668
- ZEND_RAW_FENTRY (" writeUnsignedVar" size_name, (zif_writeType<unsigned_type, zend_parse_parameters_long_wrapper<unsigned_type>, (writeUnsignedVarInt<size, unsigned_type>)>), arginfo_write_integer, ZEND_ACC_PUBLIC) \
669
- ZEND_RAW_FENTRY(" writeSignedVar" size_name, (zif_writeType<signed_type, zend_parse_parameters_long_wrapper<signed_type>, (writeSignedVarInt<size, unsigned_type, signed_type>)>), arginfo_write_integer, ZEND_ACC_PUBLIC)
669
+ #define WRITE_VARINT_FENTRY (size_name, unsigned_type, signed_type ) \
670
+ 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
+ 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)
670
672
671
673
static zend_function_entry byte_buffer_methods[] = {
672
674
ZEND_RAW_FENTRY (" readUnsignedByte" , (zif_readType<uint8_t , readByte<uint8_t >, zval_long_wrapper>), arginfo_read_integer, ZEND_ACC_PUBLIC)
@@ -680,8 +682,8 @@ static zend_function_entry byte_buffer_methods[] = {
680
682
READ_FIXED_TYPE_FENTRY (" readFloat" , float , zval_double_wrapper, arginfo_read_float)
681
683
READ_FIXED_TYPE_FENTRY (" readDouble" , double , zval_double_wrapper, arginfo_read_float)
682
684
683
- READ_VARINT_FENTRY (32 , " Int" , uint32_t , int32_t )
684
- READ_VARINT_FENTRY (64 , " Long" , uint64_t , int64_t )
685
+ READ_VARINT_FENTRY (" Int" , uint32_t , int32_t )
686
+ READ_VARINT_FENTRY (" Long" , uint64_t , int64_t )
685
687
686
688
ZEND_RAW_FENTRY (" writeByte" , (zif_writeType<int8_t , zend_parse_parameters_long_wrapper<int8_t >, writeByte>), arginfo_write_integer, ZEND_ACC_PUBLIC)
687
689
WRITE_FIXED_TYPE_FENTRY (" writeShort" , int16_t , zend_parse_parameters_long_wrapper, arginfo_write_integer)
@@ -690,8 +692,8 @@ static zend_function_entry byte_buffer_methods[] = {
690
692
WRITE_FIXED_TYPE_FENTRY (" writeFloat" , float , zend_parse_parameters_double_wrapper, arginfo_write_float)
691
693
WRITE_FIXED_TYPE_FENTRY (" writeDouble" , double , zend_parse_parameters_double_wrapper, arginfo_write_float)
692
694
693
- WRITE_VARINT_FENTRY (32 , " Int" , uint32_t , int32_t )
694
- WRITE_VARINT_FENTRY (64 , " Long" , uint64_t , int64_t )
695
+ WRITE_VARINT_FENTRY (" Int" , uint32_t , int32_t )
696
+ WRITE_VARINT_FENTRY (" Long" , uint64_t , int64_t )
695
697
696
698
PHP_ME (ByteBuffer, __construct, ByteBuffer___construct, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
697
699
PHP_ME (ByteBuffer, toString, ByteBuffer_toString, ZEND_ACC_PUBLIC)
0 commit comments