MRXT: The Multi-Robot eXploration Tool
Multi-Robot autonomous exploration and mapping simulator.
|
00001 #include "StringTokenizer.h" 00002 00003 StringTokenizer::StringTokenizer(char *line, char *delim) { 00004 char *bptr, *eptr, *dptr; 00005 00006 nTokens = 0; 00007 first = NULL; 00008 last = NULL; 00009 if (!line) { 00010 printf("StringTokenizer::StringTokenizer : no hay linea\n"); 00011 return; 00012 } 00013 if (!delim) { 00014 printf("StringTokenizer::StringTokenizer : no hay linea\n"); 00015 return; 00016 } 00017 bptr = line; 00018 eptr = bptr; 00019 while ( 1 ) { 00020 char *aux; 00021 if (*eptr) { 00022 // Si hay algun caracter en la linea miro si coincide con el delim 00023 dptr = delim; 00024 aux = eptr; 00025 // printf("comparando <%c> y <%c>\n", *eptr, *dptr); 00026 while (*aux && *dptr && *aux==*dptr) { 00027 // Si coincide busco el final de delim para ver si es un separador 00028 // printf("<%c == %c>\n", *eptr, *dptr); 00029 aux++; 00030 dptr++; 00031 } 00032 // printf("Delimitador : aux - eptr = %d\n", aux-eptr); 00033 if (!*dptr) { 00034 // Si hemos reconocido un delimitador empezando en eptr nos quedamos con el token anterior 00035 /* 00036 printf("Hemos encontrado un delim que empezaba en bptr y termina en eptr:\n"); 00037 printf("Longitud del token = %d\n", eptr-bptr); 00038 */ 00039 addToken(bptr, eptr-bptr); 00040 /* 00041 for ( char *ptr = bptr ; ptr != eptr ; ptr++) { 00042 printf("[%c]", *ptr); 00043 } 00044 printf("\n"); 00045 */ 00046 eptr = aux; 00047 bptr = eptr; 00048 } else { 00049 eptr++; 00050 } 00051 } else { 00052 // if (eptr-bptr+1 > 0) printf("Al final hay %dlentras\n", eptr-bptr+1); 00053 addToken(bptr, eptr-bptr); 00054 break; 00055 } 00056 } 00057 next = first; 00058 } 00059 00060 int StringTokenizer::addToken(char *token, int size) { 00061 Nodo *n; 00062 00063 if (!size) return -1; 00064 n = (Nodo *)malloc(sizeof(Nodo)); 00065 n -> token = (char *)malloc(sizeof(char)*(size+1)); 00066 strncpy(n -> token, token, size); 00067 n -> token[size] = '\0'; 00068 if (first) last -> next = n; 00069 else first = n; 00070 last = n; 00071 n -> next = NULL; 00072 nTokens++; 00073 return 1; 00074 } 00075 00076 StringTokenizer::~StringTokenizer() { 00077 Nodo *n; 00078 00079 if ( first ) { 00080 n = first; 00081 first = first -> next; 00082 free (n -> token); 00083 free (n); 00084 } 00085 } 00086 00087 char *StringTokenizer::nextToken(char *delim) { 00088 char *ptr = NULL; 00089 if ( next ) { 00090 ptr = next -> token; 00091 next = next -> next; 00092 } 00093 return ptr; 00094 } 00095 00096 00097 int StringTokenizer::countTokens() { 00098 return nTokens; 00099 } 00100 00101 int StringTokenizer::hasMoreTokens() { 00102 if (first) return (first -> next!= NULL); 00103 else return 0; 00104 }