1
0
mirror of https://github.com/cc65/cc65.git synced 2025-02-26 23:30:03 +00:00

Removed the flags and optimized the Attr structure.

git-svn-id: svn://svn.cc65.org/cc65/trunk@5596 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz 2012-03-10 22:10:45 +00:00
parent 84d90343ea
commit d06625075d
2 changed files with 12 additions and 37 deletions

View File

@ -53,33 +53,20 @@
static int IsNumber (const char* Value)
/* Check if Value is an integer number */
{
if (*Value == '-' || *Value == '+') {
++Value;
}
while (IsDigit (*Value)) {
++Value;
}
return (*Value == '\0');
}
Attr* NewAttr (const char* Name, const char* Value)
/* Create a new attribute */
{
/* Determine the length of Value */
unsigned Len = strlen (Value);
/* Determine the string lengths */
unsigned NameLen = strlen (Name);
unsigned ValueLen = strlen (Value);
/* Allocate memory */
Attr* A = xmalloc (sizeof (Attr) + Len);
Attr* A = xmalloc (sizeof (Attr) + ValueLen + NameLen + 1);
/* Initialize the fields */
A->Flags = IsNumber (Value)? afInt : afNone;
A->Name = xstrdup (Name);
memcpy (A->Value, Value, Len + 1);
A->Name = A->Value + ValueLen + 1;
memcpy (A->Value, Value, ValueLen + 1);
memcpy (A->Name, Name, NameLen + 1);
/* Return the new struct */
return A;
@ -90,11 +77,7 @@ Attr* NewAttr (const char* Name, const char* Value)
void FreeAttr (Attr* A)
/* Free an attribute structure */
{
/* Allow NULL pointers */
if (A) {
xfree (A->Name);
xfree (A);
}
xfree (A);
}
@ -309,7 +292,7 @@ Collection* ParseAttrList (const char* List, const char** NameList, unsigned Nam
void FreeAttrList (Collection* C)
/* Free a list of attributes */
/* Free a list of attributes */
{
unsigned I;

View File

@ -49,19 +49,11 @@
/* Attribute flags */
enum AttrFlags {
afNone,
afInt, /* Integer number */
};
typedef enum AttrFlags AttrFlags;
/* */
/* Attribute structure */
typedef struct Attr Attr;
struct Attr {
AttrFlags Flags; /* Attribute flags */
char* Name; /* Attribute name */
char Value[1]; /* Attribute value */
char* Name; /* Attribute name - points into Value */
char Value[1]; /* Attribute value followed by Name */
};