blob: 5c0c23fadead864fc4f221b90b54f7f218754eba (
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
/**
* Argument.h
*
* Class holds information about an argument that is passed to a function.
* You'll need this class when you're defining your own functions.
*
* @author Emiel Bruijntjes <emiel.bruijntjes@copernica.com>
* @copyright 2013 Copernica BV
*/
/**
* Set up namespace
*/
namespace PhpCpp {
/**
* Forward definitions
*/
class ArgInfo;
/**
* Class definition
*/
class Argument
{
public:
/**
* Constructor if this argument should be an instance of a certain class
* @param name Name of the argument
* @param classname If a specific class is required, the class type
* @param null Are NULL values allowed in stead of an instance?
* @param ref Is this a pass-by-reference argument?
*/
Argument(const std::string &name, const std::string &classname, bool null = true, bool ref = false);
/**
* Constructor if the argument can be anything
* Note that only arrayType and callableType are supported type-hints
* @param name Name of the argument
* @param type Type hint (arrayType or callableType)
* @param ref Is this a pass-by-reference argument?
*/
Argument(const std::string &name, Type type = nullType, bool ref = false);
/**
* Constructor if the argument can be anything
* @param name Name of the argument
* @param ref Is this a pass-by-reference argument?
*/
Argument(const std::string &name, bool ref = false);
/**
* Copy constructor
* @param argument The argument to copy
*/
Argument(const Argument &argument)
{
// copy members
_refcount = argument._refcount;
_info = argument._info;
// increase references
(*_refcount)++;
}
/**
* Destructor
*/
virtual ~Argument()
{
// cleanup current object
cleanup();
}
/**
* Copy operator
* @param argument The argument to copy
* @return Argument
*/
Argument &operator=(const Argument &argument)
{
// skip self assignment
if (this == &argument) return *this;
// clean up current object
cleanup();
// copy members
_refcount = argument._refcount;
_info = argument._info;
// increase references
(*_refcount)++;
// done
return *this;
}
/**
* Retrieve argument info
* @return ArgInfo
* @internal
*/
ArgInfo *internal() const
{
return _info;
}
private:
/**
* Number of references
* @var int
*/
int *_refcount;
/**
* Pointer to the implementation
* @var ArgInfo
*/
ArgInfo *_info;
/**
* Remove one reference from the object
*/
void cleanup();
};
/**
* End of namespace
*/
}
|