forked from enlightenment/enventor
parser - use inarray instead of inlist.
Since we know the item count is constant, inarray is better than inlist.
This commit is contained in:
parent
2b14f9a6fc
commit
4e015e7678
|
@ -3,14 +3,13 @@
|
|||
|
||||
struct parser_s
|
||||
{
|
||||
Eina_Inlist *attrs;
|
||||
Eina_Inarray *attrs;
|
||||
Ecore_Thread *thread;
|
||||
Ecore_Thread *init_thread;
|
||||
};
|
||||
|
||||
typedef struct parser_attr_s
|
||||
{
|
||||
EINA_INLIST;
|
||||
Eina_Stringshare *keyword;
|
||||
attr_value value;
|
||||
Eina_Bool instring : 1;
|
||||
|
@ -30,7 +29,7 @@ typedef struct cur_name_thread_data_s
|
|||
|
||||
typedef struct type_init_thread_data_s
|
||||
{
|
||||
Eina_Inlist *attrs;
|
||||
Eina_Inarray *attrs;
|
||||
parser_data *pd;
|
||||
} type_init_td;
|
||||
|
||||
|
@ -88,7 +87,7 @@ parser_attribute_get(parser_data *pd, const char *text, const char *cur)
|
|||
if (!p) return NULL;
|
||||
if (p != text) p++;
|
||||
|
||||
EINA_INLIST_FOREACH(pd->attrs, attr)
|
||||
EINA_INARRAY_FOREACH(pd->attrs, attr)
|
||||
{
|
||||
if ((instring == attr->instring) && strstr(p, attr->keyword))
|
||||
return &attr->value;
|
||||
|
@ -295,6 +294,10 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
type_init_td *td = data;
|
||||
parser_attr *attr;
|
||||
|
||||
td->attrs = eina_inarray_new(sizeof(parser_attr), 24);
|
||||
eina_inarray_step_set(td->attrs, sizeof(Eina_Inarray), sizeof(parser_attr),
|
||||
4);
|
||||
|
||||
//FIXME: construct from the configuration file.
|
||||
|
||||
//Type: Constant
|
||||
|
@ -316,7 +319,7 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
attr->keyword = eina_stringshare_add("type:");
|
||||
attr->value.strs = types;
|
||||
attr->value.type = ATTR_VALUE_CONSTANT;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
Eina_Array *comps = eina_array_new(4);
|
||||
eina_array_push(comps, eina_stringshare_add("RAW"));
|
||||
|
@ -328,7 +331,7 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
attr->keyword = eina_stringshare_add("image:");
|
||||
attr->value.strs = comps;
|
||||
attr->value.type = ATTR_VALUE_CONSTANT;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
Eina_Array *trans = eina_array_new(10);
|
||||
eina_array_push(trans, eina_stringshare_add("LINEAR"));
|
||||
|
@ -346,7 +349,7 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
attr->keyword = eina_stringshare_add("transition:");
|
||||
attr->value.strs = trans;
|
||||
attr->value.type = ATTR_VALUE_CONSTANT;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
Eina_Array *aspect = eina_array_new(4);
|
||||
eina_array_push(aspect, eina_stringshare_add("NONE"));
|
||||
|
@ -358,7 +361,7 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
attr->keyword = eina_stringshare_add("aspect_preference:");
|
||||
attr->value.strs = aspect;
|
||||
attr->value.type = ATTR_VALUE_CONSTANT;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
Eina_Array *effect = eina_array_new(11);
|
||||
eina_array_push(effect, eina_stringshare_add("NONE"));
|
||||
|
@ -377,7 +380,7 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
attr->keyword = eina_stringshare_add("effect:");
|
||||
attr->value.strs = effect;
|
||||
attr->value.type = ATTR_VALUE_CONSTANT;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
Eina_Array *action = eina_array_new(23);
|
||||
eina_array_push(action, eina_stringshare_add("NONE"));
|
||||
|
@ -408,7 +411,7 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
attr->keyword = eina_stringshare_add("action:");
|
||||
attr->value.strs = action;
|
||||
attr->value.type = ATTR_VALUE_CONSTANT;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
//Type: Integer
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
|
@ -416,49 +419,49 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
attr->value.min = 0;
|
||||
attr->value.max = 255;
|
||||
attr->value.type = ATTR_VALUE_INTEGER;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
attr->keyword = eina_stringshare_add("scale:");
|
||||
attr->value.min = 0;
|
||||
attr->value.max = 1;
|
||||
attr->value.type = ATTR_VALUE_INTEGER;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
attr->keyword = eina_stringshare_add("fixed:");
|
||||
attr->value.min = 0;
|
||||
attr->value.max = 1;
|
||||
attr->value.type = ATTR_VALUE_INTEGER;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
attr->keyword = eina_stringshare_add("size:");
|
||||
attr->value.min = 1;
|
||||
attr->value.max = 255;
|
||||
attr->value.type = ATTR_VALUE_INTEGER;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
attr->keyword = eina_stringshare_add("min:");
|
||||
attr->value.min = 0;
|
||||
attr->value.max = 1000;
|
||||
attr->value.type = ATTR_VALUE_INTEGER;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
attr->keyword = eina_stringshare_add("max:");
|
||||
attr->value.min = 0;
|
||||
attr->value.max = 1000;
|
||||
attr->value.type = ATTR_VALUE_INTEGER;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
attr->keyword = eina_stringshare_add("mouse_events:");
|
||||
attr->value.min = 0;
|
||||
attr->value.max = 1000;
|
||||
attr->value.type = ATTR_VALUE_INTEGER;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
//Type: Float
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
|
@ -466,40 +469,40 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
attr->value.min = 0.0;
|
||||
attr->value.max = 1;
|
||||
attr->value.type = ATTR_VALUE_FLOAT;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
attr->keyword = eina_stringshare_add("aspect:");
|
||||
attr->value.min = 0.0;
|
||||
attr->value.max = 1.0;
|
||||
attr->value.type = ATTR_VALUE_FLOAT;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
attr->keyword = eina_stringshare_add("align");
|
||||
attr->value.min = 0.0;
|
||||
attr->value.max = 1.0;
|
||||
attr->value.type = ATTR_VALUE_FLOAT;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
//Type: Part
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
attr->keyword = eina_stringshare_add("target:");
|
||||
attr->instring = EINA_TRUE;
|
||||
attr->value.type = ATTR_VALUE_PART;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
attr->keyword = eina_stringshare_add("to:");
|
||||
attr->instring = EINA_TRUE;
|
||||
attr->value.type = ATTR_VALUE_PART;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
attr->keyword = eina_stringshare_add("source:");
|
||||
attr->instring = EINA_TRUE;
|
||||
attr->value.type = ATTR_VALUE_PART;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
//Type: State
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
|
@ -507,33 +510,33 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
attr->instring = EINA_TRUE;
|
||||
attr->value.type = ATTR_VALUE_STATE;
|
||||
attr->value.program = EINA_TRUE;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
attr->keyword = eina_stringshare_add("inherit:");
|
||||
attr->instring = EINA_TRUE;
|
||||
attr->value.type = ATTR_VALUE_STATE;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
//Type: Image
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
attr->keyword = eina_stringshare_add("normal:");
|
||||
attr->instring = EINA_TRUE;
|
||||
attr->value.type = ATTR_VALUE_IMAGE;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
attr->keyword = eina_stringshare_add("tween:");
|
||||
attr->instring = EINA_TRUE;
|
||||
attr->value.type = ATTR_VALUE_IMAGE;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
|
||||
//Type: Program
|
||||
attr = calloc(1, sizeof(parser_attr));
|
||||
attr->keyword = eina_stringshare_add("after:");
|
||||
attr->instring = EINA_TRUE;
|
||||
attr->value.type = ATTR_VALUE_PROGRAM;
|
||||
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
|
||||
eina_inarray_push(td->attrs, attr);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -869,11 +872,8 @@ parser_term(parser_data *pd)
|
|||
parser_attr *attr;
|
||||
Eina_Stringshare *str;
|
||||
|
||||
while(pd->attrs)
|
||||
EINA_INARRAY_FOREACH(pd->attrs, attr)
|
||||
{
|
||||
attr = EINA_INLIST_CONTAINER_GET(pd->attrs, parser_attr);
|
||||
pd->attrs = eina_inlist_remove(pd->attrs, pd->attrs);
|
||||
|
||||
eina_stringshare_del(attr->keyword);
|
||||
|
||||
if (attr->value.strs)
|
||||
|
@ -882,8 +882,9 @@ parser_term(parser_data *pd)
|
|||
eina_stringshare_del(eina_array_pop(attr->value.strs));
|
||||
eina_array_free(attr->value.strs);
|
||||
}
|
||||
free(attr);
|
||||
}
|
||||
|
||||
eina_inarray_free(pd->attrs);
|
||||
|
||||
free(pd);
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ typedef enum attr_value_type
|
|||
|
||||
struct attr_value_s
|
||||
{
|
||||
Eina_List *strs;
|
||||
Eina_Array *strs;
|
||||
float min;
|
||||
float max;
|
||||
attr_value_type type;
|
||||
|
|
Loading…
Reference in New Issue