@@ -632,22 +632,23 @@ namespace tiny_utf8
632
632
// Layout used, if sso is active
633
633
struct SSO
634
634
{
635
- data_type data[sizeof (NON_SSO)-1 ];
636
- unsigned char data_len; // This field holds ( sizeof(SSO::data) - num_characters ) << 1
635
+ enum : size_type{ size = sizeof (NON_SSO)-1 };
636
+ data_type data[size];
637
+ unsigned char data_len; // This field holds ( size - num_characters ) << 1
637
638
638
639
SSO ( data_type value ) noexcept :
639
640
data{ value , ' \0 ' }
640
- , data_len( (unsigned char )( sizeof (SSO::data) - 1u ) << 1 )
641
+ , data_len( (unsigned char )( size - 1u ) << 1 )
641
642
{}
642
643
SSO ( size_type data_len ) noexcept :
643
644
// Note: No initialization of .data (important for the constructor of basic_utf8_string(value_type)...)
644
- data_len ( (unsigned char )( ( sizeof (SSO::data) - data_len ) << 1 ) )
645
+ data_len ( (unsigned char )( ( size - data_len ) << 1 ) )
645
646
{
646
647
data[data_len] = ' \0 ' ; // Add delimiter to actual data
647
648
}
648
649
SSO () noexcept :
649
650
data{ ' \0 ' }
650
- , data_len( (unsigned char )( sizeof (SSO::data) - 0 ) << 1 )
651
+ , data_len( (unsigned char )( size - 0 ) << 1 )
651
652
{}
652
653
};
653
654
@@ -661,13 +662,13 @@ namespace tiny_utf8
661
662
protected: // ! Static helper methods
662
663
663
664
// ! Get the maximum number of bytes (excluding the trailing '\0') that can be stored within a basic_utf8_string object
664
- static constexpr inline size_type get_sso_capacity () noexcept { return sizeof ( SSO::data) ; }
665
+ static constexpr inline size_type get_sso_capacity () noexcept { return SSO::size ; }
665
666
666
667
// ! SFINAE helpers for constructors
667
668
template <size_type L>
668
- using enable_if_small_string = typename std::enable_if<( L <= sizeof ( SSO::data) ), bool >::type;
669
+ using enable_if_small_string = typename std::enable_if<( L <= SSO::size ), bool >::type;
669
670
template <size_type L>
670
- using enable_if_not_small_string = typename std::enable_if<( L > sizeof ( SSO::data) ), bool >::type;
671
+ using enable_if_not_small_string = typename std::enable_if<( L > SSO::size ), bool >::type;
671
672
672
673
// Template to enable overloads, if the supplied type T is a character array without known bounds
673
674
template <typename T, typename CharType, typename _DataType = bool >
@@ -916,7 +917,7 @@ namespace tiny_utf8
916
917
917
918
// ! Set the data length (also enables SSO)
918
919
inline void set_sso_data_len ( unsigned char data_len = 0 ) noexcept {
919
- t_sso.data_len = (unsigned char )( sizeof ( SSO::data) - data_len ) << 1 ;
920
+ t_sso.data_len = (unsigned char )( SSO::size - data_len ) << 1 ;
920
921
}
921
922
922
923
// ! Get the data length (when SSO is active)
0 commit comments