#include <str_prtc.h>
Tipos públicos | |
| enum | { SIZE_in = 10, SIZE_out = 1 * SIZE_in, Fix_char = '!' } |
Métodos públicos | |
| str_prtc () | |
| Constructor de vector. | |
| bool | Ok () |
Usa Check_Ok() para verificar la invariante de la clase. | |
| void | Fix () |
Corrige el valor del objeto "*this" si no cumple con su invariante. | |
| const char * | operator= (const char *) |
Cambia el valor de la hilera "*this" para que contenga la hilera "res". | |
| operator char * () | |
| Retorna el valor almacenado en la hilera. | |
| const char * | Before () |
| Referencia a la memoria que está antes de la hilera. | |
| const char * | After () |
| Referencia a la memoria que está después de la hilera. | |
Atributos privados | |
| char | _before [SIZE_out] |
| Memoria [amortiguador] "_before" de la hilera. | |
| char | _s [SIZE_in] |
| Valor de la hilera. | |
| char | _after [SIZE_out] |
| Memoria [amortiguador] "después" de la hilera. | |
Amigas | |
| bool | Check_Ok (const str_prtc &) |
| Verifica que se cumpla la invariante de la clase, o sea, que el objeto esté bien construido. | |
+--------------+--------------+--------------+
|F(/"$'?);)=:~!| << hilera >> |0(/"$'?);)=:~!|
+--------------+--------------+--------------+
|
|
|
|
|
Constructor de vector.
|
|
|
Usa
|
|
|
Corrige el valor del objeto
00043 { 00044 if ( Ok() ) { // Si Fix() está implementada, también lo está Ok() 00045 return; 00046 } 00047 unsigned i; 00048 00049 _after[0] = 0; // pone un EOS==0 al final de la hilera "_s" 00050 for (i = 0; i < SIZE_out; ++i) { 00051 _before[i] = ((char)0xFF ^ _after[i]); 00052 } 00053 00054 for (i = 0; i < sizeof(str_prtc::_s); ++i) { 00055 _s[i] = Fix_char; // llena toda la hilera "_s" de "chingolitos" 00056 } 00057 }
|
|
|
Cambia el valor de la hilera
00021 { 00022 memset( _s, Fix_char, SIZE_in ); // blanque "*this" 00023 unsigned res_size = 1+strlen( res ); // incluye el EOS 00024 if (res_size <= SIZE_in) { // sólo asigna si la hilera cabe 00025 memcpy( _s, res, res_size ); 00026 } else { 00027 memcpy( _s, res, SIZE_in ); 00028 _s[ SIZE_in - 1 ] = 0; // trunca 00029 } 00030 return _s; 00031 }
|
|
|
Retorna el valor almacenado en la hilera.
|
|
|
Referencia a la memoria que está antes de la hilera.
|
|
|
Referencia a la memoria que está después de la hilera.
|
|
|
Verifica que se cumpla la invariante de la clase, o sea, que el objeto esté bien construido.
00076 { 00077 unsigned i; 00078 if (STR._after[0] != 0) { // verifica EOS al final de la hilera 00079 // i = i; 00080 return false; 00081 } 00082 00083 for (i = 0; i < str_prtc::SIZE_out; ++i) { 00084 if (STR._before[i] != ((char)0xFF ^ STR._after[i])) { 00085 return false; // verifica que los [amortiguadores] alrededor 00086 } // de la hilera no están [manchados] 00087 } 00088 00089 i = str_prtc::SIZE_in; 00090 do { 00091 i--; 00092 if (0 == STR._s[i]) { // encontró EOS y todo está bien 00093 break; 00094 } else if (STR._s[i] != str_prtc::Fix_char) { 00095 return false; // se queja porque no hay [chingolitos] después de la hilera 00096 } 00097 } while (i != 0); 00098 if ( i == 0 ) { 00099 return true; 00100 } 00101 // assert( i > 0 ); 00102 do { 00103 i--; 00104 if (0 == STR._s[i]) { 00105 return false; // encontró más de un EOS 00106 } 00107 } while (i != 0); 00108 00109 return true; 00110 }
|
|
|
Memoria [amortiguador] "_before" de la hilera.
|
|
|
Valor de la hilera.
|
|
|
Memoria [amortiguador] "después" de la hilera.
|
1.4.4