Página principal | Jerarquía de la clase | Lista alfabética | Lista de componentes | Lista de archivos | Miembros de las clases | Archivos de los miembros | Páginas relacionadas

variable.C

Ir a la documentación de este archivo.
00001 //===========================================================================
00002 //= variable.cc                                               Junio de 1998 =
00003 //=-------------------------------------------------------------------------=
00004 //= Definicion de la clase VARIABLE_DE_ESTADO                               =
00005 //=-------------------------------------------------------------------------=
00006 //= ADVERTENCIA: ESTE SOFTWARE NO ESTA CONCEBIDO NI DISENNADO PARA EL USO   =
00007 //= EN EQUIPO DE CONTROL EN LINEA EN ENTORNOS PELIGROSOS QUE REQUIERAN UN   =
00008 //= DESEMPENNO LIBRE DE FALLAS, COMO LA OPERACION DE PLANTAS NUCLEARES,     = 
00009 //= SISTEMAS DE NAVEGACION O COMUNICACION EN AVIONES, TRAFICO AEREO,        =
00010 //= EQUIPO MEDICO DEL CUAL DEPENDAN VIDAS HUMANAS O SISTEMAS DE ARMAMENTO,  =
00011 //= EN LOS CUALES UNA FALLA EN EL SOFTWARE PUEDA IMPLICAR DIRECTAMENTE LA   =
00012 //= MUERTE, DANNOS PERSONALES O DANNOS FISICOS Y/O AMBIENTALES GRAVES       =
00013 //= ("ACTIVIDADES DE ALGO RIESGO").                                         =
00014 //=-------------------------------------------------------------------------=
00015 //= Autor original: Oscar J. Chavarro G.  A.K.A. JEDILINK. Copyright (c),   =
00016 //= 1997 - 2003, oscarchavarro@hotmail.com                                  =
00017 //= AQUYNZA es software libre, y se rige bajo los terminos de la licencia   =
00018 //= LGPL de GNU (http://www.gnu.org). Para mayor informacion respecto a la  =
00019 //= licencia de uso, consulte el archivo ./doc/LICENCIA en la distribucion. =
00020 //===========================================================================
00021 
00022 #include <stdio.h>
00023 #include <string.h>
00024 #include "core/control/variable.h"
00025 
00026 //===========================================================================
00027 
00028 VARIABLE_DE_ESTADO::VARIABLE_DE_ESTADO(ENTIDAD *e, const char *nom_variable)
00029 {
00030     objeto = e;
00031     _nombre = new char[strlen(nom_variable) + 1];
00032     if ( ! _nombre ) {
00033         fprintf(stderr, "<VARIABLE_DE_ESTADO> ERROR: Intentando crear una  "
00034             "pinche cadenita!\n");
00035         fflush(stderr);
00036         ref = NULL;
00037         e = NULL;
00038         return;
00039     }
00040     strcpy(_nombre, nom_variable);
00041 
00042     if ( !e ) {
00043         ref = NULL;
00044         fprintf(stderr, "<VARIABLE_DE_ESTADO> ERROR: Intentando acceder una "
00045             "ENTIDAD no valida!\n");
00046         fflush(stderr);
00047         return;
00048     }
00049 
00050     if ( !e->consultar_variable(nom_variable, tipo_variable, &ref) ) {
00051         ref = NULL;
00052         fprintf(stderr, "<VARIABLE_DE_ESTADO> ERROR: No se puede accesar la "
00053             "variable \"%s\" dentro del objeto \"%s\"!\n", nom_variable,
00054             e->nombre());
00055         fflush(stderr);
00056         return;
00057     }
00058 }
00059 
00060 VARIABLE_DE_ESTADO::~VARIABLE_DE_ESTADO()
00061 {
00062     if ( _nombre ) {
00063         delete _nombre;
00064     }
00065 }
00066 
00067 BOOLEAN
00068 VARIABLE_DE_ESTADO::soy_yo(ENTIDAD *e, char *nom_variable)
00069 {
00070     if ( e == objeto && strcmp(nom_variable, _nombre) == 0 ) {
00071         return TRUE;
00072     }
00073     return FALSE;
00074 }
00075 
00076 BOOLEAN
00077 VARIABLE_DE_ESTADO::es_valida(void)
00078 {
00079     if ( !ref ) {
00080         fprintf(stderr, "<VARIABLE_DE_ESTADO> No hay referencia.\n");
00081         return FALSE; 
00082     }
00083     if ( !objeto ) {
00084         fprintf(stderr, "<VARIABLE_DE_ESTADO> No hay objeto.\n");
00085         return FALSE; 
00086     }
00087     return TRUE;
00088 }
00089 
00090 double
00091 VARIABLE_DE_ESTADO::evaluar_float(void)
00092 {
00093     void *ref;
00094     int tipo;
00095 
00096     if ( objeto->consultar_variable(_nombre, tipo, &ref) &&
00097          tipo == T_FLOAT ) {
00098         return *((double *)ref);
00099     }
00100     else {
00101         fprintf(stderr, "<VARIABLE_DE_ESTADO> - ERROR: "
00102             "No puedo evaluar el flotante \"%s\" del objeto \"%s\".\n",
00103             _nombre, objeto->nombre());
00104         return 0;
00105     }
00106 }
00107 
00108 char *
00109 VARIABLE_DE_ESTADO::evaluar_cadena(void)
00110 {
00111     // OJO: DEBE MEJORARSE PARA USAR `consultar_variable`
00112     return (char *)ref;
00113 }
00114 
00115 VECTOR
00116 VARIABLE_DE_ESTADO::evaluar_vector(void)
00117 {
00118     void *ref;
00119     static VECTOR n(0, 0, 0);
00120     int tipo;
00121 
00122     if ( objeto->consultar_variable(_nombre, tipo, &ref) &&
00123          tipo == T_VECTOR ) {
00124         return *((VECTOR *)ref);
00125     }
00126     else {
00127         fprintf(stderr, "<VARIABLE_DE_ESTADO> - ERROR: "
00128             "No puedo evaluar el vector \"%s\" del objeto \"%s\".\n",
00129             _nombre, objeto->nombre());
00130         fprintf(stderr,"El tipo reportado es %d.\n", tipo); fflush(stderr);
00131         return n;
00132     }
00133 }
00134 
00135 void
00136 VARIABLE_DE_ESTADO::actualizar_vector(VECTOR new_val)
00137 {
00138     //printf("<VARIABLE_DE_ESTADO> Actualizo la variable \"%s\" del objeto "
00139     //       "\"%s\"!\n", _nombre, objeto->nombre());
00140     //fflush(stdout);
00141     objeto->actualizar_variable(_nombre, T_VECTOR, &new_val);
00142     objeto->propagar_cambios();
00143 }
00144 
00145 void
00146 VARIABLE_DE_ESTADO::actualizar_float(double new_val)
00147 {
00148     //printf("<VARIABLE_DE_ESTADO> Actualizo la variable \"%s\" del objeto "
00149     //       "\"%s\"!\n", _nombre, objeto->nombre());
00150     //fflush(stdout);
00151     objeto->actualizar_variable(_nombre, T_FLOAT, &new_val);
00152     objeto->propagar_cambios();
00153 }
00154 
00155 //===========================================================================
00156 //= EOF                                                                     =
00157 //===========================================================================
00158 

Este archivo HTML ha sido generado automáticamente a partir del código fuente AQUYNZA. NO LO EDITE. Para mayor información contacte al autor.