aboutsummaryrefslogtreecommitdiff
path: root/tool_src/QvLib/QvSFEnum.h
blob: 14a6c4bd051c8c19980a89f91a899b65a4dbb3aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#ifndef  _QV_SF_ENUM_
#define  _QV_SF_ENUM_

#include <QvString.h>
#include <QvSubField.h>

class QvSFEnum : public QvSField {
  public:
    int value;
    QV_SFIELD_HEADER(QvSFEnum);

    // Sets up value/name correspondances
    void setEnums(int num, const int vals[], const QvName names[])
	{ numEnums = num; enumValues = vals; enumNames = names; }

    int			numEnums;	// Number of enumeration values
    const int		*enumValues;	// Enumeration values
    const QvName	*enumNames;	// Mnemonic names of values

    // Looks up enum name, returns value. Returns FALSE if not found.
    QvBool		findEnumValue(const QvName &name, int &val) const;
};

#define	QV_NODE_SET_SF_ENUM_TYPE(fieldName, enumType)			      \
    do {								      \
	int _so_sf_enum_num;						      \
	const int *_so_sf_enum_vals;					      \
	const QvName *_so_sf_enum_names;				      \
	fieldData->getEnumData(QV__QUOTE(enumType),			      \
			       _so_sf_enum_num,				      \
			       _so_sf_enum_vals,			      \
			       _so_sf_enum_names);			      \
	fieldName.setEnums(_so_sf_enum_num,				      \
			   _so_sf_enum_vals,				      \
			   _so_sf_enum_names);				      \
    } while (0)

#endif /* _QV_SF_ENUM_ */