2014-05-14 23:52:45 -04:00
|
|
|
/*
|
|
|
|
* token.c
|
|
|
|
* Copyright (C) 2014 c9s <c9s@c9smba.local>
|
|
|
|
*
|
|
|
|
* Distributed under terms of the MIT license.
|
|
|
|
*/
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "token.h"
|
|
|
|
|
|
|
|
|
2014-05-15 00:21:45 -04:00
|
|
|
token_array * token_array_create(int cap) {
|
|
|
|
token_array * list = (token_array*) malloc( sizeof(token_array) );
|
2014-05-14 23:52:45 -04:00
|
|
|
list->len = 0;
|
|
|
|
list->cap = cap;
|
|
|
|
list->tokens = (char**) malloc( sizeof(char*) * cap);
|
|
|
|
return list;
|
|
|
|
}
|
|
|
|
|
2014-05-15 00:21:45 -04:00
|
|
|
bool token_array_is_full(token_array * l) {
|
2014-05-14 23:52:45 -04:00
|
|
|
return l->len >= l->cap;
|
|
|
|
}
|
|
|
|
|
2014-05-15 00:21:45 -04:00
|
|
|
bool token_array_resize(token_array *l, int new_cap) {
|
2014-05-14 23:52:45 -04:00
|
|
|
l->tokens = realloc(l->tokens, sizeof(char**) * new_cap);
|
|
|
|
l->cap = new_cap;
|
|
|
|
return l->tokens != NULL;
|
|
|
|
}
|
|
|
|
|
2014-05-15 00:21:45 -04:00
|
|
|
bool token_array_append(token_array * l, char * token) {
|
|
|
|
if ( token_array_is_full(l) ) {
|
|
|
|
bool ret = token_array_resize(l, l->cap + 20);
|
2014-05-14 23:52:45 -04:00
|
|
|
if (ret == FALSE ) {
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
l->tokens[ ++(l->len) ] = token;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2014-05-15 00:21:45 -04:00
|
|
|
void token_array_free(token_array *l) {
|
2014-05-14 23:52:45 -04:00
|
|
|
for ( int i = 0; i < l->len ; i++ ) {
|
|
|
|
char * t = l->tokens[ i ];
|
|
|
|
free(t);
|
|
|
|
}
|
|
|
|
free(l);
|
|
|
|
}
|
|
|
|
|
|
|
|
|