/* libzz
*
* This program is distributed under the GNU General Public License, version 2.
* A copy of this license is included with this source.
*
* Copyright 2000-2006, Toni Thomsson <toni@tonjac.org>
*/
#ifndef zz_error_h
#define zz_error_h
#include <zz_string.h>
#include <deque>
#include <map>
#include <zz_export.h>
/**
Error message
@author Toni Thomsson, toni@tonjac.org
*/
class ZZ_API CzzErrorMessage
{
public:
/**
Create an empty error message
*/
CzzErrorMessage( void );
/**
Copy constructor
*/
CzzErrorMessage( const CzzErrorMessage& messageSrc );
~CzzErrorMessage();
/**
Set message
@param message Text
*/
void SetMessage( const CzzString message );
/**
Get message string
*/
CzzString GetMessage(void) const;
/**
Set error code
@param code Error code
*/
void SetCode( int code );
/**
Get error code
*/
int GetCode(void) const;
private:
CzzString m_Message;
int m_Code;
};
/**
Error stack
@author Toni Thomsson, toni@tonjac.org
*/
class CzzErrorStack : public deque<CzzErrorMessage* >
{
public:
/** Error stack */
CzzErrorStack( void );
~CzzErrorStack();
/** Number of users */
int GetUsageCount(void);
/** Increment the number of users */
void IncreaseUsageCount( void );
/** Decrement the number of users */
void DecreaseUsageCount( void );
private:
int m_UsageCount;
};
/**
Error history
@author Toni Thomsson, toni@tonjac.org
*/
class CzzErrorHistory : public CzzErrorStack
{
public:
/** Error history */
CzzErrorHistory( void );
~CzzErrorHistory( void );
/** Number of messages on the error stack */
int GetNumberOfMessages(void) const;
/** Empty stack */
bool IsEmpty(void);
/**
Add message to the stack
@param message Message
@param code Error code
*/
void PushMessage( const CzzString message, const int code );
/**
Add message to the stack
@param message Message
*/
void PushMessage( CzzErrorMessage* message );
/**
Get message on top of the stack
@param message Message
@param code Error code
*/
void GetTopMessage( CzzString& message, int& code );
/**
Get message on top of the stack
@param message Message
*/
void GetTopMessage( CzzErrorMessage*& message );
/** Remove message from top of the stack */
void PopTopMessage( void );
/**
Get message from the bottom of the stack
@param message Message
@param code Error code
*/
void GetBottomMessage( CzzString& message, int& code );
/**
Get message from the bottom of the stack
@param message Message
*/
void GetBottomMessage( CzzErrorMessage*& message );
/** Remove message from bottom of the stack */
void PopBottomMessage( void );
};
#endif