#include <QCache>
#include <QDomDocument>
Ir al código fuente de este archivo.
Clases | |
| class | Archivero |
| Clase que gestiona los accesos a las propiedades de las entidades del MUD. Más... | |
| struct | Archivero::Propiedad |
| Clase para almacenar cada propiedad. Más... | |
Definiciones | |
| #define | TAM_CCACHE 64 |
| Tamaño máximo posible en KiB de la caché de contenidos. | |
| #define | TAM_RCACHE 16 |
| Tamaño máximo posible en KiB de la caché de referencias. | |
| #define | MODO_RUTINA 0 |
| La propiedad es una rutina. | |
| #define | MODO_VARIABLE 1 |
| La propiedad es una variable. | |
| #define | TIPO_NADA 0 |
| La rutina no tiene ningún valor de retorno. | |
| #define | TIPO_BOOLEANO 1 |
| La variable es de tipo booleano o la rutina devuelve un booleano. | |
| #define | TIPO_ENTERO 2 |
| La variable es de tipo entero o la rutina devuelve un entero. | |
| #define | TIPO_CADENA 3 |
| La variable es de tipo cadena o la rutina devuelve una cadena. | |
Funciones | |
| QString | FiltroLecturaBooleano (const QString &original, bool &error) |
| Filtra un booleano almacenado en disco. | |
| QString | FiltroLecturaCadena (const QString &original, bool &error) |
| Filtra una cadena almacenada en disco. | |
| QString | FiltroLecturaEntero (const QString &original, bool &error) |
| Filtra un entero almacenado en disco. | |
| QString | FiltroLecturaRutina (const QString &original) |
| Filtra una rutina almacenada en disco. | |
| QString | FiltroEscrituraBooleano (const QString &original) |
| Filtra un booleano para ser almacenado en disco. | |
| QString | FiltroEscrituraCadena (const QString &original) |
| Filtra una cadena para ser almacenada en disco. | |
| QString | FiltroEscrituraEntero (const QString &original) |
| Filtra un entero para ser almacenado en disco. | |
| QString | FiltroEscrituraRutina (const QString &original) |
| Filtra una rutina para ser almacenada en disco. | |
Definición en el archivo Archivero.hpp.
|
|
La propiedad es una rutina.
Definición en la línea 44 del archivo Archivero.hpp. Referenciado por Archivero::LeePropiedad(). |
|
|
La propiedad es una variable.
Definición en la línea 46 del archivo Archivero.hpp. Referenciado por Archivero::LeePropiedad(). |
|
|
Tamaño máximo posible en KiB de la caché de contenidos.
Definición en la línea 37 del archivo Archivero.hpp. |
|
|
Tamaño máximo posible en KiB de la caché de referencias.
Definición en la línea 39 del archivo Archivero.hpp. |
|
|
La variable es de tipo booleano o la rutina devuelve un booleano.
Definición en la línea 52 del archivo Archivero.hpp. Referenciado por Archivero::LeePropiedad(). |
|
|
La variable es de tipo cadena o la rutina devuelve una cadena.
Definición en la línea 56 del archivo Archivero.hpp. Referenciado por Archivero::LeePropiedad(). |
|
|
La variable es de tipo entero o la rutina devuelve un entero.
Definición en la línea 54 del archivo Archivero.hpp. Referenciado por Archivero::LeePropiedad(). |
|
|
La rutina no tiene ningún valor de retorno.
Definición en la línea 50 del archivo Archivero.hpp. Referenciado por Archivero::LeePropiedad(). |
|
|
Filtra un booleano para ser almacenado en disco.
Definición en la línea 733 del archivo Archivero.cpp.
|
|
|
Filtra una cadena para ser almacenada en disco.
Definición en la línea 741 del archivo Archivero.cpp.
|
|
|
Filtra un entero para ser almacenado en disco.
Definición en la línea 749 del archivo Archivero.cpp.
|
|
|
Filtra una rutina para ser almacenada en disco.
Definición en la línea 757 del archivo Archivero.cpp.
|
|
||||||||||||
|
Filtra un booleano almacenado en disco.
Definición en la línea 454 del archivo Archivero.cpp. Referenciado por Archivero::LeePropiedad(). 00455 { 00456 QString filtrado ("F"); // Texto que retornaremos (por defecto FALSO) 00457 00458 bool hay_booleano = false; // Si ya se ha encontrado en la cadena un valor 00459 // booleano ("VERDADERO" o "FALSO") 00460 error = false; // Se pondrá a true si se encuentra algún error 00461 00462 const unsigned long longitud = original.length(); 00463 00464 for (unsigned long i = 0; i < longitud; i++) 00465 { 00466 switch (original.at (i).toLatin1()) 00467 { 00468 case ' ' : 00469 case '\n': 00470 case '\r': 00471 case '\t': 00472 break; 00473 00474 case 'V': 00475 if (hay_booleano || ((i + 8) > longitud) || 00476 (original.at (i + 1) != 'E') || 00477 (original.at (i + 2) != 'R') || 00478 (original.at (i + 3) != 'D') || 00479 (original.at (i + 4) != 'A') || 00480 (original.at (i + 5) != 'D') || 00481 (original.at (i + 6) != 'E') || 00482 (original.at (i + 7) != 'R') || 00483 (original.at (i + 8) != 'O')) 00484 error = true; 00485 else 00486 { 00487 hay_booleano = true; 00488 filtrado = "V"; 00489 } 00490 break; 00491 00492 case 'F': 00493 if (hay_booleano || ((i + 5) > longitud) || 00494 (original.at (i + 1) != 'A') || 00495 (original.at (i + 2) != 'L') || 00496 (original.at (i + 3) != 'S') || 00497 (original.at (i + 4) != 'O')) 00498 error = true; 00499 else 00500 hay_booleano = true; 00501 break; 00502 00503 default: 00504 error = true; 00505 } 00506 if (error) 00507 break; // Dejamos de recorrer la cadena original 00508 } 00509 00510 return (filtrado); 00511 }
|
|
||||||||||||
|
Filtra una cadena almacenada en disco.
Definición en la línea 521 del archivo Archivero.cpp. Referenciado por Archivero::LeePropiedad(). 00522 { 00523 QString filtrado; // Texto que retornaremos 00524 00525 bool hay_espacio = false; // Lo último encontrado es espacio en blanco 00526 bool omitir_espacio = true; // Omitimos hay_espacio, esto lo haremos al 00527 // principio de una nueva línea o tras haber 00528 // encontrado espacio explícito 00529 error = false; // Se pondrá a true si se encuentra algún error 00530 00531 const unsigned long longitud = original.length(); 00532 const char *cadena = original.toLatin1().constData(); 00533 00534 for (unsigned long i = 0; i < longitud; i++) 00535 { 00536 switch (cadena[i]) 00537 { 00538 case ' ' : 00539 case '\n': 00540 case '\r': 00541 case '\t': 00542 hay_espacio = true; 00543 break; 00544 00545 case '\\': 00546 switch (cadena[i + 1]) 00547 { 00548 case 'n': // Nueva línea explícita 00549 filtrado += '\n'; 00550 omitir_espacio = true; 00551 break; 00552 00553 case 't': // Tabulador explícito 00554 filtrado += '\t'; 00555 omitir_espacio = true; 00556 break; 00557 00558 case ' ': // Espacio explícito 00559 filtrado += ' '; 00560 omitir_espacio = true; 00561 break; 00562 00563 case '\\': // Barra invertida 00564 if ((!omitir_espacio) && (hay_espacio)) 00565 { 00566 filtrado += ' '; 00567 } 00568 filtrado += '\\'; 00569 hay_espacio = false; 00570 omitir_espacio = false; 00571 break; 00572 00573 case '0': 00574 case '1': 00575 if ((cadena[i + 2] < '0') || (cadena[i + 2] > '9') || 00576 (cadena[i + 3] < '0') || (cadena[i + 3] > '9')) 00577 error = true; 00578 else // Código de carácter válido 00579 { 00580 filtrado += ((cadena[i + 1] - '0') * 100) + 00581 ((cadena[i + 2] - '0') * 10) + 00582 (cadena[i + 3] - '0'); 00583 hay_espacio = false; 00584 omitir_espacio = false; 00585 } 00586 i += 2; // Hemos leído dos caracteres de más 00587 break; 00588 00589 case '2': 00590 if ((cadena[i + 2] < '0') || (cadena[i + 2] > '5') || 00591 (cadena[i + 3] < '0') || 00592 (cadena[i + 3] > ((cadena[i + 2] == '5') ? '5' : '9'))) 00593 error = true; 00594 else // Código de carácter válido 00595 { 00596 filtrado += 200 + ((cadena[i + 2] - '0') * 10) + 00597 (cadena[i + 3] - '0'); 00598 hay_espacio = false; 00599 omitir_espacio = false; 00600 } 00601 i += 2; // Hemos leído dos caracteres de más 00602 break; 00603 00604 default: // Uso incorrecto de la barra invertida 00605 error = true; 00606 } 00607 i += 1; // Nos saltamos el siguiente carácter 00608 break; 00609 00610 default: 00611 if ((!omitir_espacio) && (hay_espacio)) 00612 filtrado += ' '; // Espacio implícito 00613 filtrado += cadena[i]; 00614 hay_espacio = false; 00615 omitir_espacio = false; 00616 } 00617 } 00618 00619 return (filtrado); 00620 }
|
|
||||||||||||
|
Filtra un entero almacenado en disco.
Definición en la línea 630 del archivo Archivero.cpp. Referenciado por Archivero::LeePropiedad(). 00631 { 00632 QString filtrado = "0"; // Texto que retornaremos (por defecto 0) 00633 00634 bool hay_numero = false; // Si ya se ha encontrado en la cadena un número 00635 bool fin_numero = false; // Si se encuentra espacio en blanco tras el número 00636 bool negativo = false; // El signo del entero es negativo 00637 error = false; // Se pondrá a true si se encuentra algún error 00638 00639 const unsigned long longitud = original.length(); 00640 00641 for (unsigned long i = 0; i < longitud; i++) 00642 { 00643 switch (original.at (i).toLatin1()) 00644 { 00645 case ' ' : 00646 case '\n': 00647 case '\r': 00648 case '\t': 00649 if (hay_numero) 00650 fin_numero = true; 00651 break; 00652 00653 case '+': 00654 if (hay_numero) 00655 error = true; 00656 break; 00657 00658 case '-': 00659 if (hay_numero) 00660 error = true; 00661 else 00662 negativo = !negativo; 00663 break; 00664 00665 default: 00666 if (fin_numero || (original.at (i) < '0') || (original.at (i) > '9')) 00667 error = true; 00668 else if (hay_numero) 00669 filtrado += original.at (i); 00670 else if (original.at (i) != '0') // Omitimos así los ceros iniciales 00671 { 00672 filtrado = original.at (i); 00673 if (negativo) 00674 filtrado.prepend ('-'); 00675 hay_numero = true; 00676 } 00677 } 00678 if (error) 00679 break; // Dejamos de recorrer la cadena original 00680 } 00681 00682 return (filtrado); 00683 }
|
|
|
Filtra una rutina almacenada en disco.
Definición en la línea 691 del archivo Archivero.cpp. Referenciado por Archivero::LeePropiedad(). 00692 { 00693 QString filtrado; // Texto que retornaremos 00694 00695 bool hay_espacio = false; // Lo último encontrado es espacio en blanco 00696 bool omitir_espacio = true; // Omitimos hay_espacio, esto lo haremos al 00697 // principio de una nueva línea 00698 00699 const unsigned long longitud = original.length(); 00700 00701 for (unsigned long i = 0; i < longitud; i++) 00702 { 00703 switch (original.at (i).toLatin1()) 00704 { 00705 case ' ' : 00706 case '\t': 00707 hay_espacio = true; 00708 break; 00709 00710 case '\n': 00711 case '\r': 00712 // Omitimos caracteres de nueva línea consecutivos 00713 if (!omitir_espacio) 00714 { 00715 filtrado += '\n'; 00716 omitir_espacio = true; 00717 } 00718 break; 00719 00720 default: 00721 if ((!omitir_espacio) && (hay_espacio)) 00722 filtrado += ' '; // Espacio implícito 00723 filtrado += original.at (i); 00724 hay_espacio = false; 00725 omitir_espacio = false; 00726 } 00727 } 00728 00729 return (filtrado); 00730 }
|
1.4.4