source: NonGTP/FCollada/FUtils/FUStatus.h @ 964

Revision 964, 4.0 KB checked in by igarcia, 18 years ago (diff)
Line 
1/*
2        Copyright (C) 2005-2006 Feeling Software Inc.
3        MIT License: http://www.opensource.org/licenses/mit-license.php
4*/
5/*
6        Based on the FS Import classes:
7        Copyright (C) 2005-2006 Feeling Software Inc
8        Copyright (C) 2005-2006 Autodesk Media Entertainment
9        MIT License: http://www.opensource.org/licenses/mit-license.php
10*/
11
12/**
13        @file FUStatus.h
14        This file contains the FUStatus class.
15*/
16
17#ifndef _FU_STATUS_H_
18#define _FU_STATUS_H_
19
20/**
21        A return status structure that includes a string.
22        Contains a return code as well as a string which explains the errors and warnings
23        attached to the return code. The return code is either 'successful' or 'failure'.
24        If the return code is 'failure', proceeding normally may be dangerous.
25        This structure is used by the FCDocument classes to explain parsing errors.
26
27        @ingroup FUtils
28*/
29class FCOLLADA_EXPORT FUStatus
30{
31private:
32        fstring errorString;
33        bool callSuccessful;
34
35public:
36        /** Default Constructor.
37                The default return code is 'successful'.
38                @param _callSuccessful Whether the return code should be set to 'successful'. */
39        FUStatus(bool _callSuccessful=true) { callSuccessful = _callSuccessful; }
40
41        /** Sets the value of the return code to 'failure'.
42                @return The error code structure. Returns itself to support
43                        multiple subsequent operations in one statement. */
44        FUStatus& Fail() { callSuccessful = false; return *this; }
45
46        /** Sets the value of the return code to 'failure'.
47                @param str The error string for the error encountered.
48                @param line A line number.
49                @return The return status structure. Returns itself to support
50                        multiple subsequent operations in one statement. */
51        FUStatus& Fail(const fstring& str, size_t line=0) { callSuccessful = false; AppendString(FS("ERROR[") + TO_FSTRING(line) + FS("]: ") + str); return *this; }
52        FUStatus& Fail(const fchar* str, size_t line=0) { callSuccessful = false; AppendString(FS("ERROR[") + TO_FSTRING(line) + FS("]: ") + str); return *this; } /**< See above. */
53
54        /** Adds a warning to the return status. A warning does not set the return code to 'failure'.
55                @param str The warning string for the error encountered.
56                @param line A line number.
57                @return The return status structure. Returns itself to support
58                        multiple subsequent operations in one statement. */
59        FUStatus& Warning(const fstring& str, size_t line=0) { AppendString(FS("WARNING[") + TO_FSTRING(line) + FS("]: ") + str); return *this; }
60        FUStatus& Warning(const fchar* str, size_t line=0) { AppendString(FS("WARNING[") + TO_FSTRING(line) + FS("]: ") + str); return *this; } /**< See above. */
61
62        /** Merges two return stati together.
63                Appends to this return status the error string from the given status.
64                The merged return code is 'failure', if either return codes are 'failure'.
65                @param a The return status to merge with. */
66        void AppendStatus(const FUStatus& a) { AppendString(a.errorString); callSuccessful &= a.callSuccessful; }
67
68        /** Appends a return string to the return status.
69                A 'newline' code is added between return strings.
70                @param str The return string to append. */
71        void AppendString(const fstring& str) { AppendString(str.c_str()); }
72        void AppendString(const fchar* str) { if (*str != 0) { if (!errorString.empty()) errorString += FC("\r\n"); errorString += str; } } /**< See above. */
73
74        /** Retrieves the error/return string for this return status.
75                @return The return string. */
76        const fchar* GetErrorString() const { return errorString.empty() ? (callSuccessful ? FC("Success") : FC("Failure")) : errorString.c_str(); }
77
78        /** Retrieves whether the return status is 'successful'.
79                @return Whether the return status is 'successful'. */
80        bool IsSuccessful() const { return callSuccessful; }
81
82        /** Retrieves whether the return status is 'failure'.
83                @return Whether the return status is 'failure'. */
84        bool IsFailure() const { return !callSuccessful; }
85
86        /** Transforms the return status into a boolean primitive.
87                @return Whether the return status is 'successful'. */
88        operator bool() const { return callSuccessful; }
89};
90
91#endif // _FU_STATUS_H_
Note: See TracBrowser for help on using the repository browser.