XdmfError.cpp 1.93 KB
Newer Older
1
#include <XdmfError.hpp>
2
#include <cstdlib>
3
#include <iostream>
4

5 6 7 8 9
XdmfError::XdmfError(Level level, std::string message) :
  mLevel(level),
  mMessage(message)
{
}
10

11 12 13
XdmfError::~XdmfError() throw()
{
}
14

15 16 17
/************************
 *** Public Functions ***
 ************************/
18 19

XdmfError::Level
20
XdmfError::getLevel() const
21
{
22
  return XdmfError::mLevel;
23
}
24

25 26 27
void
XdmfError::setLevel(Level l)
{
28
  XdmfError::mLevel = l;
29 30
}

31 32
const char *
XdmfError::what() const throw()
33
{
34
  return XdmfError::mMessage.c_str();
35 36 37 38 39 40 41 42 43
}

/*******************************
 *** Public Static Functions ***
 *******************************/

XdmfError::Level
XdmfError::getLevelLimit()
{
44
  return XdmfError::mLevelLimit;
45 46
}

47 48 49 50 51 52
XdmfError::Level
XdmfError::getSuppressionLevel()
{
  return XdmfError::mSuppressLevel;
}

53
void
54
XdmfError::setLevelLimit(Level l)
55
{
56
  XdmfError::mLevelLimit = l;
57 58
}

59 60 61 62 63 64
void
XdmfError::setSuppressionLevel(Level l)
{
  XdmfError::mSuppressLevel = l;
}

65 66
void
XdmfError::message(Level level, std::string msg)
67
{
68
  if (level<=XdmfError::getSuppressionLevel())
69
  {
70
    XdmfError::WriteToStream(msg);
71 72
  }
  if(level<=XdmfError::getLevelLimit()) {
73
    throw XdmfError(level, msg);
74
  }
75 76
}

77 78
void
XdmfError::setBuffer(std::streambuf* buf)
79
{
80
  XdmfError::mBuf = buf;
81 82 83 84 85 86
}

/********************************
 *** Private Static Functions ***
 ********************************/

87 88
// automatically writes the message to the provided buffer
// by default this is basically a print statement
89 90 91
void
XdmfError::WriteToStream(std::string msg)
{
92 93 94 95
  if(msg[msg.length()-1] != '\n') {
    // using \r\n for windows compatiblity
    msg+="\r\n";
  }
96
  XdmfError::mBuf->sputn(msg.c_str(),msg.length());
97 98 99 100 101 102
}

/******************************************
 *** Initialize Static Member Variables ***
 ******************************************/

103
XdmfError::Level XdmfError::mLevelLimit = XdmfError::FATAL;
104
XdmfError::Level XdmfError::mSuppressLevel = XdmfError::WARNING;
105
std::streambuf* XdmfError::mBuf=std::cout.rdbuf();