aboutsummaryrefslogtreecommitdiff
path: root/tool_src/QvLib/QvField.h
blob: ff32adee08b5d319645f7f3105949637c95e157a (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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#ifndef  _QV_FIELD_
#define  _QV_FIELD_

#include <QvString.h>

class QvInput;
class QvNode;

class QvField {
  public:
    virtual ~QvField();

    void		setIgnored(QvBool ig)	{ flags.ignored = ig;   }
    QvBool		isIgnored() const	{ return flags.ignored; }

    QvBool		isDefault() const	{ return flags.hasDefault; }

    QvNode *		getContainer() const	{ return container; }

    void		setDefault(QvBool def)	{ flags.hasDefault = def; }
    void		setContainer(QvNode *cont);
    QvBool		read(QvInput *in, const QvName &name);

    QvField()		{ flags.hasDefault = TRUE; flags.ignored = FALSE; }

  public:

  private:
    struct {
	unsigned int hasDefault		: 1; // Field is set to default value
	unsigned int ignored		: 1; // Field value is to be ignored
    }			flags;

    QvNode		*container;

    static QvField *	createInstanceFromName(const QvName &className);
    virtual QvBool	readValue(QvInput *in) = 0;

friend class QvFieldData;
};

class QvSField : public QvField {
  public:
    virtual ~QvSField();

  protected:
    QvSField();

  private:
    virtual QvBool	readValue(QvInput *in) = 0;
};

class QvMField : public QvField {

  public:
    int			num;		// Number of values
    int			maxNum;		// Number of values allocated

    // Destructor
    virtual ~QvMField();

  protected:
    QvMField();
    virtual void	makeRoom(int newNum);

  private:
    virtual void	allocValues(int num) = 0;
    virtual QvBool	readValue(QvInput *in);
    virtual QvBool	read1Value(QvInput *in, int index) = 0;
};

#endif /* _QV_FIELD_ */