Ignore:
Timestamp:
03/12/15 04:19:45 (10 years ago)
Author:
Maciej Komosinski
Message:

Error message formatting: - "[x] x::x - " -> "[x] x.x: "
Error managers support configurable multi-line "call stack" messages

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/errmgr/errmanager.h

    r286 r336  
    1515class ErrorManager
    1616{
    17 friend class ErrorHandlerBase;
    18 SListTempl<ErrorHandlerBase*> handlers;
    19 void send(int level,const char *o,const char *m,const char *bl,int w);
    20   public:
    21 int find(ErrorHandlerBase *r) {return handlers.find(r);}
    22 int add(ErrorHandlerBase *r);
    23 void remove(int i);
    24 void remove(ErrorHandlerBase *r);
    25 void removeAll();
    26 void send(const char *o,const char *m,const char *bl,int w)
    27         {send(handlers.size()-1,o,m,bl,w);}
    28 ~ErrorManager() {removeAll();}
     17        friend class ErrorHandlerBase;
     18        SListTempl<ErrorHandlerBase*> handlers;
     19        void send(int level, const char *o, const char *m, const char *bl, int w);
     20public:
     21        int find(ErrorHandlerBase *r) { return handlers.find(r); }
     22        int add(ErrorHandlerBase *r);
     23        void remove(int i);
     24        void remove(ErrorHandlerBase *r);
     25        void removeAll();
     26        void send(const char *o, const char *m, const char *bl, int w)
     27        {
     28                send(handlers.size() - 1, o, m, bl, w);
     29        }
     30        ~ErrorManager() { removeAll(); }
    2931};
    3032
    31 extern THREAD_LOCAL_DECL(ErrorManager,errmgr_instance);
     33extern THREAD_LOCAL_DECL(ErrorManager, errmgr_instance);
    3234
    3335////////////////////////////////////////
     
    3537class ErrorHandlerBase
    3638{
    37 friend class ErrorManager;
    38   protected:
    39 ErrorManager* mgr;
    40 int options;
     39        friend class ErrorManager;
     40protected:
     41        ErrorManager* mgr;
     42        int options;
    4143
    42   public:
     44public:
    4345
    44 enum HandlerOptions
    45  { DontBlock=1, CannotBeBlocked=2, DontEnable=4 };
     46        enum HandlerOptions
     47        {
     48                DontBlock = 1, CannotBeBlocked = 2, DontEnable = 4, Paused = 8
     49        };
    4650
    47 void FMprintf(const char *o,const char *m,int w,const char *bl, ...);
    48 void send(const char *o,const char *m,const char *bl,int w);
     51        void FMprintf(const char *o, const char *m, int w, const char *bl, ...);
     52        void send(const char *o, const char *m, const char *bl, int w);
    4953
    50 bool isEnabled() {return mgr?1:0;}
    51 void enable();
    52 void disable();
     54        bool isEnabled() { return mgr ? 1 : 0; }
     55        void enable();
     56        void disable();
     57        bool isPaused() { return (options & Paused) != 0; }
     58        void pause();
     59        void resume();
    5360
    54 ErrorHandlerBase(int opts=0):mgr(0),options(opts)
    55         {if (!(options&DontEnable)) enable();}
    56 virtual ~ErrorHandlerBase()
    57         {disable();}
     61        ErrorHandlerBase(int opts = 0) :mgr(0), options(opts)
     62        {
     63                if (!(options&DontEnable)) enable();
     64        }
     65        virtual ~ErrorHandlerBase()
     66        {
     67                disable();
     68        }
    5869
    59 virtual void handle(const char *o,const char *m,const char *bl,int w) {}
     70        virtual void handle(const char *o, const char *m, const char *bl, int w) {}
    6071};
    6172
    6273///////////////////////////////////////////
    6374
    64 class ErrorHandler: public ErrorHandlerBase
     75class ErrorHandler : public ErrorHandlerBase
    6576{
    66   protected:
    67 int maxlevel,errcount,warncount,storlevel,storcount,infocount;
    68 SString msgs;
     77protected:
     78        int maxlevel, errcount, warncount, storlevel, storcount, infocount;
     79        SString msgs;
    6980
    70   public:
     81public:
    7182
    72 void reset() {maxlevel=FMLV_INFO-1; errcount=warncount=storcount=infocount=0; msgs=0;}
     83        void reset() { maxlevel = FMLV_INFO - 1; errcount = warncount = storcount = infocount = 0; msgs = 0; }
    7384
    74 enum Options2
    75  { StoreFirstMessage=8, StoreAllMessages=16 };
     85        enum Options2
     86        {
     87                StoreFirstMessage = 16, StoreAllMessages = 32
     88        };
    7689
    77 int getErrorCount()       {return errcount;}
    78 int getWarningCount()     {return warncount;}
    79 int getInfoCount()        {return infocount;}
    80 int getStoredCount()      {return storcount;}
    81 int getErrorLevel()       {return maxlevel;}
    82 const SString& getMessages() {return msgs;}
     90        int getErrorCount()       { return errcount; }
     91        int getWarningCount()     { return warncount; }
     92        int getInfoCount()        { return infocount; }
     93        int getStoredCount()      { return storcount; }
     94        int getErrorLevel()       { return maxlevel; }
     95        const SString& getMessages() { return msgs; }
    8396
    84 ErrorHandler(int opts=0,int store=FMLV_ERROR):ErrorHandlerBase(opts),storlevel(store)
    85         {reset();}
     97        ErrorHandler(int opts = 0, int store = FMLV_ERROR) :ErrorHandlerBase(opts), storlevel(store)
     98        {
     99                reset();
     100        }
    86101
    87 void handle(const char *o,const char *m,const char *bl,int w);
     102        void handle(const char *o, const char *m, const char *bl, int w);
    88103};
    89104
    90 class ErrorRedirector: public ErrorHandlerBase
     105class ErrorRedirector : public ErrorHandlerBase
    91106{
    92107        ErrorManager *other_mgr;
    93108public:
    94109        ErrorRedirector(ErrorManager *om)
    95                 :ErrorHandlerBase(),other_mgr(om) {}
     110                :ErrorHandlerBase(), other_mgr(om) {}
    96111
    97         void handle(const char *o,const char *m,const char *bl,int w)
    98                 {
    99                 other_mgr->send(o,m,bl,w);
    100                 }
     112        void handle(const char *o, const char *m, const char *bl, int w)
     113        {
     114                other_mgr->send(o, m, bl, w);
     115        }
    101116};
    102117
    103118#endif
    104 
Note: See TracChangeset for help on using the changeset viewer.