예제 #1
0
        public override void CompararValor(EscritorC escritor)
        {
            escritor.WriteLine("//" + Definicion.Nombre);
            switch (Definicion.Tipo)
            {
            case Tipo.UInt8:
            case Tipo.Int8:
            case Tipo.Char:
                escritor.WriteLine("struct Listachar *" + Definicion.Nombre + "listaaux;");
                escritor.WriteLine("crearchar(&" + Definicion.Nombre + "listaaux);");
                foreach (Elem elemento in Elementos)
                {
                    escritor.WriteLine("insertarchar(&" + Definicion.Nombre + "listaaux, " + elemento.Valor + ", false);");
                }

                /*escritor.If("TienePunterosInvalidoschar(" + Definicion.Nombre + ")");
                 * escritor.PrintPunterosInvalidos();
                 * escritor.WriteLine("return 1;");
                 * escritor.FinIf();
                 * escritor.If("ListaCircularchar(" + Definicion.Nombre + ")");
                 * escritor.PrintListaCircular();
                 * escritor.WriteLine("return 1;");
                 * escritor.FinIf();
                 */
                escritor.WriteLine("switch(PunteroInvalidoOListaCircularchar(" + Definicion.Nombre + ")){");
                escritor.WriteLine("case listaCircular:");
                escritor.PrintListaCircular();
                escritor.WriteLine("return 1;");
                escritor.WriteLine("case punteroInvalido:");
                escritor.PrintPunterosInvalidos();
                escritor.WriteLine("return 1;");
                escritor.WriteLine("}");

                escritor.If("!igualdadchar(" + Definicion.Nombre + ", " + Definicion.Nombre + "listaaux)");
                escritor.WriteLine("   cantErrores++;");
                escritor.FinIf();
                break;

            case Tipo.Int16:
            case Tipo.UInt16:
                escritor.WriteLine("struct Listashort *" + Definicion.Nombre + "listaaux;");
                escritor.WriteLine("crearshort(&" + Definicion.Nombre + "listaaux);");
                foreach (Elem elemento in Elementos)
                {
                    escritor.WriteLine("insertarshort(&" + Definicion.Nombre + "listaaux, " + elemento.Valor + ", false);");
                }

                /*                    escritor.If("TienePunterosInvalidosshort(" + Definicion.Nombre + ")");
                 *                  escritor.PrintPunterosInvalidos();
                 *                  escritor.WriteLine("return 1;");
                 *                  escritor.FinIf();
                 *                  escritor.If("ListaCircularshort(" + Definicion.Nombre + ")");
                 *                  escritor.PrintListaCircular();
                 *                  escritor.WriteLine("return 1;");
                 *                  escritor.FinIf();*/
                escritor.WriteLine("switch(PunteroInvalidoOListaCircularshort(" + Definicion.Nombre + ")){");
                escritor.WriteLine("case listaCircular:");
                escritor.PrintListaCircular();
                escritor.WriteLine("return 1;");
                escritor.WriteLine("case punteroInvalido:");
                escritor.PrintPunterosInvalidos();
                escritor.WriteLine("return 1;");
                escritor.WriteLine("}");
                escritor.If("!igualdadshort(" + Definicion.Nombre + ", " + Definicion.Nombre + "listaaux)");
                escritor.WriteLine("    cantErrores++;");
                escritor.FinIf();
                break;

            case Tipo.UInt32:
            case Tipo.Int32:
                escritor.WriteLine("struct Listaint *" + Definicion.Nombre + "listaaux;");
                escritor.WriteLine("crearint(&" + Definicion.Nombre + "listaaux);");
                foreach (Elem elemento in Elementos)
                {
                    escritor.WriteLine("insertarint(&" + Definicion.Nombre + "listaaux, " + elemento.Valor + ", false);");
                }

                /*escritor.If("TienePunterosInvalidosint(" + Definicion.Nombre + ")");
                 * escritor.PrintPunterosInvalidos();
                 * escritor.WriteLine("return 1;");
                 * escritor.FinIf();
                 * escritor.If("ListaCircularint(" + Definicion.Nombre + ")");
                 * escritor.PrintListaCircular();
                 * escritor.WriteLine("return 1;");
                 * escritor.FinIf();*/
                escritor.WriteLine("switch(PunteroInvalidoOListaCircularint(" + Definicion.Nombre + ")){");
                escritor.WriteLine("case listaCircular:");
                escritor.PrintListaCircular();
                escritor.WriteLine("return 1;");
                escritor.WriteLine("case punteroInvalido:");
                escritor.PrintPunterosInvalidos();
                escritor.WriteLine("return 1;");
                escritor.WriteLine("}");
                escritor.If("!igualdadint(" + Definicion.Nombre + ", " + Definicion.Nombre + "listaaux)");
                escritor.WriteLine("    cantErrores++;");
                escritor.FinIf();
                break;

            case Tipo.Booleano:
                escritor.WriteLine("struct Listabool *" + Definicion.Nombre + "listaaux;");
                escritor.WriteLine("crearbool(&" + Definicion.Nombre + "listaaux);");
                foreach (Elem elemento in Elementos)
                {
                    escritor.WriteLine("insertarbool(&" + Definicion.Nombre + "listaaux, " + elemento.Valor + ", false);");
                }

                /*escritor.If("TienePunterosInvalidosbool(" + Definicion.Nombre + ")");
                 * escritor.PrintPunterosInvalidos();
                 * escritor.WriteLine("return 1;");
                 * escritor.FinIf();
                 * escritor.If("ListaCircularbool(" + Definicion.Nombre + ")");
                 * escritor.PrintListaCircular();
                 * escritor.WriteLine("return 1;");
                 * escritor.FinIf();*/
                escritor.WriteLine("switch(PunteroInvalidoOListaCircularbool(" + Definicion.Nombre + ")){");
                escritor.WriteLine("case listaCircular:");
                escritor.PrintListaCircular();
                escritor.WriteLine("return 1;");
                escritor.WriteLine("case punteroInvalido:");
                escritor.PrintPunterosInvalidos();
                escritor.WriteLine("return 1;");
                escritor.WriteLine("}");
                escritor.If("!igualdadbool(" + Definicion.Nombre + ", " + Definicion.Nombre + "listaaux)");
                escritor.WriteLine("    cantErrores++;");
                escritor.FinIf();
                break;

            case Tipo.UInt64:
            case Tipo.Int64:
                escritor.WriteLine("struct Listalonglong *" + Definicion.Nombre + "listaaux;");
                escritor.WriteLine("crearlonglong(&" + Definicion.Nombre + "listaaux);");
                foreach (Elem elemento in Elementos)
                {
                    escritor.WriteLine("insertarlonglong(&" + Definicion.Nombre + "listaaux, " + elemento.Valor + ", false);");
                }
                escritor.WriteLine("switch(PunteroInvalidoOListaCircularlonglong(" + Definicion.Nombre + ")){");
                escritor.WriteLine("case listaCircular:");
                escritor.PrintListaCircular();
                escritor.WriteLine("return 1;");
                escritor.WriteLine("case punteroInvalido:");
                escritor.PrintPunterosInvalidos();
                escritor.WriteLine("return 1;");
                escritor.WriteLine("}");
                escritor.If("!igualdadlonglong(" + Definicion.Nombre + ", " + Definicion.Nombre + "listaaux)");
                escritor.WriteLine("    cantErrores++;");
                escritor.FinIf();
                break;

            case Tipo.Float32:
                escritor.WriteLine("struct Listafloat *" + Definicion.Nombre + "listaaux;");
                escritor.WriteLine("crearfloat(&" + Definicion.Nombre + "listaaux);");
                foreach (Elem elemento in Elementos)
                {
                    escritor.WriteLine("insertarfloat(&" + Definicion.Nombre + "listaaux, " + elemento.Valor + ", false);");
                }

                /*escritor.If("TienePunterosInvalidosfloat(" + Definicion.Nombre + ")");
                 * escritor.PrintPunterosInvalidos();
                 * escritor.WriteLine("return 1;");
                 * escritor.FinIf();
                 * escritor.If("ListaCircularfloat(" + Definicion.Nombre + ")");
                 * escritor.PrintListaCircular();
                 * escritor.WriteLine("return 1;");
                 * escritor.FinIf();*/
                escritor.WriteLine("switch(PunteroInvalidoOListaCircularfloat(" + Definicion.Nombre + ")){");
                escritor.WriteLine("case listaCircular:");
                escritor.PrintListaCircular();
                escritor.WriteLine("return 1;");
                escritor.WriteLine("case punteroInvalido:");
                escritor.PrintPunterosInvalidos();
                escritor.WriteLine("return 1;");
                escritor.WriteLine("}");
                escritor.If("!igualdadfloat(" + Definicion.Nombre + ", " + Definicion.Nombre + "listaaux," + Definicion.Precision + ")");
                escritor.WriteLine("    cantErrores++;");
                escritor.FinIf();
                break;

            case Tipo.Float64:
                escritor.WriteLine("struct Listadouble *" + Definicion.Nombre + "listaaux;");
                escritor.WriteLine("creardouble(&" + Definicion.Nombre + "listaaux);");
                foreach (Elem elemento in Elementos)
                {
                    escritor.WriteLine("insertardouble(&" + Definicion.Nombre + "listaaux, " + elemento.Valor + ", false);");
                }

                /*escritor.If("TienePunterosInvalidosdouble(" + Definicion.Nombre + ")");
                 * escritor.PrintPunterosInvalidos();
                 * escritor.WriteLine("return 1;");
                 * escritor.FinIf();
                 * escritor.If("ListaCirculardouble(" + Definicion.Nombre + ")");
                 * escritor.PrintListaCircular();
                 * escritor.WriteLine("return 1;");
                 * escritor.FinIf();*/
                escritor.WriteLine("switch(PunteroInvalidoOListaCirculardouble(" + Definicion.Nombre + ")){");
                escritor.WriteLine("case listaCircular:");
                escritor.PrintListaCircular();
                escritor.WriteLine("return 1;");
                escritor.WriteLine("case punteroInvalido:");
                escritor.PrintPunterosInvalidos();
                escritor.WriteLine("return 1;");
                escritor.WriteLine("}");
                escritor.If("!igualdaddouble(" + Definicion.Nombre + ", " + Definicion.Nombre + "listaaux, " + Definicion.Precision + ")");
                escritor.WriteLine("    cantErrores++;");
                escritor.FinIf();
                break;

            default:
                throw new Exception(Mensajes.TipoIncorrectoListas);
            }
        }