@@ -62,7 +62,8 @@ internal class NameService : INameService {
6262
6363 readonly HashSet < string > identifiers = new HashSet < string > ( ) ;
6464
65- readonly byte [ ] nameId = new byte [ 8 ] ;
65+ long _nameId ;
66+ readonly StringBuilder _nameBuilder = new StringBuilder ( ) ;
6667 readonly Dictionary < string , string > _originalToObfuscatedNameMap = new Dictionary < string , string > ( ) ;
6768 readonly Dictionary < string , string > _obfuscatedToOriginalNameMap = new Dictionary < string , string > ( ) ;
6869 readonly Dictionary < string , string > _prefixesMap = new Dictionary < string , string > ( ) ;
@@ -166,14 +167,6 @@ public void Analyze(IDnlibDef def) {
166167 analyze . Analyze ( this , context , ProtectionParameters . Empty , def , true ) ;
167168 }
168169
169- void IncrementNameId ( ) {
170- for ( int i = nameId . Length - 1 ; i >= 0 ; i -- ) {
171- nameId [ i ] ++ ;
172- if ( nameId [ i ] != 0 )
173- break ;
174- }
175- }
176-
177170 string ObfuscateNameInternal ( byte [ ] hash , RenameMode mode ) {
178171 switch ( mode ) {
179172 case RenameMode . Empty :
@@ -187,11 +180,9 @@ string ObfuscateNameInternal(byte[] hash, RenameMode mode) {
187180 case RenameMode . Reflection :
188181 return Utils . EncodeString ( hash , reflectionCharset ) ;
189182 case RenameMode . Decodable :
190- IncrementNameId ( ) ;
191183 return "_" + Utils . EncodeString ( hash , alphaNumCharset ) ;
192184 case RenameMode . Sequential :
193- IncrementNameId ( ) ;
194- return "_" + Utils . EncodeString ( nameId , alphaNumCharset ) ;
185+ return "_" + GetNextSequentialName ( ) ;
195186 default :
196187 throw new NotSupportedException ( "Rename mode '" + mode + "' is not supported." ) ;
197188 }
@@ -444,15 +435,24 @@ DisplayNormalizedName CompressTypeName(string typeName, RenameMode renameMode)
444435 {
445436 if ( ! _prefixesMap . TryGetValue ( typeName , out string prefix ) )
446437 {
447- IncrementNameId ( ) ;
448- prefix = Utils . EncodeString ( nameId , alphaNumCharset ) ;
449- _prefixesMap . Add ( typeName , prefix ) ;
438+ _prefixesMap . Add ( typeName , GetNextSequentialName ( ) ) ;
450439 }
451440
452441 return new DisplayNormalizedName ( typeName , prefix ) ;
453442 }
454443
455444 return new DisplayNormalizedName ( typeName , typeName ) ;
456445 }
446+
447+ string GetNextSequentialName ( ) {
448+ var number = _nameId ++ ;
449+ var bigLength = ( long ) alphaNumCharset . Length ;
450+ _nameBuilder . Clear ( ) ;
451+ do {
452+ number = Math . DivRem ( number , bigLength , out var remainder ) ;
453+ _nameBuilder . Append ( alphaNumCharset [ remainder ] ) ;
454+ } while ( number != 0 ) ;
455+ return _nameBuilder . ToString ( ) ;
456+ }
457457 }
458458}
0 commit comments