fab  130
API Documentation
failable.hxx
1 #ifndef _CPLRAW_FAILABLE_HXX_
2 #define _CPLRAW_FAILABLE_HXX_
3 
4 #ifndef _MM_NO_IOSTREAM
5 #include <iostream>
6 #endif
7 #include <string.h>
8 #undef E_FAIL /* windows error code */
9 
13  class Failable {
14 
15  int _iErr;
16  const char *_szErr; /* must be static */
17 
18  protected:
19 
20  enum StatE {
21  E_OK,
22  E_FAIL = 001,
23  E_BAD = 002 ,
24  E_NEXT = 004
25  } _eStat;
26 
27  Failable& setStat(StatE eStat, const char *sz, int i);
28  Failable& setStat(const Failable &fa);
29 
33  bool entry();
34 
35 
36  #ifndef _MM_NO_IOSTREAM
37  friend std::ostream &operator<<(std::ostream &, const Failable &);
38  #endif
39  public:
40  bool isGood() const { return _eStat == 0; }
41  int print(char *sz, unsigned size) const;
42  int iErr() { return _iErr; }
43  const char *szErr() { return _szErr; }
48  bool isFail() const { return (_eStat & (E_FAIL|E_BAD))!=0; }
49 
53  bool isBad() const { return (_eStat & E_BAD) != 0; }
54 
61  bool operator!() const { return isFail(); }
62 
69  operator const void * () const { return isFail() ? 0 : this ; }
70 
77  Failable &setFailed(const char*sz, int i=0) { return setStat(E_FAIL, sz, i); }
78 
82  Failable &setBad(const char*sz, int i=0) { return setStat(E_BAD, sz, i); }
83 
87  Failable &clear() { return setStat(E_OK, 0, 0); }
88 
89  Failable();
90  Failable(const char *sz, int i); /* removed default for i */
91  ~Failable();
92  };
93 
95  class Failables:public Failable {
96  int _c;
97  enum { ccFa=5 } ;
98  Failable _mpfa[ccFa];
99 
100  #ifndef _MM_NO_IOSTREAM
101  friend std::ostream &operator<<(std::ostream &, const Failables &);
102  #endif
103  public:
104 
106  Failables &set(StatE e, const char*sz, int i, const Failable *pfa);
107 
109  Failables &set(StatE e, const char*sz, int i, const Failables *pfa);
110 
111 
112  Failables &setFailed(const char*sz, int i, const Failable *pfa) { return set(E_FAIL, sz, i, pfa); }
113  Failables &setBad(const char*sz, int i, const Failable *pfa) { return set(E_BAD, sz, i, pfa); }
114 
115  Failables &setFailed(const char*sz, int i=0, const Failables *pfa=0) { return set(E_FAIL, sz, i, pfa); }
116  Failables &setBad(const char*sz, int i=0, const Failables *pfa=0) { return set(E_BAD, sz, i, pfa); }
117 
121  Failables &clear();
122 
123  Failables();
124  ~Failables();
125  };
126 
127 #endif
bool isGood() const
fine
Definition: failable.hxx:40
Failable & clear()
user clear of failed/bad state
Definition: failable.hxx:87
Failable & setFailed(const char *sz, int i=0)
set &#39;this&#39; failed, record a string and an integer for failure identification
Definition: failable.hxx:77
int iErr()
error code
Definition: failable.hxx:42
Failable & setBad(const char *sz, int i=0)
set this bad, record a string and an integer for failure identification
Definition: failable.hxx:82
bool operator!() const
true if failed
Definition: failable.hxx:61
const char * szErr()
error text
Definition: failable.hxx:43
bool isFail() const
last op failed, but object is uncorrupted
Definition: failable.hxx:48
bool isBad() const
last op failed, object is corrupted
Definition: failable.hxx:53
bool entry()
resets the failed state.
base class for something that does have a failed/good state.
Definition: failable.hxx:13
Failable with reason stack.
Definition: failable.hxx:95