| 974 | #ifndef BDMLIB |
| 975 | // MUZEME INTERNE POUZIVAT ENUMY, A KLIDNE MENIT JEJICH PORADI, DIKY TOMUHLE MAKRU SE VZDY NAMAPUJI NA TY SPRAVNE STRINGY |
| 976 | #define DEFINED_OPTIONS(...) enum defined_options { __VA_ARGS__ }; const Array<string> logged_options::names( "{"#__VA_ARGS__"}" ) |
| 977 | // TODO: ROZPARESUJE TO KONSTRUKTOR ARRAYE NA JEDNOTLIVE STRINGY?? NUTNO OTESTOVAT!! |
| 978 | #else |
| 979 | #define DEFINED_OPTIONS(...) enum defined_options { __VA_ARGS__ }; |
| 980 | #endif |
| 981 | |
| 982 | enum defined_options; |
| 983 | |
| 984 | class logged_options : public root |
| 985 | // TODO: HA, TADY TO MAME!! POKUD ZDE CHCEME TEZ UZIVAT FROMSETTING A TOSETTING, NEMUZOU BYT LOGOVACI |
| 986 | // VECI PRIMO V ROOTU.. RESENIM BUDE ZREJME KOMPOZICE - FUNKCNOST SOUVISEJICI S LOGGERAMA UMISTENA V ROOTU |
| 987 | // PREJDE DO TETO TRIDY, A KDO BUDE MIT ZAJEM O NAPOJENI NA LOGGERY MUSI OBSAHOVAT LOGGED_OPTIONS INSTANCI... |
| 988 | // TZN. TRIDU LOGGED OPTIONS BUDE JESTE TREBA LEHCE ROZSIRIT.. |
| 989 | // KOMPOZICE TAKY UMOZNI NEKOLIK RUZNYCH LOGGERU PRO JEDEN OBJEKT.. PROSTE BUDE OBSHOVAT NEKOLIK RUZNYCH |
| 990 | // LOGGED_OPTIONS INSTANCI NAPOJENYCH NA RUZNE LOGGERY.. HMM, ALE TO JE TREBA JESTE DOMYSLET.) |
| 991 | { |
| 992 | private: |
| 993 | bitset<32> values; |
| 994 | |
| 995 | static const Array<string> names; |
| 996 | |
| 997 | public: |
| 998 | |
| 999 | bool operator [] (const defined_options &option ) |
| 1000 | { |
| 1001 | return values[option]; |
| 1002 | } |
| 1003 | |
| 1004 | void from_setting ( const Setting &set ) |
| 1005 | { |
| 1006 | values.reset(); |
| 1007 | Array<string> true_options; |
| 1008 | UI::get( true_options, set ); |
| 1009 | for( int i = 0; i < true_options.length(); i++ ) |
| 1010 | for( int j = 0; j < names.length(); j++ ) |
| 1011 | if( true_options(i) == names(j) ) |
| 1012 | { |
| 1013 | values[j] = true; |
| 1014 | break; |
| 1015 | } // TODO kdyz ho to vubec nenajde, nic se nedeje.. coz radeji vyhodit UI vyjimku??! |
| 1016 | } |
| 1017 | |
| 1018 | void to_setting( Setting &set ) const |
| 1019 | { |
| 1020 | Array<string> true_options( values.count() ); |
| 1021 | int true_options_count = 0; |
| 1022 | for( unsigned int i = 0; i < values.size(); i++ ) |
| 1023 | if( values[i] ) |
| 1024 | true_options( true_options_count++ ) = names(i); |
| 1025 | UI::save( true_options, set ); |
| 1026 | } |
| 1027 | }; |
| 1028 | UIREGISTER(logged_options); |
| 1029 | DEFINED_OPTIONS(bounds,likelyhood,full); |
| 1030 | |
| 1031 | |
1125 | | |
1126 | | string opt; |
1127 | | switch( posterior()._log_level() ) |
1128 | | { |
1129 | | case 2: |
1130 | | opt = "logbounds "; |
1131 | | break; |
1132 | | case 10: |
1133 | | opt = "logfull "; |
1134 | | break; |
1135 | | default: |
1136 | | opt = ""; |
1137 | | break; |
| 1185 | UI::save( &posterior()._rv(), set, "rv" ); |
| 1186 | UI::save( &logged, set, "logged" ); |
| 1187 | } |
| 1188 | |
| 1189 | virtual void set_options ( const string & ); |
| 1190 | |
| 1191 | // TODO JEN JAKO UKAZKA POUZIT LOGGED[..], NAKONEC ODSTRANIT CELOU METODU, A TAKY JEJI ORIGINAL VYSE |
| 1192 | // jen co zavedeme logged_options i do dalsich objektu, pak se vse muze nastavovat primo |
| 1193 | // ve from_settingu, bude to tak ok? |
| 1194 | // nejlepsi by bylo, kdyby se options posterioru() nastavovaly v jeho from_settingu, |
| 1195 | // aby nevznikala takovahle kaskada zavislosti.. pujde to? domyslet |
| 1196 | virtual void SHOWING_ROOM( const string & ) |
| 1197 | { |
| 1198 | if ( logged[full] ) { |
| 1199 | const_cast<epdf&> ( posterior() ).set_log_level ( 10 ) ; |
| 1200 | } else { |
| 1201 | if ( logged[bounds] ) { |
| 1202 | const_cast<epdf&> ( posterior() ).set_log_level ( 2 ) ; |
| 1203 | } else { |
| 1204 | const_cast<epdf&> ( posterior() ).set_log_level ( 1 ) ; |
| 1205 | } |
| 1206 | if ( logged[likelyhood] ) { |
| 1207 | log_level = 1; |
| 1208 | } |