From 0425aadc78680e53000fd0108b540d6eca048516 Mon Sep 17 00:00:00 2001 From: gmcdonald Date: Sat, 13 Feb 2010 01:32:03 +0000 Subject: Moving axis svn, part of TLP move INFRA-2441 git-svn-id: http://svn.apache.org/repos/asf/axis/axis2/c/core/trunk@909681 13f79535-47bb-0310-9956-ffa450edef68 --- guththila/src/guththila_token.c | 221 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 guththila/src/guththila_token.c (limited to 'guththila/src/guththila_token.c') diff --git a/guththila/src/guththila_token.c b/guththila/src/guththila_token.c new file mode 100644 index 0000000..6272850 --- /dev/null +++ b/guththila/src/guththila_token.c @@ -0,0 +1,221 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#define TOK_LIST_FREE(tok_list) \ + (if (tok_list) { AXIS2_FREE(tok_list)} ) + +#define TOK_LIST_SIZE(tok_list) (tok_list->size) + +int GUTHTHILA_CALL +guththila_tok_list_grow( + guththila_tok_list_t * tok_list, + const axutil_env_t * env) +{ + int i = 0; + + if(tok_list->cur_list < tok_list->no_list - 1) + { + int cur = ++tok_list->cur_list; + int cur_cap = tok_list->capacity[cur - 1] * 2; + guththila_token_t *list = (guththila_token_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_token_t) * cur_cap); + for(i = 0; i < cur_cap; ++i) + { + guththila_stack_push(&tok_list->fr_stack, &list[i], env); + } + tok_list->capacity[cur] = cur_cap; + tok_list->list[cur] = list; + return GUTHTHILA_SUCCESS; + } + else + { + guththila_token_t ** list = NULL; + int *capacity = NULL; + list = (guththila_token_t **)AXIS2_MALLOC(env->allocator, sizeof(guththila_token_t *) + * tok_list->no_list * 2); + capacity = (int *)AXIS2_MALLOC(env->allocator, sizeof(int) * tok_list->no_list * 2); + if(list) + { + int cur_list = tok_list->cur_list; + for(i = 0; i <= cur_list; ++i) + { + list[i] = tok_list->list[i]; + capacity[i] = tok_list->capacity[i]; + } + tok_list->no_list = tok_list->no_list * 2; + AXIS2_FREE(env->allocator, tok_list->list); + tok_list->list = list; + AXIS2_FREE(env->allocator, tok_list->capacity); + tok_list->capacity = capacity; + guththila_tok_list_grow(tok_list, env); + } + } + return GUTHTHILA_FAILURE; +} + +int GUTHTHILA_CALL +guththila_tok_list_init( + guththila_tok_list_t * tok_list, + const axutil_env_t * env) +{ + int i = 0; + tok_list->list = (guththila_token_t **)AXIS2_MALLOC(env->allocator, sizeof(guththila_token_t *) + * GUTHTHILA_TOK_DEF_LIST_SIZE); + if(tok_list->list && guththila_stack_init(&tok_list->fr_stack, env)) + { + tok_list->capacity = (int *)AXIS2_MALLOC(env->allocator, sizeof(int) + * GUTHTHILA_TOK_DEF_LIST_SIZE); + if(tok_list->capacity) + { + tok_list->no_list = GUTHTHILA_TOK_DEF_LIST_SIZE; + tok_list->list[0] = (guththila_token_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_token_t) * GUTHTHILA_TOK_DEF_SIZE); + for(i = 0; i < GUTHTHILA_TOK_DEF_SIZE; i++) + { + guththila_stack_push(&tok_list->fr_stack, &tok_list->list[0][i], env); + } + tok_list->capacity[0] = GUTHTHILA_TOK_DEF_SIZE; + tok_list->cur_list = 0; + tok_list->no_list = GUTHTHILA_TOK_DEF_LIST_SIZE; + return GUTHTHILA_SUCCESS; + } + } + return GUTHTHILA_FAILURE; +} + +void GUTHTHILA_CALL +guththila_tok_list_free( + guththila_tok_list_t * tok_list, + const axutil_env_t * env) +{ + int i = 0; + guththila_stack_un_init(&tok_list->fr_stack, env); + for(; i <= tok_list->cur_list; i++) + { + AXIS2_FREE(env->allocator, tok_list->list[i]); + } + AXIS2_FREE(env->allocator, tok_list->list); + AXIS2_FREE(env->allocator, tok_list->capacity); + AXIS2_FREE(env->allocator, tok_list); +} + +void GUTHTHILA_CALL +guththila_tok_list_free_data( + guththila_tok_list_t * tok_list, + const axutil_env_t * env) +{ + int i = 0; + guththila_stack_un_init(&tok_list->fr_stack, env); + for(; i <= tok_list->cur_list; i++) + { + AXIS2_FREE(env->allocator, tok_list->list[i]); + } + AXIS2_FREE(env->allocator, tok_list->capacity); + AXIS2_FREE(env->allocator, tok_list->list); +} + +guththila_token_t *GUTHTHILA_CALL +guththila_tok_list_get_token( + guththila_tok_list_t * tok_list, + const axutil_env_t * env) +{ + if(tok_list->fr_stack.top > 0 || guththila_tok_list_grow(tok_list, env)) + { + return guththila_stack_pop(&tok_list->fr_stack, env); + } + return NULL; +} + +int GUTHTHILA_CALL +guththila_tok_list_release_token( + guththila_tok_list_t * tok_list, + guththila_token_t * token, + const axutil_env_t * env) +{ + return guththila_stack_push(&tok_list->fr_stack, token, env); +} + +int GUTHTHILA_CALL +guththila_tok_str_cmp( + guththila_token_t * tok, + guththila_char_t *str, + size_t str_len, + const axutil_env_t * env) +{ + unsigned int i = 0; + if(tok->size != str_len) + return -1; + for(; i < tok->size; i++) + { + if(tok->start[i] != str[i]) + { + return -1; + } + } + return 0; +} + +int GUTHTHILA_CALL +guththila_tok_tok_cmp( + guththila_token_t * tok1, + guththila_token_t * tok2, + const axutil_env_t * env) +{ + unsigned int i = 0; + + if(tok1 && tok2) + { + if(tok1->size != tok2->size) + return -1; + for(; i < tok1->size; i++) + { + if(tok1->start[i] != tok2->start[i]) + { + return -1; + } + } + return 0; + } + return -1; +} + +void GUTHTHILA_CALL +guththila_set_token( + guththila_token_t* tok, + guththila_char_t* start, + short type, + int size, + int _start, + int last, + int ref, + const axutil_env_t* env) +{ + if(start) + { + tok->start = start; + tok->type = type; + tok->_start = _start; + tok->size = size; + tok->last = last; + tok->ref = ref; + } +} -- cgit v1.1-32-gdbae