00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef INTEGRA_INSTANCE_H
00022 #define INTEGRA_INSTANCE_H
00023
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027
00028 #include <Integra/integra_attribute.h>
00029 #include <Integra/integra_port.h>
00030 #include <Integra/integra_path.h>
00031 #include <Integra/integra_error.h>
00032
00033
00044 typedef struct ntg_instance_ {
00045
00050 ntg_id id;
00051
00057 ntg_id class_id;
00058
00063 char *name;
00064
00066 struct ntg_instance_ *next;
00067
00069 struct ntg_instance_ *prev;
00070
00072 struct ntg_instance_ *parent;
00073
00077 struct ntg_instance_ *instances;
00078
00082
00083
00084 ntg_instance_attribute *attributes;
00085
00086
00087
00088 ntg_instance_attribute *attribute_current;
00089
00090
00091
00092 ntg_instance_attribute *attribute_last;
00093
00094 int n_attributes;
00095
00098 int dirty;
00099
00100 } ntg_instance;
00101
00102
00117 typedef struct ntg_instance_count_ {
00118 ntg_id class_id;
00119 unsigned int n_instances;
00120 struct ntg_instance_count_ *next;
00121 } ntg_instance_count;
00122
00129 ntg_instance *ntg_instance_new(void);
00130
00136 void ntg_add_instance(ntg_instance *instance, ntg_instance *container);
00137
00143 ntg_instance *ntg_instance_find_by_name(const ntg_instance *container,
00144 const char *instance_name);
00145
00148 ntg_instance *ntg_instance_find_by_name_r(const ntg_instance *root,
00149 const char *name);
00150
00151 ntg_instance *ntg_instance_find_by_path(const ntg_path *path,
00152 const ntg_instance *container);
00153
00159 ntg_instance *ntg_instance_find_by_id(const ntg_instance *container,
00160 const ntg_id instance_id);
00161
00164 ntg_instance *ntg_instance_find_by_id_r(const ntg_instance *root,
00165 const ntg_id id);
00166
00167
00168
00169
00172 void ntg_instance_unlink(ntg_instance *instance);
00173
00183 ntg_error_code ntg_instance_set_name(ntg_instance *instance, const char *class_name, const char *name);
00184
00186 ntg_error_code ntg_instance_set_class_id(ntg_instance *instance, ntg_id id);
00187
00192 unsigned long ntg_instance_get_id(ntg_instance *instance);
00193
00204 ntg_error_code ntg_instance_add(ntg_instance *collection, ntg_instance *instance);
00205
00207 ntg_instance_attribute *ntg_instance_get_attribute_root(
00208 const ntg_instance *instance);
00209
00214 ntg_instance_attribute *ntg_instance_get_attribute_current(
00215 const ntg_instance *instance);
00216
00218 void ntg_instance_set_attribute_current(ntg_instance *instance,
00219 ntg_instance_attribute *current);
00220
00227 ntg_instance_attribute *ntg_instance_attribute_find_by_name(
00228 const ntg_instance *instance,
00229 const char *name);
00230
00231
00240 int ntg_instance_increment_count(ntg_instance *instance);
00241
00246 int ntg_instance_decrement_count(ntg_instance *instance);
00247
00256 int ntg_instance_get_count(ntg_instance *instance);
00257
00266 ntg_id * ntg_instance_get_class_id(ntg_instance *instance);
00267
00271 void ntg_free_instance_counts(void);
00272
00273
00277 void ntg_instance_register_namespace(ntg_instance *instance);
00278
00279
00281 ntg_instance *ntg_instance_add_attributes(ntg_instance *instance,
00282 ntg_attribute_list *attribute_list);
00283
00284 char *ntg_instance_name_from_path(const ntg_instance *instance, const ntg_path *path);
00285
00288 bool ntg_instance_is_sibling(const ntg_instance *instance,
00289 const ntg_instance *sibling);
00290
00293 ntg_path *ntg_instance_get_path(const ntg_instance *instance);
00294
00297 ntg_path *ntg_path_reverse_elements(ntg_path *path);
00298
00301 ntg_error_code ntg_instance_free(ntg_instance *instance);
00302
00303
00304 #ifdef __cplusplus
00305 }
00306 #endif
00307
00308 #endif