| 40 | |
| 41 | //! level of details that will be logged to a logger |
| 42 | // DULEZITE TODO - zde musi respektovat aktualne ulozene hodnoty, tj. nacist je, pak pridat |
| 43 | // ty co se maji v tomto kroku ulozit a pak vse ulozit.. protoze to delame kompozici a ne dedenim DODELAT |
| 44 | // ALE HOUBY, TAKHLE TO NEJDE, musime nechat jako samostatny objekt, kazda uroven tedy zvlast, |
| 45 | // jednoznacne jmeno atd.. |
| 46 | // |
| 47 | //! information about connection to a logger |
| 48 | template<class T> class logged_options { |
| 49 | private: |
| 50 | friend class UI; |
| 51 | |
| 52 | //! boolean flags related indicating which details will be logged to a logger |
| 53 | bitset<32> values; |
| 54 | |
| 55 | virtual const Array<string> &names() const |
| 56 | { |
| 57 | return T::__option_names(); |
| 58 | } |
| 59 | |
| 60 | public: |
| 61 | |
| 62 | bool any() const |
| 63 | { |
| 64 | return values.any(); |
| 65 | } |
| 66 | |
| 67 | bool operator [] (const enum T::possible_options &option ) const |
| 68 | { |
| 69 | return values[option]; |
| 70 | } |
| 71 | |
| 72 | bitset<32>::reference operator [] (const enum T::possible_options &option ) |
| 73 | { |
| 74 | return values[option]; |
| 75 | } |
| 76 | }; |
| 77 | |
| 78 | // MUZEME INTERNE POUZIVAT ENUMY, A KLIDNE MENIT JEJICH PORADI, DIKY TOMUHLE MAKRU SE VZDY NAMAPUJI NA TY SPRAVNE STRINGY |
| 79 | #define LOG_LEVEL(CLASSNAME,...) private: friend class logged_options<CLASSNAME>; static const Array<string> &__option_names() { static const Array<string> option_names( "{"#__VA_ARGS__"}" ); return option_names; }; public: enum possible_options { __VA_ARGS__ }; logged_options<CLASSNAME> log_level; |
| 80 | |