Newer
Older
snipet / project / trunk / modules / sc / src / scpp_exception.cpp
  1. /* =============================================================================
  2. * scpp_exception.cpp
  3. * Copyright (c) 2003 - 2013 Nomura Kei
  4. * =============================================================================
  5. */
  6. #include <sc_errno.h>
  7. #include <scpp_exception.hpp>
  8.  
  9. #ifndef MAXMSG
  10. #define MAXMSG (512)
  11. #endif
  12.  
  13. namespace scpp
  14. {
  15.  
  16.  
  17. ////////////////////////////////////////////////////////////////////////////////
  18. //
  19. // Throwable
  20. //
  21.  
  22. /**
  23. * 最後に発生した errno に対応するメッセージをもつ Throwable を構築します.
  24. * エラーメッセージを取得できない場合, 空文字がメッセージに設定されます.
  25. */
  26. Throwable::Throwable() NO_THROW() : message("")
  27. {
  28. char buf[MAXMSG];
  29. int errnum = getError();
  30. int ret = getErrorMessage(errnum, buf, sizeof(buf));
  31. if (ret)
  32. {
  33. this->message = buf;
  34. }
  35. }
  36.  
  37.  
  38. /**
  39. * コピーコンストラクタ.
  40. *
  41. * @param t コピー元
  42. */
  43. Throwable::Throwable(const Throwable& t) NO_THROW() : message(t.message)
  44. {
  45. // NOP
  46. }
  47.  
  48.  
  49. /**
  50. * 指定されたメッセージを持つ Throwable を構築します.
  51. *
  52. * @param msg メッセージ
  53. */
  54. Throwable::Throwable(const std::string& msg) NO_THROW() : message(msg)
  55. {
  56. // NOP
  57. }
  58.  
  59.  
  60. /**
  61. * デストラクタ.
  62. */
  63. Throwable::~Throwable() NO_THROW()
  64. {
  65. // NOP
  66. }
  67.  
  68.  
  69. /**
  70. * エラーメッセージを返します.
  71. *
  72. * @return エラーメッセージ
  73. */
  74. const char* Throwable::what() const NO_THROW()
  75. {
  76. return message.c_str();
  77. }
  78.  
  79.  
  80.  
  81. ////////////////////////////////////////////////////////////////////////////////
  82. //
  83. // Exception
  84. //
  85.  
  86. /**
  87. * 最後に発生した errno に対応するメッセージをもつ Exception を構築します.
  88. * エラーメッセージを取得できない場合, 空文字がメッセージに設定されます.
  89. */
  90. Exception::Exception() NO_THROW() : Throwable()
  91. {
  92. }
  93.  
  94.  
  95. /**
  96. * コピーコンストラクタ.
  97. *
  98. * @param t コピー元
  99. */
  100. Exception::Exception(const Exception& t) NO_THROW() : Throwable(t)
  101. {
  102. // NOP
  103. }
  104.  
  105.  
  106. /**
  107. * 指定されたメッセージを持つ Exception を構築します.
  108. *
  109. * @param msg メッセージ
  110. */
  111. Exception::Exception(const std::string& msg) NO_THROW() : Throwable(msg)
  112. {
  113. // NOP
  114. }
  115.  
  116.  
  117. /**
  118. * デストラクタ.
  119. */
  120. Exception::~Exception() NO_THROW()
  121. {
  122. // NOP
  123. }
  124.  
  125.  
  126.  
  127. ////////////////////////////////////////////////////////////////////////////////
  128. //
  129. // Error
  130. //
  131.  
  132. /**
  133. * 最後に発生した errno に対応するメッセージをもつ Exception を構築します.
  134. * エラーメッセージを取得できない場合, 空文字がメッセージに設定されます.
  135. */
  136. Error::Error() NO_THROW() : Throwable()
  137. {
  138. // NOP
  139. }
  140.  
  141.  
  142. /**
  143. * コピーコンストラクタ.
  144. *
  145. * @param t コピー元
  146. */
  147. Error::Error(const Error& t) NO_THROW() : Throwable(t)
  148. {
  149. // NOP
  150. }
  151.  
  152.  
  153. /**
  154. * 指定されたメッセージを持つ Exception を構築します.
  155. *
  156. * @param msg メッセージ
  157. */
  158. Error::Error(const std::string& msg) NO_THROW() : Throwable(msg)
  159. {
  160. // NOP
  161. }
  162.  
  163.  
  164. /**
  165. * デストラクタ.
  166. */
  167. Error::~Error() NO_THROW()
  168. {
  169. // NOP
  170. }
  171. } // namespace scpp
  172.