summaryrefslogtreecommitdiff
path: root/include/hashparent.h
blob: b07a8f752390097d8abc376edf7d48535d5e0c81 (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
/**
 *  HashParent.h
 *
 *  Interface that is implemented by all objects that can be accessed with
 *  array-access variables ([]). When the value of a hash-member is changed,
 *  it will call one of the methods from this class to set the new property
 *
 *  This is an internal class that you normally not need when writing
 *  extensions. It is used by the PHP-CPP library when you use constructs
 *  like value["x"]["y"] = 10;
 *
 *  @author Emiel Bruijntjes <emiel.bruijntjes@copernica.com>
 *  @copyright 2014 Copernica BV
 */

/**
 *  Set up namespace
 */
namespace Php {

/**
 *  Forwards
 */
class Value;

/**
 *  Class definition
 */
class PHPCPP_EXPORT HashParent
{
protected:
    /**
     *  Protected constructor - users should not instantiate HashParent
     *  objects themselved. Use a Value object instead.
     */
    HashParent() {}

public:
    /**
     *  Destructor
     */
    virtual ~HashParent() {}

    /**
     *  Check if a certain key exists in the array/object
     *  @param  key
     *  @return bool
     */
    virtual bool contains(const std::string &key) const = 0;

    /**
     *  Check if a certain index exists in the array/object
     *  @param  key
     *  @return bool
     */
    virtual bool contains(int index) const = 0;

    /**
     *  Check if a certain index exists in the array/object
     *  @param  key
     *  @return bool
     */
    virtual bool contains(const Value &index) const = 0;

    /**
     *  Retrieve the value at a string index
     *  @param  key
     *  @return Value
     */
    virtual Value get(const std::string &key) const = 0;

    /**
     *  Retrieve the value at a numeric index
     *  @param  index
     *  @return Value
     */
    virtual Value get(int index) const = 0;

    /**
     *  Retrieve the value at a value index
     *  @param  key
     *  @return Value
     */
    virtual Value get(const Value &key) const = 0;

    /**
     *  Overwrite the value at a certain string index
     *  @param  key
     *  @param  value
     */
    virtual void set(const std::string &key, const Value &value) = 0;

    /**
     *  Overwrite the value at a certain numeric index
     *  @param  index
     *  @param  value
     */
    virtual void set(int index, const Value &value) = 0;

    /**
     *  Overwrite the value at a certain variant index
     *  @param  key
     *  @param  value
     */
    virtual void set(const Value &key, const Value &value) = 0;

    /**
     *  Unset a member by its index
     *  @param  index
     */
    virtual void unset(int index) = 0;

    /**
     *  Unset a member by its key
     *  @param  key
     */
    virtual void unset(const std::string &key) = 0;

    /**
     *  Unset a member by its key
     *  @param  key
     */
    virtual void unset(const Value &key) = 0;

};

/**
 *  End namespace
 */
}