mirror of
https://github.com/cc65/cc65.git
synced 2025-02-27 14:29:52 +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:
parent
84d90343ea
commit
d06625075d
@ -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;
|
||||
|
||||
|
@ -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 */
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user