@ -106,10 +106,9 @@ std::string trim(const std::string& str) {
return std : : string ( ) ;
return std : : string ( ) ;
}
}
template < typename T >
template < typename T >
bool ParseEnum ( const std : : unordered_map < std : : string , T > & type_map ,
bool ParseEnum ( const std : : unordered_map < std : : string , T > & type_map ,
const std : : string & type , T * value ) {
const std : : string & type , T * value ) {
auto iter = type_map . find ( type ) ;
auto iter = type_map . find ( type ) ;
if ( iter ! = type_map . end ( ) ) {
if ( iter ! = type_map . end ( ) ) {
* value = iter - > second ;
* value = iter - > second ;
@ -118,8 +117,8 @@ bool ParseEnum(const std::unordered_map<std::string,T>& type_map,
return false ;
return false ;
}
}
template < typename T >
template < typename T >
bool SerializeEnum ( const std : : unordered_map < std : : string , T > & type_map ,
bool SerializeEnum ( const std : : unordered_map < std : : string , T > & type_map ,
const T & type , std : : string * value ) {
const T & type , std : : string * value ) {
for ( const auto & pair : type_map ) {
for ( const auto & pair : type_map ) {
if ( pair . second = = type ) {
if ( pair . second = = type ) {
@ -140,7 +139,7 @@ bool SerializeVectorCompressionType(const std::vector<CompressionType>& types,
}
}
std : : string string_type ;
std : : string string_type ;
result = SerializeEnum < CompressionType > ( compression_type_string_map ,
result = SerializeEnum < CompressionType > ( compression_type_string_map ,
types [ i ] , & string_type ) ;
types [ i ] , & string_type ) ;
if ( result = = false ) {
if ( result = = false ) {
return result ;
return result ;
}
}
@ -239,15 +238,15 @@ bool ParseVectorCompressionType(
CompressionType type ;
CompressionType type ;
if ( end = = std : : string : : npos ) {
if ( end = = std : : string : : npos ) {
is_ok = ParseEnum < CompressionType > ( compression_type_string_map ,
is_ok = ParseEnum < CompressionType > ( compression_type_string_map ,
value . substr ( start ) , & type ) ;
value . substr ( start ) , & type ) ;
if ( ! is_ok ) {
if ( ! is_ok ) {
return false ;
return false ;
}
}
compression_per_level - > emplace_back ( type ) ;
compression_per_level - > emplace_back ( type ) ;
break ;
break ;
} else {
} else {
is_ok = ParseEnum < CompressionType > ( compression_type_string_map ,
is_ok = ParseEnum < CompressionType > (
value . substr ( start , end - start ) , & type ) ;
compression_type_string_map , value . substr ( start , end - start ) , & type ) ;
if ( ! is_ok ) {
if ( ! is_ok ) {
return false ;
return false ;
}
}
@ -336,11 +335,13 @@ bool ParseOptionHelper(char* opt_address, const OptionType& opt_type,
* reinterpret_cast < double * > ( opt_address ) = ParseDouble ( value ) ;
* reinterpret_cast < double * > ( opt_address ) = ParseDouble ( value ) ;
break ;
break ;
case OptionType : : kCompactionStyle :
case OptionType : : kCompactionStyle :
return ParseEnum < CompactionStyle > ( compaction_style_string_map ,
return ParseEnum < CompactionStyle > (
value , reinterpret_cast < CompactionStyle * > ( opt_address ) ) ;
compaction_style_string_map , value ,
reinterpret_cast < CompactionStyle * > ( opt_address ) ) ;
case OptionType : : kCompressionType :
case OptionType : : kCompressionType :
return ParseEnum < CompressionType > ( compression_type_string_map ,
return ParseEnum < CompressionType > (
value , reinterpret_cast < CompressionType * > ( opt_address ) ) ;
compression_type_string_map , value ,
reinterpret_cast < CompressionType * > ( opt_address ) ) ;
case OptionType : : kVectorCompressionType :
case OptionType : : kVectorCompressionType :
return ParseVectorCompressionType (
return ParseVectorCompressionType (
value , reinterpret_cast < std : : vector < CompressionType > * > ( opt_address ) ) ;
value , reinterpret_cast < std : : vector < CompressionType > * > ( opt_address ) ) ;
@ -349,15 +350,17 @@ bool ParseOptionHelper(char* opt_address, const OptionType& opt_type,
value , reinterpret_cast < std : : shared_ptr < const SliceTransform > * > (
value , reinterpret_cast < std : : shared_ptr < const SliceTransform > * > (
opt_address ) ) ;
opt_address ) ) ;
case OptionType : : kChecksumType :
case OptionType : : kChecksumType :
return ParseEnum < ChecksumType > ( checksum_type_string_map , value ,
return ParseEnum < ChecksumType > (
reinterpret_cast < ChecksumType * > ( opt_address ) ) ;
checksum_type_string_map , value ,
reinterpret_cast < ChecksumType * > ( opt_address ) ) ;
case OptionType : : kBlockBasedTableIndexType :
case OptionType : : kBlockBasedTableIndexType :
return ParseEnum < BlockBasedTableOptions : : IndexType > (
return ParseEnum < BlockBasedTableOptions : : IndexType > (
block_base_table_index_type_string_map , value ,
block_base_table_index_type_string_map , value ,
reinterpret_cast < BlockBasedTableOptions : : IndexType * > ( opt_address ) ) ;
reinterpret_cast < BlockBasedTableOptions : : IndexType * > ( opt_address ) ) ;
case OptionType : : kEncodingType :
case OptionType : : kEncodingType :
return ParseEnum < EncodingType > ( encoding_type_string_map , value ,
return ParseEnum < EncodingType > (
reinterpret_cast < EncodingType * > ( opt_address ) ) ;
encoding_type_string_map , value ,
reinterpret_cast < EncodingType * > ( opt_address ) ) ;
default :
default :
return false ;
return false ;
}
}
@ -398,10 +401,12 @@ bool SerializeSingleOptionHelper(const char* opt_address,
* ( reinterpret_cast < const std : : string * > ( opt_address ) ) ) ;
* ( reinterpret_cast < const std : : string * > ( opt_address ) ) ) ;
break ;
break ;
case OptionType : : kCompactionStyle :
case OptionType : : kCompactionStyle :
return SerializeEnum < CompactionStyle > ( compaction_style_string_map ,
return SerializeEnum < CompactionStyle > (
compaction_style_string_map ,
* ( reinterpret_cast < const CompactionStyle * > ( opt_address ) ) , value ) ;
* ( reinterpret_cast < const CompactionStyle * > ( opt_address ) ) , value ) ;
case OptionType : : kCompressionType :
case OptionType : : kCompressionType :
return SerializeEnum < CompressionType > ( compression_type_string_map ,
return SerializeEnum < CompressionType > (
compression_type_string_map ,
* ( reinterpret_cast < const CompressionType * > ( opt_address ) ) , value ) ;
* ( reinterpret_cast < const CompressionType * > ( opt_address ) ) , value ) ;
case OptionType : : kVectorCompressionType :
case OptionType : : kVectorCompressionType :
return SerializeVectorCompressionType (
return SerializeVectorCompressionType (
@ -473,7 +478,8 @@ bool SerializeSingleOptionHelper(const char* opt_address,
break ;
break ;
}
}
case OptionType : : kChecksumType :
case OptionType : : kChecksumType :
return SerializeEnum < ChecksumType > ( checksum_type_string_map ,
return SerializeEnum < ChecksumType > (
checksum_type_string_map ,
* reinterpret_cast < const ChecksumType * > ( opt_address ) , value ) ;
* reinterpret_cast < const ChecksumType * > ( opt_address ) , value ) ;
case OptionType : : kBlockBasedTableIndexType :
case OptionType : : kBlockBasedTableIndexType :
return SerializeEnum < BlockBasedTableOptions : : IndexType > (
return SerializeEnum < BlockBasedTableOptions : : IndexType > (
@ -489,7 +495,8 @@ bool SerializeSingleOptionHelper(const char* opt_address,
break ;
break ;
}
}
case OptionType : : kEncodingType :
case OptionType : : kEncodingType :
return SerializeEnum < EncodingType > ( encoding_type_string_map ,
return SerializeEnum < EncodingType > (
encoding_type_string_map ,
* reinterpret_cast < const EncodingType * > ( opt_address ) , value ) ;
* reinterpret_cast < const EncodingType * > ( opt_address ) , value ) ;
default :
default :
return false ;
return false ;
@ -936,8 +943,8 @@ Status GetStringFromTableFactory(std::string* opts_str, const TableFactory* tf,
const auto * bbtf = dynamic_cast < const BlockBasedTableFactory * > ( tf ) ;
const auto * bbtf = dynamic_cast < const BlockBasedTableFactory * > ( tf ) ;
opts_str - > clear ( ) ;
opts_str - > clear ( ) ;
if ( bbtf ! = nullptr ) {
if ( bbtf ! = nullptr ) {
return GetStringFromBlockBasedTableOptions (
return GetStringFromBlockBasedTableOptions ( opts_str , bbtf - > table_options ( ) ,
opts_str , bbtf - > table_options ( ) , delimiter ) ;
delimiter ) ;
}
}
return Status : : OK ( ) ;
return Status : : OK ( ) ;