92 lines
4.0 KiB
C++
92 lines
4.0 KiB
C++
/*
|
|
Copyright (C) 2005-2006 Feeling Software Inc.
|
|
MIT License: http://www.opensource.org/licenses/mit-license.php
|
|
*/
|
|
/*
|
|
Based on the FS Import classes:
|
|
Copyright (C) 2005-2006 Feeling Software Inc
|
|
Copyright (C) 2005-2006 Autodesk Media Entertainment
|
|
MIT License: http://www.opensource.org/licenses/mit-license.php
|
|
*/
|
|
|
|
/**
|
|
@file FUStatus.h
|
|
This file contains the FUStatus class.
|
|
*/
|
|
|
|
#ifndef _FU_STATUS_H_
|
|
#define _FU_STATUS_H_
|
|
|
|
/**
|
|
A return status structure that includes a string.
|
|
Contains a return code as well as a string which explains the errors and warnings
|
|
attached to the return code. The return code is either 'successful' or 'failure'.
|
|
If the return code is 'failure', proceeding normally may be dangerous.
|
|
This structure is used by the FCDocument classes to explain parsing errors.
|
|
|
|
@ingroup FUtils
|
|
*/
|
|
class FCOLLADA_EXPORT FUStatus
|
|
{
|
|
private:
|
|
fstring errorString;
|
|
bool callSuccessful;
|
|
|
|
public:
|
|
/** Default Constructor.
|
|
The default return code is 'successful'.
|
|
@param _callSuccessful Whether the return code should be set to 'successful'. */
|
|
FUStatus(bool _callSuccessful=true) { callSuccessful = _callSuccessful; }
|
|
|
|
/** Sets the value of the return code to 'failure'.
|
|
@return The error code structure. Returns itself to support
|
|
multiple subsequent operations in one statement. */
|
|
FUStatus& Fail() { callSuccessful = false; return *this; }
|
|
|
|
/** Sets the value of the return code to 'failure'.
|
|
@param str The error string for the error encountered.
|
|
@param line A line number.
|
|
@return The return status structure. Returns itself to support
|
|
multiple subsequent operations in one statement. */
|
|
FUStatus& Fail(const fstring& str, size_t line=0) { callSuccessful = false; AppendString(FS("ERROR[") + TO_FSTRING(line) + FS("]: ") + str); return *this; }
|
|
FUStatus& Fail(const fchar* str, size_t line=0) { callSuccessful = false; AppendString(FS("ERROR[") + TO_FSTRING(line) + FS("]: ") + str); return *this; } /**< See above. */
|
|
|
|
/** Adds a warning to the return status. A warning does not set the return code to 'failure'.
|
|
@param str The warning string for the error encountered.
|
|
@param line A line number.
|
|
@return The return status structure. Returns itself to support
|
|
multiple subsequent operations in one statement. */
|
|
FUStatus& Warning(const fstring& str, size_t line=0) { AppendString(FS("WARNING[") + TO_FSTRING(line) + FS("]: ") + str); return *this; }
|
|
FUStatus& Warning(const fchar* str, size_t line=0) { AppendString(FS("WARNING[") + TO_FSTRING(line) + FS("]: ") + str); return *this; } /**< See above. */
|
|
|
|
/** Merges two return stati together.
|
|
Appends to this return status the error string from the given status.
|
|
The merged return code is 'failure', if either return codes are 'failure'.
|
|
@param a The return status to merge with. */
|
|
void AppendStatus(const FUStatus& a) { AppendString(a.errorString); callSuccessful &= a.callSuccessful; }
|
|
|
|
/** Appends a return string to the return status.
|
|
A 'newline' code is added between return strings.
|
|
@param str The return string to append. */
|
|
void AppendString(const fstring& str) { AppendString(str.c_str()); }
|
|
void AppendString(const fchar* str) { if (*str != 0) { if (!errorString.empty()) errorString += FC("\r\n"); errorString += str; } } /**< See above. */
|
|
|
|
/** Retrieves the error/return string for this return status.
|
|
@return The return string. */
|
|
const fchar* GetErrorString() const { return errorString.empty() ? (callSuccessful ? FC("Success") : FC("Failure")) : errorString.c_str(); }
|
|
|
|
/** Retrieves whether the return status is 'successful'.
|
|
@return Whether the return status is 'successful'. */
|
|
bool IsSuccessful() const { return callSuccessful; }
|
|
|
|
/** Retrieves whether the return status is 'failure'.
|
|
@return Whether the return status is 'failure'. */
|
|
bool IsFailure() const { return !callSuccessful; }
|
|
|
|
/** Transforms the return status into a boolean primitive.
|
|
@return Whether the return status is 'successful'. */
|
|
operator bool() const { return callSuccessful; }
|
|
};
|
|
|
|
#endif // _FU_STATUS_H_
|