glsl: Rename sl_pp_context_add_str to sl_pp_context_add_unique_str.

Return the same offset for same strings. Allows to compare strings
by comparing their's offsets.
This commit is contained in:
Michal Krol 2009-06-21 17:03:15 +02:00
parent fd991d845a
commit 5e8e3cddae
4 changed files with 23 additions and 7 deletions

View File

@ -43,14 +43,28 @@ sl_pp_context_destroy(struct sl_pp_context *context)
}
int
sl_pp_context_add_str(struct sl_pp_context *context,
const char *str)
sl_pp_context_add_unique_str(struct sl_pp_context *context,
const char *str)
{
unsigned int size;
unsigned int offset;
unsigned int offset = 0;
size = strlen(str) + 1;
/* Find out if this is a unique string. */
while (offset < context->cstr_pool_len) {
const char *str2;
unsigned int size2;
str2 = &context->cstr_pool[offset];
size2 = strlen(str2) + 1;
if (size == size2 && !memcmp(str, str2, size - 1)) {
return offset;
}
offset += size2;
}
if (context->cstr_pool_len + size > context->cstr_pool_max) {
context->cstr_pool_max = (context->cstr_pool_len + size + 0xffff) & ~0xffff;
context->cstr_pool = realloc(context->cstr_pool, context->cstr_pool_max);

View File

@ -46,8 +46,8 @@ void
sl_pp_context_destroy(struct sl_pp_context *context);
int
sl_pp_context_add_str(struct sl_pp_context *context,
const char *str);
sl_pp_context_add_unique_str(struct sl_pp_context *context,
const char *str);
const char *
sl_pp_context_cstr(const struct sl_pp_context *context,

View File

@ -53,7 +53,7 @@ _tokenise_identifier(struct sl_pp_context *context,
}
identifier[i++] = '\0';
info->data.identifier = sl_pp_context_add_str(context, identifier);
info->data.identifier = sl_pp_context_add_unique_str(context, identifier);
if (info->data.identifier == -1) {
return -1;
}
@ -91,7 +91,7 @@ _tokenise_number(struct sl_pp_context *context,
}
number[i++] = '\0';
info->data.number = sl_pp_context_add_str(context, number);
info->data.number = sl_pp_context_add_unique_str(context, number);
if (info->data.number == -1) {
return -1;
}

View File

@ -28,6 +28,8 @@
#ifndef SL_PP_TOKEN_H
#define SL_PP_TOKEN_H
#include "sl_pp_context.h"
enum sl_pp_token {
SL_PP_WHITESPACE,