Adaptive Framework  0.9.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
afw_xctx_qualifier_object.c
Go to the documentation of this file.
1 // See the 'COPYING' file in the project root for licensing information.
2 /*
3  * Interface afw_object Implementation for afw_xctx_qualifier_object
4  *
5  * Copyright (c) 2010-2023 Clemson University
6  *
7  */
8 
9 
15 #include "afw_internal.h"
16 
17 
18 /* Declares and rti/inf defines for interface afw_object */
19 #define AFW_IMPLEMENTATION_ID "afw_xctx_qualifier_object"
21 
22 
23 
24 typedef struct {
25  const afw_utf8_t *qualifier;
26  const afw_object_t *variables_object;
28 
29 typedef struct impl_qualifier_entry_stack_s
30 impl_qualifier_entry_stack_t;
31 
32 AFW_STACK_STRUCT(impl_qualifier_entry_stack_s,
34 
35 
36 /* Create object to access active variables for a qualifier. */
37 AFW_DEFINE(const afw_object_t *)
39  const afw_utf8_t *qualifier,
40  afw_boolean_t for_testing,
41  const afw_pool_t *p,
42  afw_xctx_t *xctx)
43 {
45 
46  /*
47  * You may want to create a new pool for instance, but will just use
48  * xctx's pool in this example.
49  */
51  self->pub.inf = &impl_afw_object_inf;
52  self->pub.p = p;
53  self->qualifier = qualifier;
54  self->for_testing = for_testing;
55  afw_pool_add_reference(p, xctx);
56 
57  /* Return new instance. */
58  return (afw_object_t *)self;
59 }
60 
61 
62 
63 /* Create object to access active qualified variables. */
64 AFW_DEFINE(const afw_object_t *)
66  afw_boolean_t for_testing,
67  const afw_pool_t *p,
68  afw_xctx_t *xctx)
69 {
70  const afw_object_t *qualifiers;
71  const afw_object_t *qualifier;
73 
74  qualifiers = afw_object_create(p, xctx);
75  for (c = xctx->qualifier_stack->top;
76  c >= xctx->qualifier_stack->first;
77  c--)
78  {
79  if (!afw_object_has_property(qualifiers, &c->qualifier, xctx)) {
81  &c->qualifier, for_testing,
82  qualifiers->p, xctx);
84  &c->qualifier, qualifier, xctx);
85  }
86  }
87 
88  return qualifiers;
89 }
90 
91 
92 
93 /*
94  * Implementation of method release for interface afw_object.
95  */
96 void
98  const afw_object_t *instance,
99  afw_xctx_t *xctx)
100 {
103 
104  self->reference_count--;
105  if (self->reference_count <= 0) {
106  afw_pool_release(self->pub.p, xctx);
107  }
108 }
109 
110 /*
111  * Implementation of method add_reference for interface afw_object.
112  */
113 void
115  const afw_object_t *instance,
116  afw_xctx_t *xctx)
117 {
120 
121  self->reference_count++;
122 }
123 
124 /*
125  * Implementation of method get_count for interface afw_object.
126  */
129  const afw_object_t * instance,
130  afw_xctx_t * xctx)
131 {
132 // <afwdev {prefixed_interface_name}>_self_t *self =
133 // (<afwdev {prefixed_interface_name}>_self_t *)instance;
134 
136  AFW_THROW_ERROR_Z(general, "Method not implemented.", xctx);
137 
138 }
139 
140 /*
141  * Implementation of method get_meta for interface afw_object.
142  */
143 const afw_value_t *
145  const afw_object_t *instance,
146  const afw_pool_t *p,
147  afw_xctx_t *xctx)
148 {
150  AFW_THROW_ERROR_Z(general, "Method not implemented.", xctx);
151 
152 }
153 
154 /*
155  * Implementation of method get_property for interface afw_object.
156  */
157 const afw_value_t *
159  const afw_object_t *instance,
160  const afw_utf8_t *property_name,
161  afw_xctx_t *xctx)
162 {
165 
166  return afw_xctx_get_qualified_variable(self->qualifier,
167  property_name, xctx);
168 }
169 
170 /*
171  * Implementation of method get_property_meta for interface afw_object.
172  */
173 const afw_value_t *
175  const afw_object_t *instance,
176  const afw_utf8_t *property_name,
177  const afw_pool_t *p,
178  afw_xctx_t *xctx)
179 {
181  AFW_THROW_ERROR_Z(general, "Method not implemented.", xctx);
182 
183 }
184 
185 /*
186  * Implementation of method get_next_property for interface afw_object.
187  */
188 const afw_value_t *
190  const afw_object_t *instance,
191  const afw_iterator_t **iterator,
192  const afw_utf8_t **property_name,
193  afw_xctx_t *xctx)
194 {
196  AFW_THROW_ERROR_Z(general, "Method not implemented.", xctx);
197 
198 }
199 
200 /*
201  * Implementation of method get_next_property_meta for interface afw_object.
202  */
203 const afw_value_t *
205  const afw_object_t *instance,
206  const afw_iterator_t **iterator,
207  const afw_utf8_t **property_name,
208  const afw_pool_t *p,
209  afw_xctx_t *xctx)
210 {
212  AFW_THROW_ERROR_Z(general, "Method not implemented.", xctx);
213 
214 }
215 
216 /*
217  * Implementation of method has_property for interface afw_object.
218  */
221  const afw_object_t *instance,
222  const afw_utf8_t *property_name,
223  afw_xctx_t *xctx)
224 {
227 
228  return afw_xctx_get_qualified_variable(self->qualifier,
229  property_name, xctx) != NULL;
230 }
231 
232 /*
233  * Implementation of method get_setter for interface afw_object.
234  */
235 const afw_object_setter_t *
237  const afw_object_t *instance,
238  afw_xctx_t *xctx)
239 {
240  return NULL;
241 }
AFW_DEFINE(const afw_object_t *)
Adaptive Framework Core Internal.
Interface afw_interface implementation declares.
afw_object_set_property_as_object(const afw_object_t *object, const afw_utf8_t *property_name, const afw_object_t *internal, afw_xctx_t *xctx)
Set property function for data type object values.
#define AFW_STACK_STRUCT(struct_name, entry_type)
Define a struct for a stack with the specified entry type.
Definition: afw_common.h:718
struct afw_iterator_s afw_iterator_t
_Bool afw_boolean_t
Definition: afw_common.h:373
apr_size_t afw_size_t
size_t.
Definition: afw_common.h:151
#define AFW_THROW_ERROR_Z(code, message_z, xctx)
Macro used to set error and 0 rv in xctx and throw it.
Definition: afw_error.h:283
const afw_object_setter_t * impl_afw_object_get_setter(const afw_object_t *instance, afw_xctx_t *xctx)
void impl_afw_object_add_reference(const afw_object_t *instance, afw_xctx_t *xctx)
const afw_value_t * impl_afw_object_get_next_property(const afw_object_t *instance, const afw_iterator_t **iterator, const afw_utf8_t **property_name, afw_xctx_t *xctx)
void impl_afw_object_release(const afw_object_t *instance, afw_xctx_t *xctx)
const afw_value_t * impl_afw_object_get_meta(const afw_object_t *instance, const afw_pool_t *p, afw_xctx_t *xctx)
const afw_value_t * impl_afw_object_get_next_property_meta(const afw_object_t *instance, const afw_iterator_t **iterator, const afw_utf8_t **property_name, const afw_pool_t *p, afw_xctx_t *xctx)
const afw_value_t * impl_afw_object_get_property(const afw_object_t *instance, const afw_utf8_t *property_name, afw_xctx_t *xctx)
afw_boolean_t impl_afw_object_has_property(const afw_object_t *instance, const afw_utf8_t *property_name, afw_xctx_t *xctx)
const afw_value_t * impl_afw_object_get_property_meta(const afw_object_t *instance, const afw_utf8_t *property_name, const afw_pool_t *p, afw_xctx_t *xctx)
afw_size_t impl_afw_object_get_count(const afw_object_t *instance, afw_xctx_t *xctx)
#define afw_object_has_property(instance, property_name, xctx)
Call method has_property of interface afw_object.
#define afw_object_create(p, xctx)
Create an empty unmanaged object in memory.
Definition: afw_object.h:948
#define afw_pool_add_reference(instance, xctx)
Call method add_reference of interface afw_pool.
#define afw_pool_release(instance, xctx)
Call method release of interface afw_pool.
#define afw_pool_calloc_type(instance, type, xctx)
Macro to allocate cleared memory to hold type in pool.
Definition: afw_pool.h:167
afw_xctx_qualifiers_object_create(afw_boolean_t for_testing, const afw_pool_t *p, afw_xctx_t *xctx)
Create object to access active qualified variables.
afw_xctx_get_qualified_variable(const afw_utf8_t *qualifier, const afw_utf8_t *name, afw_xctx_t *xctx)
Get a variable from xctx stack.
Definition: afw_xctx.c:176
afw_xctx_qualifier_object_create(const afw_utf8_t *qualifier, afw_boolean_t for_testing, const afw_pool_t *p, afw_xctx_t *xctx)
Create object to access active variables for a qualifier.
Interface afw_object public struct.
Interface afw_object_setter public struct.
Interface afw_pool public struct.
NFC normalized UTF-8 string.
Definition: afw_common.h:545
Interface afw_value public struct.
Definition: afw_xctx.h:352
afw_utf8_t qualifier
qualifier or len=0 if unqualified.
Definition: afw_xctx.h:358
Interface afw_xctx public struct.