Skip to content
Snippets Groups Projects
Commit d7e53ebf authored by Jonathan Schöbel's avatar Jonathan Schöbel
Browse files

Validator: removed ids for attrs

Originally the ids were intended to be useful for linking different
information together internally, and for providing references
externally. However, they weren't used internally, for this, pointers
seamed to be more useful, as they also allow to directly access the data
and also have a relation defined.
Regarding reference purposes, they aren't really needed, and it is more
convenient to directly use some strings, and they aren't more
performant, as there still have to be internal checks and looking for an
int isn't more performant, then looking for a pointer.
Also, they have to be stored, so they need more memory and also some
code, to be handled.
parent 8fd59db5
No related branches found
No related tags found
No related merge requests found
......@@ -28,7 +28,7 @@ long_line_behaviour=1
long_line_column=72
[files]
current_page=35
current_page=54
FILE_NAME_0=139;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2FREADME;0;8
FILE_NAME_1=134;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2F.gitignore;0;8
FILE_NAME_2=1737;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fconfigure.ac;0;8
......@@ -64,9 +64,9 @@ FILE_NAME_31=1111;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fp
FILE_NAME_32=14059;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag.c;0;8
FILE_NAME_33=1148;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag.h;0;8
FILE_NAME_34=1124;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag_data.h;0;8
FILE_NAME_35=13076;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr.c;0;8
FILE_NAME_36=1682;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr.h;0;8
FILE_NAME_37=1111;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr_data.h;0;8
FILE_NAME_35=16395;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr.c;0;8
FILE_NAME_36=1051;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr.h;0;8
FILE_NAME_37=1413;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr_data.h;0;8
FILE_NAME_38=924;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fstatus.h;0;8
FILE_NAME_39=18;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Flog.h;0;4
FILE_NAME_40=20;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fmacro.h;0;8
......@@ -83,7 +83,7 @@ FILE_NAME_50=4221;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fp
FILE_NAME_51=994;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_text_mark.c;0;8
FILE_NAME_52=2447;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator.c;0;8
FILE_NAME_53=3880;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator_tag.c;0;8
FILE_NAME_54=29231;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator_attr.c;0;8
FILE_NAME_54=28881;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator_attr.c;0;8
FILE_NAME_55=547;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftodo.txt;0;8
FILE_NAME_56=201;YAML;0;EUTF-8;0;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2F.gitlab-ci.yml;0;4
FILE_NAME_57=71;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fgitlab-ci%2Fupload.sh.in;0;8
......
......@@ -38,11 +38,9 @@ static inline
bool
init_attrs (/*@special@*/ struct SH_Validator * validator)
/*@defines validator->attrs,
validator->attr_n,
validator->last_attr@*/
validator->attr_n@*/
/*@modifies validator->attrs@*/
/*@modifies validator->attr_n@*/
/*@modifies validator->last_attr@*/;
/*@modifies validator->attr_n@*/;
static inline
bool
......@@ -50,11 +48,9 @@ copy_attrs (/*@special@*/ struct SH_Validator * copy,
const struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines copy->attrs,
copy->attr_n,
copy->last_attr@*/
copy->attr_n@*/
/*@modifies copy->attrs@*/
/*@modifies copy->attr_n@*/
/*@modifies copy->last_attr@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/;
......@@ -86,7 +82,7 @@ find_attr_tag (const struct attr_info * attr,
/*@modifies index@*/;
static inline
Attr
bool
add_attr (struct SH_Validator * validator,
const char * attr,
/*@dependent@*/ const char * tag,
......@@ -94,39 +90,10 @@ add_attr (struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@modifies validator->attrs@*/
/*@modifies validator->attr_n@*/
/*@modifies validator->last_attr@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/;
/*@unused@*/
static inline
bool
is_attr_id (struct SH_Validator * validator, Attr id)
/*@*/;
static inline
bool
is_attr_name (struct SH_Validator * validator, const char * name)
/*@*/;
/*@unused@*/
static inline
/*@null@*/
char *
get_attr_name_by_id (struct SH_Validator * validator, Attr id,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/;
static inline
Attr
get_attr_id_by_name (struct SH_Validator * validator,
const char * name,
/*@out@*/ size_t * index)
/*@modifies index@*/;
static inline
bool
remove_attr (struct SH_Validator * validator,
......@@ -134,7 +101,6 @@ remove_attr (struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@modifies validator->attrs@*/
/*@modifies validator->attr_n@*/
/*@modifies validator->last_attr@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/;
......@@ -169,7 +135,6 @@ remove_tag_for_all_attrs (struct SH_Validator * validator,
struct SH_Status * status)
/*@modifies validator->attrs@*/
/*@modifies validator->attr_n@*/
/*@modifies validator->last_attr@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/;
......@@ -179,15 +144,12 @@ static inline
bool
init_attrs (/*@special@*/ struct SH_Validator * validator)
/*@defines validator->attrs,
validator->attr_n,
validator->last_attr@*/
validator->attr_n@*/
/*@modifies validator->attrs@*/
/*@modifies validator->attr_n@*/
/*@modifies validator->last_attr@*/
{
validator->attrs = malloc (0);
validator->attr_n = 0;
validator->last_attr = ATTR_ERR;
return TRUE;
}
......@@ -196,11 +158,9 @@ bool
copy_attr (/*@special@*/ struct attr_info * copy,
const struct attr_info * attr,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines copy->id,
copy->name,
/*@defines copy->name,
copy->tag_n,
copy->tags@*/
/*@modifies copy->id@*/
/*@modifies copy->name@*/
/*@modifies copy->tag_n@*/
/*@modifies copy->tags@*/
......@@ -227,7 +187,6 @@ copy_attr (/*@special@*/ struct attr_info * copy,
return FALSE;
}
copy->id = attr->id;
copy->name = name;
copy->tag_n = attr->tag_n;
copy->tags = tags;
......@@ -245,11 +204,9 @@ copy_attrs (/*@special@*/ struct SH_Validator * copy,
const struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines copy->attrs,
copy->attr_n,
copy->last_attr@*/
copy->attr_n@*/
/*@modifies copy->attrs@*/
/*@modifies copy->attr_n@*/
/*@modifies copy->last_attr@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
......@@ -280,7 +237,6 @@ copy_attrs (/*@special@*/ struct SH_Validator * copy,
}
copy->attr_n = validator->attr_n;
copy->last_attr = validator->last_attr;
return TRUE;
}
......@@ -392,7 +348,7 @@ find_attr_tag (const struct attr_info * attr,
}
static inline
Attr
bool
add_attr (struct SH_Validator * validator,
const char * attr,
/*@dependent@*/ const char * tag,
......@@ -400,7 +356,6 @@ add_attr (struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@modifies validator->attrs@*/
/*@modifies validator->attr_n@*/
/*@modifies validator->last_attr@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
......@@ -411,22 +366,20 @@ add_attr (struct SH_Validator * validator,
/* abort on overflow:
* - no unused Attr or
* - no unused index */
if ((validator->last_attr == ATTR_MAX)
|| (validator->attr_n == SIZE_MAX)
if ((validator->attr_n == SIZE_MAX)
|| ((validator->attr_n + 1)
> (SIZE_MAX / sizeof (struct attr_info))))
{
set_status (status, E_DOMAIN, 2,
"maximum number of attributes reached");
return ATTR_ERR;
return FALSE;
}
attr_data.id = NEXT_ATTR (validator->last_attr);
attr_data.name = strdup (attr);
if (NULL == attr_data.name)
{
set_status (status, E_ALLOC, 3, "strdup failed");
return ATTR_ERR;
return FALSE;
}
attr_data.tags = malloc (sizeof (struct attr_tag_info));
......@@ -434,7 +387,7 @@ add_attr (struct SH_Validator * validator,
{
set_status (status, E_ALLOC, 3, "malloc failed");
free (attr_data.name);
return ATTR_ERR;
return FALSE;
}
attr_data.tags[0].name = tag;
......@@ -457,98 +410,22 @@ add_attr (struct SH_Validator * validator,
validator->attrs = (void *) 0x12345;
#endif
free_attr (attr_data);
return ATTR_ERR;
return FALSE;
}
validator->attrs = new_attrs;
for (size_t index2 = validator->attr_n; index2 > index; index2--)
for (size_t i = validator->attr_n; i > index; i--)
{
validator->attrs[index2] = validator->attrs[index2-1];
validator->attrs[i] = validator->attrs[i-1];
}
/* commit changes */
validator->attrs[index] = attr_data;
validator->attr_n++;
validator->last_attr = attr_data.id;
set_success (status);
return attr_data.id;
}
/*@unused@*/
static inline
bool
is_attr_id (struct SH_Validator * validator, Attr id)
/*@*/
{
size_t index;
for (index = 0; index < validator->attr_n; index++)
{
if (id == validator->attrs[index].id)
{
return TRUE;
}
}
return FALSE;
}
static inline
bool
is_attr_name (struct SH_Validator * validator, const char * name)
/*@*/
{
size_t index;
return find_attr (validator, name, &index);
}
/*@unused@*/
static inline
/*@null@*/
char *
get_attr_name_by_id (struct SH_Validator * validator, Attr id,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
{
size_t index;
char * name;
for (index = 0; index < validator->attr_n; index++)
{
if (id == validator->attrs[index].id)
{
name = strdup (validator->attrs[index].name);
if (name == NULL)
{
set_status (status, E_ALLOC, 3,
"strdup failed");
return NULL;
}
return name;
}
}
return NULL;
}
static inline
Attr
get_attr_id_by_name (struct SH_Validator * validator,
const char * name,
/*@out@*/ size_t * index)
/*@modifies index@*/
{
if (!find_attr (validator, name, index))
{
return ATTR_ERR;
}
return validator->attrs[*index].id;
return TRUE;
}
static inline
......@@ -558,7 +435,6 @@ remove_attr (struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@modifies validator->attrs@*/
/*@modifies validator->attr_n@*/
/*@modifies validator->last_attr@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
......@@ -693,7 +569,6 @@ remove_tag_for_all_attrs (struct SH_Validator * validator,
struct SH_Status * status)
/*@modifies validator->attrs@*/
/*@modifies validator->attr_n@*/
/*@modifies validator->last_attr@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
......@@ -761,7 +636,7 @@ SH_Validator_check_attr (struct SH_Validator * validator,
return TRUE;
}
Attr
bool
SH_Validator_register_attr (struct SH_Validator * validator,
const char * tag,
const char * attr,
......@@ -769,26 +644,23 @@ SH_Validator_register_attr (struct SH_Validator * validator,
struct SH_Status * status)
/*@modifies validator->attrs@*/
/*@modifies validator->attr_n@*/
/*@modifies validator->last_attr@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
{
Attr attr_id;
/* note, that index is used for three different arrays */
size_t index;
if ((!find_tag (validator, tag, &index))
&& (!add_tag (validator, tag, index, status)))
{
return ATTR_ERR;
return FALSE;
}
tag = validator->tags[index].name;
/* attr already registered */
attr_id = get_attr_id_by_name (validator, attr, &index);
if (attr_id != ATTR_ERR)
if (find_attr (validator, attr, &index))
{
struct attr_info * attr;
attr = &validator->attrs[index];
......@@ -796,11 +668,11 @@ SH_Validator_register_attr (struct SH_Validator * validator,
if ((!find_attr_tag (attr, tag, &index))
&& (!attr_add_tag (attr, index, tag, status)))
{
return ATTR_ERR;
return FALSE;
}
set_success (status);
return attr_id;
return TRUE;
}
return add_attr (validator, attr, tag, index, status);
......@@ -814,7 +686,6 @@ SH_Validator_deregister_attr (struct SH_Validator * validator,
struct SH_Status * status)
/*@modifies validator->attr_n@*/
/*@modifies validator->attrs@*/
/*@modifies validator->last_attr@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
......@@ -836,7 +707,7 @@ SH_Validator_deregister_attr (struct SH_Validator * validator,
{
/* TODO: define whether this is an error */
set_status (status, E_VALUE, 3, "no such tag");
return ATTR_ERR;
return FALSE;
}
tag = validator->tags[index].name;
......@@ -866,7 +737,7 @@ SH_Validator_deregister_attr (struct SH_Validator * validator,
{
set_status (status, E_VALUE, 2,
"no such tag");
return ATTR_ERR;
return FALSE;
}
return remove_attr (validator, index, status);
......@@ -876,7 +747,7 @@ SH_Validator_deregister_attr (struct SH_Validator * validator,
{
/* TODO: define whether this is an error */
set_status (status, E_VALUE, 3, "no such tag");
return ATTR_ERR;
return FALSE;
}
tag = validator->tags[index].name;
......
......@@ -35,13 +35,7 @@
#include "status.h"
typedef unsigned int Attr;
#define ATTR_ERR (Attr) 0
#define ATTR_MIN (Attr) 1
#define ATTR_MAX (Attr) SIZE_MAX
Attr
bool
SH_Validator_register_attr (SH_Validator * validator,
const char * tag,
const char * attr,
......
......@@ -36,17 +36,13 @@ struct attr_tag_info
struct attr_info
{
Attr id;
/*@only@*/ char * name;
size_t tag_n;
struct attr_tag_info * tags;
};
#define NEXT_ATTR(attr) (attr + 1)
#define ATTR_DATA \
/*@only@*/ struct attr_info * attrs; \
size_t attr_n; \
Attr last_attr; \
#endif /* SEFHT_VALIDATOR_ATTR_DATA_H */
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment