root/headers/private/storage/Exception.h
// Exception

#ifndef _EXCEPTION_H
#define _EXCEPTION_H

#include <stdarg.h>
#include <stdio.h>

#include <String.h>

namespace BPrivate {
namespace Storage {

class Exception {
public:
        // constructor
        Exception()
                : fError(B_OK),
                  fDescription()
        {
        }

        // constructor
        Exception(BString description)
                : fError(B_OK),
                  fDescription(description)
        {
        }

        // constructor
        Exception(const char* format,...)
                : fError(B_OK),
                  fDescription()
        {
                va_list args;
                va_start(args, format);
                SetTo(B_OK, format, args);
                va_end(args);
        }

        // constructor
        Exception(status_t error)
                : fError(error),
                  fDescription()
        {
        }

        // constructor
        Exception(status_t error, BString description)
                : fError(error),
                  fDescription(description)
        {
        }

        // constructor
        Exception(status_t error, const char* format,...)
                : fError(error),
                  fDescription()
        {
                va_list args;
                va_start(args, format);
                SetTo(error, format, args);
                va_end(args);
        }

        // copy constructor
        Exception(const Exception& exception)
                : fError(exception.fError),
                  fDescription(exception.fDescription)
        {
        }

        // destructor
        ~Exception()
        {
        }

        // SetTo
        void SetTo(status_t error, BString description)
        {
                fError = error;
                fDescription.SetTo(description);
        }

        // SetTo
        void SetTo(status_t error, const char* format, va_list arg)
        {
                char buffer[2048];
                vsprintf(buffer, format, arg);
                SetTo(error, BString(buffer));
        }

        // GetError
        status_t Error() const
        {
                return fError;
        }

        // GetDescription
        const char* Description() const
        {
                return fDescription.String();
        }

private:
        status_t        fError;
        BString         fDescription;
};

};      // namespace Storage
};      // namespace BPrivate

#endif  // _EXCEPTION_H