You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.9 KiB
85 lines
2.9 KiB
4 years ago
|
/*****
|
||
|
* Abstract:
|
||
|
*
|
||
|
* The internal structures that represent an attribute list. This is made
|
||
|
* available for slpd to speed its access to values for predicate evaluation.
|
||
|
****/
|
||
|
|
||
|
/******************************************************************************
|
||
|
*
|
||
|
* Individual values
|
||
|
*
|
||
|
* What is a value?
|
||
|
*
|
||
|
* In SLP an individual attribute can be associated with a list of values. A
|
||
|
* value is the data associated with a tag. Depending on the type of
|
||
|
* attribute, there can be zero, one, or many values associated with a single
|
||
|
* tag.
|
||
|
*****************************************************************************/
|
||
|
|
||
|
typedef struct xx_value_t
|
||
|
{
|
||
|
struct xx_value_t *next;
|
||
|
int escaped_len;
|
||
|
int unescaped_len;
|
||
|
union
|
||
|
{
|
||
|
SLPBoolean va_bool;
|
||
|
int va_int;
|
||
|
char *va_str; /* This is used for keyword, string, and opaque. */
|
||
|
} data; /* Stores the value of the variable. Note, any string must be copied into the struct. */
|
||
|
|
||
|
/* Memory handling */
|
||
|
struct xx_value_t *next_chunk; /* The next chunk of allocated memory in the value list. */
|
||
|
struct xx_value_t *last_value_in_chunk; /* The last value in the chunk. Only set by the chunk head. */
|
||
|
} value_t;
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
*
|
||
|
* Individual attributes (vars)
|
||
|
*
|
||
|
* What is a var?
|
||
|
*
|
||
|
* A var is a variable tag that is associated with a list of values. Zero or
|
||
|
* more vars are kept in a single SLPAttributes object. Each value stored in
|
||
|
* a var is kept in a value struct.
|
||
|
*****************************************************************************/
|
||
|
|
||
|
/* An individual attribute in the struct. */
|
||
|
typedef struct xx_var_t
|
||
|
{
|
||
|
struct xx_var_t *next; /* Pointer to the next variable. */
|
||
|
SLPType type; /* The type of this variable. */
|
||
|
const char *tag; /* The name of this variable. */
|
||
|
unsigned int tag_len; /* The length of the tag. */
|
||
|
value_t *list; /* The list of values. */
|
||
|
int list_size; /* The number of values in the list. */
|
||
|
SLPBoolean modified; /* Flag. Set to be true if the attribute should be included in the next freshen. */
|
||
|
} var_t;
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
*
|
||
|
* All the attributes.
|
||
|
*
|
||
|
*****************************************************************************/
|
||
|
|
||
|
/* The opaque struct representing a SLPAttributes handle.
|
||
|
*/
|
||
|
struct xx_SLPAttributes
|
||
|
{
|
||
|
SLPBoolean strict; /* Are we using strict typing? */
|
||
|
char *lang; /* Language. */
|
||
|
var_t *attrs; /* List of vars to be sent. */
|
||
|
int attr_count; /* The number of attributes */
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/* Finds a variable by its tag. */
|
||
|
var_t *attr_val_find_str(struct xx_SLPAttributes *slp_attr, const char *tag, int tag_len);
|
||
|
|
||
|
/* Finds the type of an attribute. */
|
||
|
SLPError SLPAttrGetType_len(SLPAttributes attr_h, const char *tag, int tag_len, SLPType *type);
|