00001 /**********************************************************/ 00002 /*/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/ 00003 /* 00004 Copyright: 1996 - Grupo de Voz (DAET) ETSII/IT-Bilbao 00005 00006 Nombre fuente................ STRL.CPP 00007 Nombre paquete............... - 00008 Lenguaje fuente.............. C++ 00009 Estado....................... Completado 00010 Dependencia Hard/OS.......... - 00011 Codigo condicional........... - 00012 00013 Codificacion................. Borja Etxebarria 00014 00015 Version dd/mm/aa Autor Comentario 00016 ------- -------- -------- ---------- 00017 1.2.5 30/08/98 Borja split en varios modulos strl_?.cpp 00018 1.2.4 22/08/97 Borja auto DefCfgFile en clargs2props() 00019 1.2.3 12/08/97 Borja soporte comillas dobles (key="multi palabra") 00020 1.2.2 12/08/97 Borja soporte Help en clargs2props() 00021 1.2.1 07/08/97 Borja bug en clargs2props() y tob() 00022 1.2.0 25/04/97 Borja usar String en vez de char* 00023 1.1.0 14/01/97 Borja add/remove_prefix() como en CSTR Speech Tools 00024 1.0.0 06/05/96 Borja Codificacion inicial. 00025 00026 ======================== Contenido ======================== 00027 <DOC> 00028 Listas de cadenas (String). Clases: 00029 - StrList : Lista de cadenas 00030 - StrSet : Conjunto de cadenas (cadenas no repetidas) 00031 - KVStrList : Conjuntos de cadenas Clave y Valor (Key - Val ). 00032 00033 StrList: Tienen los metodos de listas (plantilla ListT, ver listt.cpp), 00034 excepto el metodo create(). Ademas tiene constructores que permiten 00035 inicializar la lista: 00036 StrList l(otraStrList); 00037 StrList l(otraStrSet); 00038 StrList l("elem1 ele2 ele3 %d %f",10,5.5); 00039 char *a[]={"elem1", "elem2", NULL}; 00040 StrList l(a); 00041 String s="el1 el2 el3"; 00042 StrList(s); 00043 00044 y tambien metodos append_s() para anyadir mas elementos, de forma 00045 similar a los constructores anteriores. Tambien tienen un metodo 00046 sort() que ordena alfabeticamente la lista (si se envia un parametro 00047 TRUE opcional (sort(TRUE)) se ordena inversamente. 00048 00049 StrSet: similar a StrList pero sin elementos repetidos. Tiene los 00050 metodos de la plantilla SetListT (ver listt.cpp) para cadenas 00051 String. Tambien tiene constructores similares a StrList, y en lugar 00052 de metodo append_s(), tiene metodo add_s(), que controla que no haya 00053 elementos duplicados en la lista. 00054 00055 KVStrList: es una especie de StrSet, pero para cada elemento del 00056 conjunto (clave) hay un valor asociado (val), ambos de tipo String. 00057 Tiene los metodos de la plantilla KeyValListT (ver listt.cpp), 00058 y constructores similares a los de StrList y StrSet, pero indicando 00059 clave y valor, por ejemplo: 00060 StrList l("clave1=val1 clave2=val2 clave3=%d",10); 00061 Tambien tiene metodos add_s() igual que StrSet, solo que aceptando 00062 los dos parametros String clave y valor. 00063 Tambien tiene varios metodos del tipo val(key) que {devuelven} el 00064 valor dada una clave (val(key,defval) {devuelve} {defval} si no hay 00065 un elemento de clave {key} en la lista). Los metodos son: 00066 val() -> devuelve la cadena. 00067 ival() -> devuelve un entero (evalua la cadena como entero) 00068 fval() -> devuelve un float (evalua la cadena como float). 00069 Y asi otros: lval() para long, dval() para double, bval para boolean. 00070 Y para anyadir elementos, aparte de add(cadenaclave,cadenavalor) 00071 se definen add(cadenaclave,valor) donde {valor} puede ser un 00072 entero, long, float o double (que se almacenara realmente como 00073 una cadena). Tambien se pueden utilizar addi(), addl(), addf(), 00074 addd() que hacen lo mismo que las respectivas versions 00075 sobrecargadas de add(). Ademas hay addb() para boolean, que 00076 permite introducir valores boolean en la lista (se almacenan 00077 como cadenas "True"/"False". 00078 </DOC> 00079 =========================================================== 00080 */ 00081 /*/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/ 00082 /**********************************************************/ 00083 00084 #include <string.h> 00085 00086 #include "strl.hpp" 00087 00088 /**********************************************************/ 00089 // Uso interno a modulos strl_?.cpp 00090 00091 INT _strl_cmp(const String *s1, const String *s2) 00092 { 00093 return strcmp(*s1,*s2); 00094 } 00095 00096 /**********************************************************/ 00097 // Uso interno a modulos strl_?.cpp 00098 00099 INT _strl_rcmp(const String *s1, const String *s2) 00100 { 00101 return strcmp(*s2,*s1); 00102 } 00103 00104 /**********************************************************/