Advertisement
snake5

basic key/value parsing

Jun 21st, 2015
583
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. struct ConfigReader
  2. {
  3.     ConfigReader( const StringView& _it ) : it( _it.after_all( SPACE_CHARS ) ){}
  4.     bool Read( StringView& key, StringView& value )
  5.     {
  6.         while( it.size() )
  7.         {
  8.             key = it.until_any( SPACE_CHARS );
  9.             if( key.ch() == '#' )
  10.             {
  11.                 it = it.after( "\n" ).after_all( SPACE_CHARS );
  12.                 continue;
  13.             }
  14.            
  15.             it.skip( key.size() );
  16.             it.after_all( HSPACE_CHARS );
  17.            
  18.             value = it.until( "\n" );
  19.             it.skip( value.size() );
  20.             value.trim( SPACE_CHARS );
  21.            
  22.             it = it.after_all( SPACE_CHARS );
  23.            
  24.             return key.size() != 0;
  25.         }
  26.         return false;
  27.     }
  28.     StringView it;
  29. };
  30.  
  31. // usage code
  32. ConfigReader cr( text );
  33. StringView key, value;
  34. while( cr.Read( key, value ) )
  35. {
  36.     if( key == "game" )
  37.     {
  38.         if( value.size() )
  39.         {
  40.             g_GameLibName = value;
  41.             LOG << "CONFIG: Game library: " << value;
  42.         }
  43.     }
  44.     else if( key == "dir" )
  45.     {
  46.         if( value.size() )
  47.         {
  48.             g_GameDir = value;
  49.             LOG << "CONFIG: Game directory: " << value;
  50.         }
  51.     }
  52.     else if( key == "dir2" )
  53.     {
  54.         if( value.size() )
  55.         {
  56.             g_GameDir2 = value;
  57.             LOG << "CONFIG: Game directory #2: " << value;
  58.         }
  59.     }
  60.     else if( key == "renderer" )
  61.     {
  62.         if( value.size() )
  63.         {
  64.             g_RendererName = value;
  65.             LOG << "CONFIG: Renderer: " << value;
  66.         }
  67.     }
  68.     else
  69.     {
  70.         LOG_WARNING << "Unknown key (" << key << " = " << value << ")";
  71.     }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement