Show
Ignore:
Timestamp:
03/18/10 19:13:02 (14 years ago)
Author:
mido
Message:

LOG_LEVEL final cut (or rather semifinal? I hope to improve work with ids soon)
and also it rests to adapt applications, work is in progress

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • library/bdm/base/user_info.h

    r863 r870  
    305305        static void from_setting ( double &real, const Setting &element ); 
    306306 
    307         //! This method converts a Setting into a specific logged_options<T> variant and initialize options properly 
    308         template< class T> static void from_setting ( logged_options<T> &options, const Setting &element ) 
     307        //! This method converts a Setting into a specific log_level_template<T> variant and initialize options properly 
     308        template< class T> static void from_setting ( log_level_template<T> &log_level, const Setting &element ) 
    309309        { 
    310                 options.values.reset(); 
    311                 Array<string> true_options; 
    312                 UI::get( true_options, element ); 
    313                 for( int i = 0; i < true_options.length(); i++ ) 
    314                         for( int j = 0; j < options.names().length(); j++ ){ 
    315                                 if( true_options(i) == options.names()(j)  )  
     310                string raw_log_level; 
     311                UI::get( raw_log_level, element ); 
     312                Array<string> loaded_log_level = log_level_template<T>::string2Array( raw_log_level ); 
     313                 
     314                log_level.values.reset(); 
     315 
     316                for( int i = 0; i < loaded_log_level.length(); i++ ) 
     317                        for( int j = 0; j < log_level.names().length(); j++ ){ 
     318                                if( loaded_log_level(i) == log_level.names()(j)  )  
    316319                                { 
    317                                         options.values[j] = true; 
     320                                        log_level.values[j] = true; 
    318321                                        break; 
    319322                                }  
     
    324327        template<class T> static void from_setting ( T* &instance, const Setting &element ) { 
    325328                const SettingResolver link ( element ); 
    326                 assert_type ( link.result, Setting::TypeGroup ); 
     329                assert_type( link.result, Setting::TypeGroup ); 
    327330 
    328331                // we get a value stored in the "class" attribute 
     
    600603        } 
    601604 
    602         // The only difference from classical UserInfo approach to logged_options is the fact 
    603         // that the actual element related to logged_options could possibly exists yet. In this case,  
     605        // The only difference from classical UserInfo approach to log_level_template is the fact 
     606        // that the actual UI element related to log_level_template could possibly exists yet. In this case,  
    604607        // we do not want to throw an exception like in the case of any other type being loaded 
    605         // from Setting. Here, we rather add our options into this existig element. This way, it is  
    606         // possible that more instances of logged_options class (all contained in one wrapping instance of 
    607         // a particular class!) can be stored in only one line in a configuration file 
    608         template< class T> static void save ( const logged_options<T> &options, Setting &element, const string &name = "options"  ) { 
     608        // from Setting. We rather fill the current log_level into this existig element. This way, it is  
     609        // possible that more instances of log_level_template class (templated with different classes) 
     610        // can be stored in only one line in a configuration file 
     611        template< class T> static void save ( const log_level_template<T> &log_level, Setting &element, const string &name = "log_level"  ) { 
    609612                assert_type ( element, Setting::TypeGroup ); 
     613 
     614                string string_to_write; 
    610615 
    611616                Setting *list; 
     
    613618                { 
    614619                        list = &element[name]; 
    615                         assert_type ( *list, Setting::TypeList ); 
     620                        assert_type ( *list, Setting::TypeString ); 
     621                        string_to_write = ( const char* ) *list; 
    616622                } 
    617623                else 
    618                         list = &element.add ( name, Setting::TypeList );  
    619  
    620                 Array<string> true_options; 
    621                 int true_options_count = 0; 
    622                 true_options.set_length( options.values.size() ); 
    623                 for( unsigned int i = 0; i < options.values.size(); i++ ) 
    624                         if( options.values[i] )  
    625                                 true_options( true_options_count++ ) = options.names()(i); 
    626                 save( true_options, *list, name ); 
     624                        list = &element.add ( name, Setting::TypeString );  
     625 
     626                for( unsigned int i = 0; i < log_level.values.size(); i++ ) 
     627                        if( log_level.values[i] ) // a jeste zkontrolovat zda to jmeno uz neni obsazeno?  
     628                        { 
     629                                if( string_to_write.length() > 0 ) 
     630                                        string_to_write = string_to_write + ','; 
     631                                string_to_write = string_to_write + log_level.names()(i); 
     632                        } 
     633                         
     634                *list = string_to_write; 
    627635        } 
    628636