projects
/
lttv.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
lib list
[lttv.git]
/
ltt
/
branches
/
poly
/
lttv
/
lttv
/
attribute.c
diff --git
a/ltt/branches/poly/lttv/lttv/attribute.c
b/ltt/branches/poly/lttv/lttv/attribute.c
index 8088f3ba0901a53a7617853390a857d67ad23f10..b4402b25921f5073d4a74d6027eeea85dc45242e 100644
(file)
--- a/
ltt/branches/poly/lttv/lttv/attribute.c
+++ b/
ltt/branches/poly/lttv/lttv/attribute.c
@@
-16,8
+16,14
@@
* MA 02111-1307, USA.
*/
* MA 02111-1307, USA.
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
#include <lttv/attribute.h>
#include <ltt/ltt.h>
#include <lttv/attribute.h>
#include <ltt/ltt.h>
+#include <ltt/compiler.h>
typedef union _AttributeValue {
int dv_int;
typedef union _AttributeValue {
int dv_int;
@@
-40,7
+46,8
@@
typedef struct _Attribute {
} Attribute;
} Attribute;
-LttvAttributeValue address_of_value(LttvAttributeType t, AttributeValue *v)
+static __inline__ LttvAttributeValue address_of_value(LttvAttributeType t,
+ AttributeValue *v)
{
LttvAttributeValue va;
{
LttvAttributeValue va;
@@
-55,6
+62,7
@@
LttvAttributeValue address_of_value(LttvAttributeType t, AttributeValue *v)
case LTTV_POINTER: va.v_pointer = &v->dv_pointer; break;
case LTTV_STRING: va.v_string = &v->dv_string; break;
case LTTV_GOBJECT: va.v_gobject = &v->dv_gobject; break;
case LTTV_POINTER: va.v_pointer = &v->dv_pointer; break;
case LTTV_STRING: va.v_string = &v->dv_string; break;
case LTTV_GOBJECT: va.v_gobject = &v->dv_gobject; break;
+ case LTTV_NONE: break;
}
return va;
}
}
return va;
}
@@
-75,6
+83,7
@@
AttributeValue init_value(LttvAttributeType t)
case LTTV_POINTER: v.dv_pointer = NULL; break;
case LTTV_STRING: v.dv_string = NULL; break;
case LTTV_GOBJECT: v.dv_gobject = NULL; break;
case LTTV_POINTER: v.dv_pointer = NULL; break;
case LTTV_STRING: v.dv_string = NULL; break;
case LTTV_GOBJECT: v.dv_gobject = NULL; break;
+ case LTTV_NONE: break;
}
return v;
}
}
return v;
}
@@
-161,6
+170,10
@@
lttv_attribute_remove(LttvAttribute *self, unsigned i)
a = &g_array_index(self->attributes, Attribute, i);
a = &g_array_index(self->attributes, Attribute, i);
+ /* If the element is a gobject, unreference it. */
+ if(a->type == LTTV_GOBJECT && a->value.dv_gobject != NULL)
+ g_object_unref(a->value.dv_gobject);
+
/* Remove the array element and its entry in the name index */
g_hash_table_remove(self->names, GUINT_TO_POINTER(a->name));
/* Remove the array element and its entry in the name index */
g_hash_table_remove(self->names, GUINT_TO_POINTER(a->name));
@@
-169,7
+182,7
@@
lttv_attribute_remove(LttvAttribute *self, unsigned i)
/* The element used to replace the removed element has its index entry
all wrong now. Reinsert it with its new position. */
/* The element used to replace the removed element has its index entry
all wrong now. Reinsert it with its new position. */
- if(
self->attributes->len != i
){
+ if(
likely(self->attributes->len != i)
){
g_hash_table_remove(self->names, GUINT_TO_POINTER(a->name));
g_hash_table_insert(self->names, GUINT_TO_POINTER(a->name), GUINT_TO_POINTER(i + 1));
}
g_hash_table_remove(self->names, GUINT_TO_POINTER(a->name));
g_hash_table_insert(self->names, GUINT_TO_POINTER(a->name), GUINT_TO_POINTER(i + 1));
}
@@
-181,7
+194,7
@@
lttv_attribute_remove_by_name(LttvAttribute *self, LttvAttributeName name)
unsigned i;
i = (unsigned)g_hash_table_lookup(self->names, GUINT_TO_POINTER(name));
unsigned i;
i = (unsigned)g_hash_table_lookup(self->names, GUINT_TO_POINTER(name));
- if(
i == 0
) g_error("remove by name non existent attribute");
+ if(
unlikely(i == 0)
) g_error("remove by name non existent attribute");
lttv_attribute_remove(self, i - 1);
}
lttv_attribute_remove(self, i - 1);
}
@@
-201,9
+214,9
@@
lttv_attribute_find_subdir(LttvAttribute *self, LttvAttributeName name)
LttvAttribute *new;
i = (unsigned)g_hash_table_lookup(self->names, GUINT_TO_POINTER(name));
LttvAttribute *new;
i = (unsigned)g_hash_table_lookup(self->names, GUINT_TO_POINTER(name));
- if(
i != 0
) {
+ if(
likely(i != 0)
) {
a = g_array_index(self->attributes, Attribute, i - 1);
a = g_array_index(self->attributes, Attribute, i - 1);
- if(
a.type == LTTV_GOBJECT && LTTV_IS_IATTRIBUTE(a.value.dv_gobject
)) {
+ if(
likely(a.type == LTTV_GOBJECT && LTTV_IS_IATTRIBUTE(a.value.dv_gobject)
)) {
return LTTV_ATTRIBUTE(a.value.dv_gobject);
}
else return NULL;
return LTTV_ATTRIBUTE(a.value.dv_gobject);
}
else return NULL;
@@
-222,9
+235,9
@@
lttv_attribute_find(LttvAttribute *self, LttvAttributeName name,
Attribute *a;
i = (unsigned)g_hash_table_lookup(self->names, GUINT_TO_POINTER(name));
Attribute *a;
i = (unsigned)g_hash_table_lookup(self->names, GUINT_TO_POINTER(name));
- if(
i != 0
) {
+ if(
likely(i != 0)
) {
a = &g_array_index(self->attributes, Attribute, i - 1);
a = &g_array_index(self->attributes, Attribute, i - 1);
- if(
a->type != t
) return FALSE;
+ if(
unlikely(a->type != t)
) return FALSE;
*v = address_of_value(t, &(a->value));
return TRUE;
}
*v = address_of_value(t, &(a->value));
return TRUE;
}
@@
-234,7
+247,7
@@
lttv_attribute_find(LttvAttribute *self, LttvAttributeName name,
}
}
-void lttv_attribute_recursive_free(LttvAttribute *self)
+
/*
void lttv_attribute_recursive_free(LttvAttribute *self)
{
int i, nb;
{
int i, nb;
@@
-249,7
+262,7
@@
void lttv_attribute_recursive_free(LttvAttribute *self)
}
}
g_object_unref(self);
}
}
g_object_unref(self);
-}
+}
*/
void lttv_attribute_recursive_add(LttvAttribute *dest, LttvAttribute *src)
void lttv_attribute_recursive_add(LttvAttribute *dest, LttvAttribute *src)
@@
-272,7
+285,7
@@
void lttv_attribute_recursive_add(LttvAttribute *dest, LttvAttribute *src)
else {
g_assert(lttv_attribute_find(dest, a->name, a->type, &value));
switch(a->type) {
else {
g_assert(lttv_attribute_find(dest, a->name, a->type, &value));
switch(a->type) {
- case LTTV_INT:
+
case LTTV_INT:
*value.v_int += a->value.dv_int;
break;
case LTTV_UINT:
*value.v_int += a->value.dv_int;
break;
case LTTV_UINT:
@@
-356,7
+369,7
@@
lttv_attribute_write_xml(LttvAttribute *self, FILE *fp, int pos, int indent)
fprintf(fp, "TYPE=DOUBLE VALUE=%f/>\n", a->value.dv_double);
break;
case LTTV_TIME:
fprintf(fp, "TYPE=DOUBLE VALUE=%f/>\n", a->value.dv_double);
break;
case LTTV_TIME:
- fprintf(fp, "TYPE=TIME SEC=%
u NSEC=%
u/>\n", a->value.dv_time.tv_sec,
+ fprintf(fp, "TYPE=TIME SEC=%
lu NSEC=%l
u/>\n", a->value.dv_time.tv_sec,
a->value.dv_time.tv_nsec);
break;
case LTTV_POINTER:
a->value.dv_time.tv_nsec);
break;
case LTTV_POINTER:
@@
-382,9
+395,7
@@
lttv_attribute_write_xml(LttvAttribute *self, FILE *fp, int pos, int indent)
void
lttv_attribute_read_xml(LttvAttribute *self, FILE *fp)
{
void
lttv_attribute_read_xml(LttvAttribute *self, FILE *fp)
{
- int i, nb, res;
-
- Attribute *a;
+ int res;
char buffer[256], type[10];
char buffer[256], type[10];
@@
-433,12
+444,12
@@
lttv_attribute_read_xml(LttvAttribute *self, FILE *fp)
}
else if(strcmp(type, "DOUBLE") == 0) {
value = lttv_attribute_add(self, name, LTTV_DOUBLE);
}
else if(strcmp(type, "DOUBLE") == 0) {
value = lttv_attribute_add(self, name, LTTV_DOUBLE);
- res = fscanf(fp, " VALUE=%f/>", value.v_double);
+ res = fscanf(fp, " VALUE=%
l
f/>", value.v_double);
g_assert(res == 1);
}
else if(strcmp(type, "TIME") == 0) {
value = lttv_attribute_add(self, name, LTTV_TIME);
g_assert(res == 1);
}
else if(strcmp(type, "TIME") == 0) {
value = lttv_attribute_add(self, name, LTTV_TIME);
- res = fscanf(fp, " SEC=%
u NSEC=%
u/>", &(value.v_time->tv_sec),
+ res = fscanf(fp, " SEC=%
lu NSEC=%l
u/>", &(value.v_time->tv_sec),
&(value.v_time->tv_nsec));
g_assert(res == 2);
}
&(value.v_time->tv_nsec));
g_assert(res == 2);
}
@@
-506,14
+517,15
@@
attribute_interface_init (gpointer g_iface, gpointer iface_data)
klass->find_subdir = (LttvIAttribute* (*) (LttvIAttribute *self,
LttvAttributeName name)) lttv_attribute_find_subdir;
klass->find_subdir = (LttvIAttribute* (*) (LttvIAttribute *self,
LttvAttributeName name)) lttv_attribute_find_subdir;
-}
+}
static void
attribute_instance_init (GTypeInstance *instance, gpointer g_class)
{
LttvAttribute *self = (LttvAttribute *)instance;
static void
attribute_instance_init (GTypeInstance *instance, gpointer g_class)
{
LttvAttribute *self = (LttvAttribute *)instance;
- self->names = g_hash_table_new(g_direct_hash, g_direct_equal);
+ self->names = g_hash_table_new(g_direct_hash,
+ g_direct_equal);
self->attributes = g_array_new(FALSE, FALSE, sizeof(Attribute));
}
self->attributes = g_array_new(FALSE, FALSE, sizeof(Attribute));
}
@@
-521,11
+533,15
@@
attribute_instance_init (GTypeInstance *instance, gpointer g_class)
static void
attribute_finalize (LttvAttribute *self)
{
static void
attribute_finalize (LttvAttribute *self)
{
- g
_hash_table_destroy(self->names)
;
+ g
uint i
;
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "attribute_finalize()");
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "attribute_finalize()");
+
+ for(i=0;i<self->attributes->len;i++) {
+ lttv_attribute_remove(self, i);
+ }
+
+ g_hash_table_destroy(self->names);
g_array_free(self->attributes, TRUE);
g_array_free(self->attributes, TRUE);
- G_OBJECT_CLASS(g_type_class_peek_parent(
- g_type_class_peek(LTTV_ATTRIBUTE_TYPE)))->finalize(G_OBJECT(self));
}
}
@@
-551,7
+567,8
@@
lttv_attribute_get_type (void)
NULL, /* class_data */
sizeof (LttvAttribute),
0, /* n_preallocs */
NULL, /* class_data */
sizeof (LttvAttribute),
0, /* n_preallocs */
- (GInstanceInitFunc) attribute_instance_init /* instance_init */
+ (GInstanceInitFunc) attribute_instance_init, /* instance_init */
+ NULL /* value handling */
};
static const GInterfaceInfo iattribute_info = {
};
static const GInterfaceInfo iattribute_info = {
This page took
0.024978 seconds
and
4
git commands to generate.