xref: /haiku/headers/private/storage/Exception.h (revision 09d84e61b6c2629d253dce1e7d7e944943d3e40e)
152a38012Sejakowatz // Exception
252a38012Sejakowatz 
382b75665STyler Dauwalder #ifndef _EXCEPTION_H
482b75665STyler Dauwalder #define _EXCEPTION_H
552a38012Sejakowatz 
652a38012Sejakowatz #include <stdarg.h>
752a38012Sejakowatz #include <stdio.h>
852a38012Sejakowatz 
952a38012Sejakowatz #include <String.h>
1052a38012Sejakowatz 
11*09d84e61STyler Dauwalder namespace BPrivate {
12*09d84e61STyler Dauwalder namespace Storage {
1352a38012Sejakowatz 
1452a38012Sejakowatz class Exception {
1552a38012Sejakowatz public:
1652a38012Sejakowatz 	// constructor
Exception()1752a38012Sejakowatz 	Exception()
1852a38012Sejakowatz 		: fError(B_OK),
1952a38012Sejakowatz 		  fDescription()
2052a38012Sejakowatz 	{
2152a38012Sejakowatz 	}
2252a38012Sejakowatz 
2352a38012Sejakowatz 	// constructor
Exception(BString description)2452a38012Sejakowatz 	Exception(BString description)
2552a38012Sejakowatz 		: fError(B_OK),
2652a38012Sejakowatz 		  fDescription(description)
2752a38012Sejakowatz 	{
2852a38012Sejakowatz 	}
2952a38012Sejakowatz 
3052a38012Sejakowatz 	// constructor
Exception(const char * format,...)3152a38012Sejakowatz 	Exception(const char* format,...)
3252a38012Sejakowatz 		: fError(B_OK),
3352a38012Sejakowatz 		  fDescription()
3452a38012Sejakowatz 	{
3552a38012Sejakowatz 		va_list args;
3652a38012Sejakowatz 		va_start(args, format);
3752a38012Sejakowatz 		SetTo(B_OK, format, args);
3852a38012Sejakowatz 		va_end(args);
3952a38012Sejakowatz 	}
4052a38012Sejakowatz 
4152a38012Sejakowatz 	// constructor
Exception(status_t error)4252a38012Sejakowatz 	Exception(status_t error)
4352a38012Sejakowatz 		: fError(error),
4452a38012Sejakowatz 		  fDescription()
4552a38012Sejakowatz 	{
4652a38012Sejakowatz 	}
4752a38012Sejakowatz 
4852a38012Sejakowatz 	// constructor
Exception(status_t error,BString description)4952a38012Sejakowatz 	Exception(status_t error, BString description)
5052a38012Sejakowatz 		: fError(error),
5152a38012Sejakowatz 		  fDescription(description)
5252a38012Sejakowatz 	{
5352a38012Sejakowatz 	}
5452a38012Sejakowatz 
5552a38012Sejakowatz 	// constructor
Exception(status_t error,const char * format,...)5652a38012Sejakowatz 	Exception(status_t error, const char* format,...)
5752a38012Sejakowatz 		: fError(error),
5852a38012Sejakowatz 		  fDescription()
5952a38012Sejakowatz 	{
6052a38012Sejakowatz 		va_list args;
6152a38012Sejakowatz 		va_start(args, format);
6252a38012Sejakowatz 		SetTo(error, format, args);
6352a38012Sejakowatz 		va_end(args);
6452a38012Sejakowatz 	}
6552a38012Sejakowatz 
6652a38012Sejakowatz 	// copy constructor
Exception(const Exception & exception)6752a38012Sejakowatz 	Exception(const Exception& exception)
6852a38012Sejakowatz 		: fError(exception.fError),
6952a38012Sejakowatz 		  fDescription(exception.fDescription)
7052a38012Sejakowatz 	{
7152a38012Sejakowatz 	}
7252a38012Sejakowatz 
7352a38012Sejakowatz 	// destructor
~Exception()7452a38012Sejakowatz 	~Exception()
7552a38012Sejakowatz 	{
7652a38012Sejakowatz 	}
7752a38012Sejakowatz 
7852a38012Sejakowatz 	// SetTo
SetTo(status_t error,BString description)7952a38012Sejakowatz 	void SetTo(status_t error, BString description)
8052a38012Sejakowatz 	{
8152a38012Sejakowatz 		fError = error;
8252a38012Sejakowatz 		fDescription.SetTo(description);
8352a38012Sejakowatz 	}
8452a38012Sejakowatz 
8552a38012Sejakowatz 	// SetTo
SetTo(status_t error,const char * format,va_list arg)8652a38012Sejakowatz 	void SetTo(status_t error, const char* format, va_list arg)
8752a38012Sejakowatz 	{
8852a38012Sejakowatz 		char buffer[2048];
8952a38012Sejakowatz 		vsprintf(buffer, format, arg);
9052a38012Sejakowatz 		SetTo(error, BString(buffer));
9152a38012Sejakowatz 	}
9252a38012Sejakowatz 
9352a38012Sejakowatz 	// GetError
Error()9452a38012Sejakowatz 	status_t Error() const
9552a38012Sejakowatz 	{
9652a38012Sejakowatz 		return fError;
9752a38012Sejakowatz 	}
9852a38012Sejakowatz 
9952a38012Sejakowatz 	// GetDescription
Description()10052a38012Sejakowatz 	const char* Description() const
10152a38012Sejakowatz 	{
10252a38012Sejakowatz 		return fDescription.String();
10352a38012Sejakowatz 	}
10452a38012Sejakowatz 
10552a38012Sejakowatz private:
10652a38012Sejakowatz 	status_t	fError;
10752a38012Sejakowatz 	BString		fDescription;
10852a38012Sejakowatz };
10952a38012Sejakowatz 
110*09d84e61STyler Dauwalder };	// namespace Storage
111*09d84e61STyler Dauwalder };	// namespace BPrivate
11252a38012Sejakowatz 
11382b75665STyler Dauwalder #endif	// _EXCEPTION_H
114*09d84e61STyler Dauwalder 
115*09d84e61STyler Dauwalder 
116