/////////////////////////////////////////////////////////////////////////////////////////
// Project: SP Data Formatting Library 1.5
//
// File: FormatterError.cpp implementation of EFormatterError class.
//
// Developer(s): Sergei Pavlovsky
// sergei_vp@hotmail.com
// Copyright (c) 2004-2005
//
// Description: EDataFormatterError is exception class that describes formatter errors.
//
// Platforms: Win32, ATL
//
// This code may be used in compiled form in any way you desire. This file may be
// redistributed unmodified by any means PROVIDING it is not sold for profit without
// the authors written consent, and providing that this notice and the authors name
// is included. If the source code in this file is used in any commercial application
// then acknowledgement must be made to the author of this file (in whatever form
// you wish).
//
// This file is provided "as is" with no expressed or implied warranty. The author
// accepts no liability for any damage/loss of business that this product may cause.
/////////////////////////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "spDataFormatter.h"
#include "spDataFormatterResIDs.h"
#include "spLogErrorResIDs.h"
#include "spStringUtils.h"
namespace SP
{
/////////////////////////////////////////////////////////////////////////////////////////
// Common constants
/////////////////////////////////////////////////////////////////////////////////////////
#define MAX_RESSTRINGLEN 255
/////////////////////////////////////////////////////////////////////////////////////////
// EDataFormatterError class implementation
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
// Constants
const UINT EDataFormatterError::ms_aErrDscIDs[] =
{
SPLER_IDS_ERD_UNEXPECTED,
SPDF_IDS_ERD_CREATE,
SPDF_IDS_ERD_INVALIDPROPVALUE,
SPDF_IDS_ERD_NOEMPTYSTRING,
SPDF_IDS_ERD_VALUE_0_1,
SPDF_IDS_ERD_VALUE_0_4,
SPDF_IDS_ERD_VALUE_0_15,
SPDF_IDS_ERD_VALUE_8or10or15,
SPDF_IDS_ERD_CONVSTRTONUMBER,
SPDF_IDS_ERD_NOGROUPSIZE,
SPDF_IDS_ERD_INCORRECTGROUPSIZE,
SPDF_IDS_ERD_INCORRECTLASTGROUP,
SPDF_IDS_ERD_DEFINEGROUPING,
SPDF_IDS_ERD_SETMASK,
SPDF_IDS_ERD_TOOMANYPATTERNSINMASK,
SPDF_IDS_ERD_NESTEDATTRIBUTES,
SPDF_IDS_ERD_ONLYONEATTRIBUTESECTION,
SPDF_IDS_ERD_ATTRIBUTESECTIONBEFORE,
SPDF_IDS_ERD_UNEXPECTEDATTRIBUTESECTIONEND,
SPDF_IDS_ERD_MISSINGESCSYMBOL,
SPDF_IDS_ERD_UNEXPECTEDREPEATEND,
SPDF_IDS_ERD_UNEXPECTEDOPTIONEND,
SPDF_IDS_ERD_UNCLOSEDCLAUSE,
SPDF_IDS_ERD_NUMBERBOUNDARIES,
SPDF_IDS_ERD_PARSEEXPPATTERN,
SPDF_IDS_ERD_UNEXPECTEDECIMALSEPARATOR,
SPDF_IDS_ERD_PARSEFLTPATTERN,
SPDF_IDS_ERD_UNEXPECTEDEXPONENTSEPARATOR,
SPDF_IDS_ERD_OPTIONALPATTERN,
SPDF_IDS_ERD_COMPOSEMASK,
SPDF_IDS_ERD_GENERATEMASK,
SPDF_IDS_ERD_PARSEMASK,
SPDF_IDS_ERD_TRANSLATEMASK,
SPDF_IDS_ERD_COMPOSEPATTERN,
SPDF_IDS_ERD_GENERATEPATTERN,
SPDF_IDS_ERD_PARSEPATTERN,
SPDF_IDS_ERD_TRANSLATEPATTERN,
SPDF_IDS_ERD_COMPOSEVALUEPATTERN,
SPDF_IDS_ERD_GENERATEVALUEPATTERN,
SPDF_IDS_ERD_PARSEVALUEPATTERN,
SPDF_IDS_ERD_TRANSLATEVALUEPATTERN,
SPDF_IDS_ERD_COMPOSEPOSVALUEPATTERN,
SPDF_IDS_ERD_GENERATEPOSVALUEPATTERN,
SPDF_IDS_ERD_PARSEPOSVALUEPATTERN,
SPDF_IDS_ERD_TRANSLATEPOSVALUEPATTERN,
SPDF_IDS_ERD_COMPOSENEGVALUEPATTERN,
SPDF_IDS_ERD_GENERATENEGVALUEPATTERN,
SPDF_IDS_ERD_PARSENEGVALUEPATTERN,
SPDF_IDS_ERD_TRANSLATENEGVALUEPATTERN,
SPDF_IDS_ERD_COMPOSEZEROPATTERN,
SPDF_IDS_ERD_GENERATEZEROPATTERN,
SPDF_IDS_ERD_PARSEZEROPATTERN,
SPDF_IDS_ERD_TRANSLATEZEROPATTERN,
SPDF_IDS_ERD_COMPOSEPOSZEROPATTERN,
SPDF_IDS_ERD_GENERATEPOSZEROPATTERN,
SPDF_IDS_ERD_PARSEPOSZEROPATTERN,
SPDF_IDS_ERD_TRANSLATEPOSZEROPATTERN,
SPDF_IDS_ERD_COMPOSENEGZEROPATTERN,
SPDF_IDS_ERD_GENERATENEGZEROPATTERN,
SPDF_IDS_ERD_PARSENEGZEROPATTERN,
SPDF_IDS_ERD_TRANSLATENEGZEROPATTERN,
SPDF_IDS_ERD_COMPOSEPOSINFINITYPATTERN,
SPDF_IDS_ERD_GENERATEPOSINFINITYPATTERN,
SPDF_IDS_ERD_PARSEPOSINFINITYPATTERN,
SPDF_IDS_ERD_TRANSLATEPOSINFINITYPATTERN,
SPDF_IDS_ERD_COMPOSENEGINFINITYPATTERN,
SPDF_IDS_ERD_GENERATENEGINFINITYPATTERN,
SPDF_IDS_ERD_PARSENEGINFINITYPATTERN,
SPDF_IDS_ERD_TRANSLATENEGINFINITYPATTERN,
SPDF_IDS_ERD_COMPOSENANPATTERN,
SPDF_IDS_ERD_GENERATENANPATTERN,
SPDF_IDS_ERD_PARSEENANPATTERN,
SPDF_IDS_ERD_TRANSLATENANPATTERN,
SPDF_IDS_ERD_COMPOSEQNANPATTERN,
SPDF_IDS_ERD_GENERATEQNANPATTERN,
SPDF_IDS_ERD_PARSEQNANPATTERN,
SPDF_IDS_ERD_TRANSLATEQNANPATTERN,
SPDF_IDS_ERD_COMPOSESNANPATTERN,
SPDF_IDS_ERD_GENERATESNANPATTERN,
SPDF_IDS_ERD_PARSESNANPATTERN,
SPDF_IDS_ERD_TRANSLATESNANPATTERN,
SPDF_IDS_ERD_COMPOSENULLPATTERN,
SPDF_IDS_ERD_GENERATENULLPATTERN,
SPDF_IDS_ERD_PARSENULLPATTERN,
SPDF_IDS_ERD_TRANSLATENULLPATTERN,
SPDF_IDS_ERD_COMPOSESEGMENT,
SPDF_IDS_ERD_TRANSLATESEGMENT,
SPDF_IDS_ERD_GENERATESEGMENT,
SPDF_IDS_ERD_COMPOSEPREFIXSEGMENT,
SPDF_IDS_ERD_TRANSLATEPREFIXSEGMENT,
SPDF_IDS_ERD_GENERATEPREFIXSEGMENT,
SPDF_IDS_ERD_COMPOSESUFFIXSEGMENT,
SPDF_IDS_ERD_TRANSLATESUFFIXSEGMENT,
SPDF_IDS_ERD_GENERATESUFFIXSEGMENT,
SPDF_IDS_ERD_COMPOSEMANTISSASEGMENT,
SPDF_IDS_ERD_TRANSLATEMANTISSASEGMENT,
SPDF_IDS_ERD_GENERATEMANTISSASEGMENT,
SPDF_IDS_ERD_COMPOSEINTSEGMENT,
SPDF_IDS_ERD_TRANSLATEINTSEGMENT,
SPDF_IDS_ERD_GENERATEINTSEGMENT,
SPDF_IDS_ERD_COMPOSEFRACSEGMENT,
SPDF_IDS_ERD_TRANSLATEFRACSEGMENT,
SPDF_IDS_ERD_GENERATEFRACSEGMENT,
SPDF_IDS_ERD_COMPOSEEXPSEGMENT,
SPDF_IDS_ERD_TRANSLATEEXPSEGMENT,
SPDF_IDS_ERD_GENERATEEXPSEGMENT,
SPDF_IDS_ERD_COMPOSETOKEN,
SPDF_IDS_ERD_TRANSLATETOKEN,
SPDF_IDS_ERD_GENERATETOKEN
};
/////////////////////////////////////////////////////////////////////////////////////////
// Operations: Cloning
ELogError* EDataFormatterError::Clone() const
{
EDataFormatterError* pClone;
try
{
pClone = new EDataFormatterError(*this);
_ASSERTE( pClone );
pClone->AddRef();
}
#ifdef _DEBUG
catch ( std::bad_alloc& )
{
ATLASSERT( 0 );
return NULL;
}
#endif // _DEBUG
catch ( ... )
{
ATLASSERT( 0 );
return NULL;
}
return pClone;
}
/////////////////////////////////////////////////////////////////////////////////////////
// Operations: Error information
LPCTSTR EDataFormatterError::GetSource() const throw()
{
return _T("SP Data Formatter");
}
UINT EDataFormatterError::GetCode() const throw()
{
return m_unCode;
}
SIZE_T EDataFormatterError::GetModuleName(LPTSTR lpszBuffer, SIZE_T cchBuffer) const throw()
{
ATLASSERT( !::IsBadWritePtr(lpszBuffer, cchBuffer * sizeof(TCHAR)) );
// Load string in temporal buffer
TCHAR szBuffer[MAX_RESSTRINGLEN + 1];
const SIZE_T cchLoaded = ::LoadString(_AtlBaseModule.GetResourceInstance(),
SPDF_IDS_ERS_FORMATTER,
szBuffer, MAX_RESSTRINGLEN + 1);
ATLASSERT( cchLoaded > 0 && cchLoaded < sizeof(szBuffer)/sizeof(TCHAR) );
// Copy string to the output buffer
return ( lpszBuffer )
? SP::StrCopy(szBuffer, lpszBuffer, cchBuffer)
: cchLoaded;
}
SIZE_T EDataFormatterError::GetDescription(LPTSTR lpszBuffer, SIZE_T cchBuffer) const throw()
{
ATLASSERT( !::IsBadWritePtr(lpszBuffer, cchBuffer * sizeof(TCHAR)) );
ATLASSERT( static_cast<SIZE_T>(m_unCode) > 0 &&
static_cast<SIZE_T>(m_unCode) - 1 <
sizeof(ms_aErrDscIDs)/sizeof(UINT) );
const UINT unResID = ms_aErrDscIDs[static_cast<SIZE_T>(m_unCode) - 1];
// Load string in temporal buffer
TCHAR szBuffer[MAX_RESSTRINGLEN + 1];
const SIZE_T cchLoaded = ::LoadString(_AtlBaseModule.GetResourceInstance(), unResID,
szBuffer, MAX_RESSTRINGLEN + 1);
ATLASSERT( cchLoaded > 0 && cchLoaded < sizeof(szBuffer)/sizeof(TCHAR) );
// Copy string to the output buffer
return ( lpszBuffer )
? SP::StrCopy(szBuffer, lpszBuffer, cchBuffer)
: cchLoaded;
}
DWORD EDataFormatterError::GetHelpContext() const throw()
{
return ELogError::GetHelpContext();
}
SIZE_T EDataFormatterError::GetHelpFile(LPTSTR lpszBuffer, SIZE_T cchBuffer) const throw()
{
ATLASSERT( !::IsBadWritePtr(lpszBuffer, cchBuffer * sizeof(TCHAR)) );
return ELogError::GetHelpFile(lpszBuffer, cchBuffer);
}
}; // SP namespace