-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathObject.h
135 lines (105 loc) · 3.1 KB
/
Object.h
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
134
/*
Copyright (C) <2010-2011> Karl Hiramoto <karl@hiramoto.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#ifndef OBJECT_H
#define OBJECT_H
#ifdef HAVE_CONFIG_H
#include "nfq-web-filter-config.h"
#endif
#include <stdbool.h>
/**
* @defgroup Object Object. A Generic object that others may inherit.
* @{
*/
/**
* Common Object Header
*
* This macro must be included as first member in every object,
* that inherits this object
* @var id Object ID
* @var refcount Counter for number of holders of this object
*/
#define OBJECT_COMMON \
int id; \
int refcount; \
struct Object_ops *obj_ops;
/**
* @struct Object
* @brief This is a base object that all other object will inherit
* it features a unique ID per object and reference counters
*/
struct Object
{
/** Base class members */
OBJECT_COMMON;
};
/**
* @struct Object_ops
* @brief Object operations, defines various Object properties and callbacks.
*/
struct Object_ops
{
/** Unique type name of the object */
char * obj_type;
/** Size of object */
size_t obj_size;
/**
* Optional callback to init/allocate any private data
*/
int (*obj_constructor)(struct Object *);
/**
* Optional callback to free any private data
*/
int (*obj_destructor)(struct Object *);
/*optional callback to clone private data */
int (*obj_clone)(struct Object *dst, struct Object *src);
/** optional callback to compare two objects
@return 0 if equal. -1, 1 see man qsort()
*/
int (*obj_compare)(struct Object *dst, struct Object *src);
};
struct Object *Object_alloc(struct Object_ops *ops);
void Object_free(struct Object **obj);
/**
* @name Reference Management
* @{
*/
/**
* Release a reference from an object.
* When reference count reaches 0 free and will NULL pointer
* @arg obj object to release reference from
*/
void Object_put(struct Object **obj);
/**
* Acquire a reference on a object
* @arg obj object to acquire reference from
*/
void Object_get(struct Object *obj);
/**
* Check whether this object is used by multiple users
* @arg obj object to check
* @return true or false
*/
bool Object_shared(struct Object *obj);
/** @}
end of refrence management
*/
/** @}
end of Object file
*/
#endif