Browse Source

fix issue with 0 in trie adresses

Kolja Strohm 2 years ago
parent
commit
4fe1b9c42c
1 changed files with 14 additions and 14 deletions
  1. 14 14
      Trie.h

+ 14 - 14
Trie.h

@@ -91,7 +91,7 @@ namespace Framework
                     {
                         if( i < 256 )
                         {
-                            for( unsigned char j = (unsigned char)( i + 1 ); true; j++ )
+                            for( unsigned char j = (unsigned char)(i + 1); true; j++ )
                             {
                                 if( d.parent->map->z( j ) )
                                     return TrieIterator( TrieIteratorData<T>( d.parent->map->z( j )->map, *d.parent ) );
@@ -127,7 +127,7 @@ namespace Framework
             return data.map != 0;
         }
 
-        operator T *( )
+        operator T *()
         {
             return data.map->zValue();
         }
@@ -162,51 +162,51 @@ namespace Framework
             map->release();
         }
 
-        void set( const char *addr, T *value )
+        void set( const char *addr, int addrLen, T *value )
         {
-            if( !*addr )
+            if( !addrLen )
                 map->setValue( value );
             else
             {
                 if( !map->z( *addr ) )
                     map->set( *addr, new Trie< T >() );
-                map->z( *addr )->set( addr + 1, value );
+                map->z( *addr )->set( addr + 1, addrLen - 1, value );
             }
         }
 
-        void remove( const char *addr )
+        void remove( const char *addr, int addrLen )
         {
-            if( !*addr )
+            if( !addrLen )
                 map->setValue( 0 );
             else
             {
                 if( !map->z( *addr ) )
                     return;
-                map->z( *addr )->remove( addr + 1 );
+                map->z( *addr )->remove( addr + 1, addrLen - 1 );
             }
         }
 
-        T *get( const char *addr )
+        T *get( const char *addr, int addrLen )
         {
-            if( !*addr )
+            if( !addrLen )
                 return map->getValue();
             else
             {
                 if( !map->z( *addr ) )
                     return 0;
-                return map->z( *addr )->get( addr + 1 );
+                return map->z( *addr )->get( addr + 1, addrLen - 1 );
             }
         }
 
-        T *z( const char *addr )
+        T *z( const char *addr, int addrLen )
         {
-            if( !*addr )
+            if( !addrLen )
                 return map->zValue();
             else
             {
                 if( !map->z( *addr ) )
                     return 0;
-                return map->z( *addr )->z( addr + 1 );
+                return map->z( *addr )->z( addr + 1, addrLen - 1 );
             }
         }