@@ -29,16 +29,16 @@ public static CPlusPlusCodeGenerator Create(CPlusPlusCodeGeneratorConfig userCfg
2929
3030 public override GeneratorEncoding Encoding => GeneratorEncoding . UTF8 ;
3131
32- public override string Generate < TKey , TValue > ( GeneratorConfig < TKey > genCfg , IContext context )
32+ public override string Generate < TKey , TValue > ( GeneratorConfigBase genCfg , IContext context )
3333 {
3434 //C++ generator does not support chars outside ASCII
35- if ( typeof ( TKey ) == typeof ( char ) && ( char ) ( object ) genCfg . Constants . MaxValue > 127 )
35+ if ( genCfg is NumericGeneratorConfig < char > cfg && cfg . Constants . MaxValue > 127 )
3636 throw new InvalidOperationException ( "C++ generator does not support chars outside ASCII. Please use a different data type or reduce the max value to 127 or lower." ) ;
3737
3838 return base . Generate < TKey , TValue > ( genCfg , context ) ;
3939 }
4040
41- protected override void AppendHeader < TKey , TValue > ( StringBuilder sb , GeneratorConfig < TKey > genCfg , IContext context )
41+ protected override void AppendHeader < TKey , TValue > ( StringBuilder sb , GeneratorConfigBase genCfg , IContext context )
4242 {
4343 base . AppendHeader < TKey , TValue > ( sb , genCfg , context ) ;
4444
@@ -53,7 +53,7 @@ protected override void AppendHeader<TKey, TValue>(StringBuilder sb, GeneratorCo
5353 """ ) ;
5454 }
5555
56- protected override void AppendBody < TKey , TValue > ( StringBuilder sb , GeneratorConfig < TKey > genCfg , string keyTypeName , string valueTypeName , IContext context )
56+ protected override void AppendBody < TKey , TValue > ( StringBuilder sb , GeneratorConfigBase genCfg , string keyTypeName , string valueTypeName , IContext context )
5757 {
5858 sb . AppendLine ( $$ """
5959 class {{ _cfg . ClassName }} final {
@@ -62,13 +62,13 @@ class {{_cfg.ClassName}} final {
6262 base . AppendBody < TKey , TValue > ( sb , genCfg , keyTypeName , valueTypeName , context ) ;
6363 }
6464
65- protected override void AppendFooter < T > ( StringBuilder sb , GeneratorConfig < T > genCfg , string typeName )
65+ protected override void AppendFooter < T > ( StringBuilder sb , GeneratorConfigBase genCfg , string typeName )
6666 {
67- base . AppendFooter ( sb , genCfg , typeName ) ;
67+ base . AppendFooter < T > ( sb , genCfg , typeName ) ;
6868 sb . Append ( "};" ) ;
6969 }
7070
71- protected override OutputWriter < TKey > GetOutputWriter < TKey , TValue > ( GeneratorConfig < TKey > genCfg , IContext context ) => new TemplateBasedOutputWriter < TKey , TValue > ( context ) ;
71+ protected override OutputWriter < TKey > GetOutputWriter < TKey , TValue > ( GeneratorConfigBase genCfg , IContext context ) => new TemplateBasedOutputWriter < TKey , TValue > ( context ) ;
7272
7373 private sealed class TemplateBasedOutputWriter < TKey , TValue > ( IContext context ) : OutputWriter < TKey >
7474 {
@@ -255,13 +255,8 @@ public override string Generate()
255255
256256 private string GetCompareFunction ( string var1 , string var2 )
257257 {
258- if ( typeof ( TKey ) == typeof ( string ) )
259- {
260- if ( IgnoreCase )
261- return $ "case_insensitive_compare({ var1 } , { var2 } )";
262-
263- return $ "{ var1 } .compare({ var2 } )";
264- }
258+ if ( GeneratorConfig is StringGeneratorConfig strCfg )
259+ return strCfg . IgnoreCase ? $ "case_insensitive_compare({ var1 } , { var2 } )" : $ "{ var1 } .compare({ var2 } )";
265260
266261 return $ "{ var1 } < { var2 } ? -1 : ({ var1 } > { var2 } ? 1 : 0)";
267262 }
@@ -271,31 +266,31 @@ protected override string GetMethodHeader(MethodType methodType)
271266 StringBuilder sb = new StringBuilder ( ) ;
272267 sb . Append ( base . GetMethodHeader ( methodType ) ) ;
273268
274- if ( TotalTrimLength != 0 )
275- sb . Append ( $ " const auto { TrimmedKeyName } = { InputKeyName } .substr({ TrimPrefix . Length . ToStringInvariant ( ) } , { InputKeyName } .length() - { TotalTrimLength . ToStringInvariant ( ) } );") ;
269+ if ( GeneratorConfig is StringGeneratorConfig strCfg && strCfg . TotalTrimLength != 0 )
270+ sb . Append ( $ " const auto { TrimmedKeyName } = { InputKeyName } .substr({ strCfg . TrimPrefix . Length . ToStringInvariant ( ) } , { InputKeyName } .length() - { strCfg . TotalTrimLength . ToStringInvariant ( ) } );") ;
276271
277272 return sb . ToString ( ) ;
278273 }
279274
280- protected override string GetEqualFunctionInternal ( string value1 , string value2 , TypeCode keyType )
275+ protected override string GetEqualFunctionInternal ( string value1 , string value2 , TypeCode overrideType )
281276 {
282- if ( keyType == TypeCode . String && IgnoreCase )
277+ if ( GeneratorConfig is StringGeneratorConfig strCfg && strCfg . IgnoreCase )
283278 return $ "case_insensitive_equals({ value1 } , { value2 } )";
284279
285280 return $ "{ value1 } == { value2 } ";
286281 }
287282
288283 protected override void RegisterSharedCode ( )
289284 {
290- if ( typeof ( TKey ) != typeof ( string ) || ! IgnoreCase )
285+ if ( GeneratorConfig is not StringGeneratorConfig strCfg || ! strCfg . IgnoreCase )
291286 return ;
292287
293- string helpers = Encoding switch
288+ string helpers = strCfg . Encoding switch
294289 {
295290 GeneratorEncoding . UTF16 => GetUtf16CaseInsensitiveHelpers ( ) ,
296291 GeneratorEncoding . UTF32 => GetUtf32CaseInsensitiveHelpers ( ) ,
297292 GeneratorEncoding . UTF8 or GeneratorEncoding . ASCII => GetAsciiCaseInsensitiveHelpers ( ) ,
298- _ => throw new InvalidOperationException ( $ "Unsupported encoding: { Encoding } ")
293+ _ => throw new InvalidOperationException ( $ "Unsupported encoding: { strCfg . Encoding } ")
299294 } ;
300295
301296 Shared . Add ( CodePlacement . Before , helpers ) ;
0 commit comments