/* Web Polygraph http://www.web-polygraph.org/
* (C) 2003-2006 The Measurement Factory
* Licensed under the Apache License, Version 2.0 */
#ifndef POLYGRAPH__XSTD_ERROR_H
#define POLYGRAPH__XSTD_ERROR_H
#include "xstd/h/iosfwd.h"
#include "xstd/h/errno.h"
class String;
// errno wrapper
class Error {
public:
static const Error None() { return Error(); }
static const Error Last();
static const Error Last(const Error &err);
static const Error LastExcept(const Error &err);
static const Error Add(const char *str); // creates custom error
protected:
static const int TheCustomOff;
public:
Error(int aNo = 0): theNo(aNo) {}
operator void*() const { return no() ? (void*)-1 : (void*)0; }
bool operator ==(const Error &e) const { return theNo == e.theNo; }
bool operator !=(const Error &e) const { return !(e == *this); }
bool custom() const;
int no() const { return theNo; }
// use immediately; may return a pointer to shared memory
const char *str() const;
ostream &print(ostream &os) const { return print(os, str()); }
protected:
ostream &print(ostream &os, const char *str) const;
protected:
int theNo;
};
inline
ostream &operator <<(ostream &os, const Error &err) {
return err.print(os);
}
#endif
syntax highlighted by Code2HTML, v. 0.9.1