diff options
Diffstat (limited to 'tool_src/QvLib/QvSFEnum.cpp')
| -rw-r--r-- | tool_src/QvLib/QvSFEnum.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tool_src/QvLib/QvSFEnum.cpp b/tool_src/QvLib/QvSFEnum.cpp new file mode 100644 index 0000000..2c41da9 --- /dev/null +++ b/tool_src/QvLib/QvSFEnum.cpp @@ -0,0 +1,58 @@ +#include <QvDebugError.h> +#include <QvReadError.h> +#include <QvSFEnum.h> + +// Can't use macro, since we define a constructor. + +QvSFEnum::QvSFEnum() +{ + enumValues = NULL; + enumNames = NULL; +} + +QvSFEnum::~QvSFEnum() +{ +} + +QvBool +QvSFEnum::findEnumValue(const QvName &name, int &val) const +{ + int i; + + // Look through names table for one that matches + for (i = 0; i < numEnums; i++) { + if (name == enumNames[i]) { + val = enumValues[i]; + return TRUE; + } + } + + return FALSE; +} + +QvBool +QvSFEnum::readValue(QvInput *in) +{ + QvName n; + +#ifdef DEBUG + if (enumValues == NULL) { + QvDebugError::post("QvSFEnum::readValue", + "Enum values were never initialized"); + QvReadError::post(in, "Couldn't read QvSFEnum value"); + return FALSE; + } +#endif /* DEBUG */ + + // Read mnemonic value as a character string identifier + if (! in->read(n, TRUE)) + return FALSE; + + if (findEnumValue(n, value)) + return TRUE; + + // Not found? Too bad + QvReadError::post(in, "Unknown QvSFEnum enumeration value \"%s\"", + n.getString()); + return FALSE; +} |
