[Cmap-cvs] cmap dbf2conf.cpp,1.1,1.2 eval.cpp,1.1,1.2 eval.h,1.1,1.2 evalImpl.h,1.1,1.2 parser.cpp,1
Status: Beta
Brought to you by:
dyp
From: Denis P. <dy...@us...> - 2004-05-16 04:41:10
|
Update of /cvsroot/cmap/cmap In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28046 Modified Files: dbf2conf.cpp eval.cpp eval.h evalImpl.h parser.cpp plan.conf topo.conf Log Message: - introduce expression types (int, string, boolean) I went this way because we always know the type of expression, different types can not be mixed, different types has completely different ops. - implement simple assignment expressions for layer_min, layer_max, export, index - change dbf2conf to generate booleans as true/false Index: parser.cpp =================================================================== RCS file: /cvsroot/cmap/cmap/parser.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- parser.cpp 15 May 2004 18:43:12 -0000 1.2 +++ parser.cpp 16 May 2004 04:41:00 -0000 1.3 @@ -45,42 +45,48 @@ } void setValue(ObjectConf &obj, const std::string &varName, Tokenizer &t) { - if (t.nextToken() != TT_NUMBER) - throw ParserException("Expected number"); - if (varName == "export") - switch (t.nval) { - case 0: - obj.doExport = false; - break; - case 1: - obj.doExport = true; - break; - default: - throw ParserException("Invalid export value"); + if ((varName == "export") || (varName == "index")) { // boolean vars + if (t.nextToken() != TT_WORD) + throw ParserException("Expected 'true' or 'false'"); + + BoolAssign *a = new BoolAssign(); + + if (t.sval == "true") + a->rvalue = new BoolConst(true); + else if (t.sval == "false") + a->rvalue = new BoolConst(false); + else + throw ParserException("Expected 'true' or 'false'"); + + if (varName == "export") + a->lvalue = new ExportVar(); + else if (varName == "index") + a->lvalue = new IndexVar(); + obj.addAssign(a); + } else { + if (t.nextToken() != TT_NUMBER) + throw ParserException("Expected number"); + else if (varName == "point") + obj.typePoint = t.nval; + else if (varName == "line") + obj.typeLine = t.nval; + else if (varName == "polygon") + obj.typePoly = t.nval; + else if (varName == "layer_min") { + IntAssign *a = new IntAssign(); + a->lvalue = new LayerMinVar(); + a->rvalue = new IntConst(t.nval); + obj.addAssign(a); } - else if (varName == "index") - switch (t.nval) { - case 0: - obj.index = false; - break; - case 1: - obj.index = true; - break; - default: - throw ParserException("Invalid index value"); + else if (varName == "layer_max") { + IntAssign *a = new IntAssign(); + a->lvalue = new LayerMaxVar(); + a->rvalue = new IntConst(t.nval); + obj.addAssign(a); } - else if (varName == "point") - obj.typePoint = t.nval; - else if (varName == "line") - obj.typeLine = t.nval; - else if (varName == "polygon") - obj.typePoly = t.nval; - else if (varName == "layer_min") - obj.layerMin = t.nval; - else if (varName == "layer_max") - obj.layerMax = t.nval; - else - throw ParserException("Invalid variable name"); + else + throw ParserException("Invalid variable name"); + } } bool readObject(Tokenizer &t) { @@ -99,6 +105,9 @@ if (t.nextToken() != TT_WORD) throw ParserException("Expected object code"); + if (t.sval.length() > 8) + throw ParserException("Object code is longer than 8"); + ObjectConf obj; strcpy(obj.object_cod, t.sval.c_str()); Index: topo.conf =================================================================== RCS file: /cvsroot/cmap/cmap/topo.conf,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- topo.conf 15 May 2004 17:49:33 -0000 1.1 +++ topo.conf 16 May 2004 04:41:00 -0000 1.2 @@ -1,37 +1,37 @@ // Âëîæåííàÿ êàðòà object "90100000" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ëèíèÿ çàìûêàíèÿ object "91100000" { - export = 0; + export = false; [...3037 lines suppressed...] + export = false; line = 0x1C; layer_min = 0; layer_max = 0; } // Ïðî÷èå ãðàíèöû object "81200000" { - export = 0; + export = false; line = 0x1C; layer_min = 0; layer_max = 0; } // Ìîñò object "62310000" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } Index: eval.h =================================================================== RCS file: /cvsroot/cmap/cmap/eval.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- eval.h 15 May 2004 18:43:12 -0000 1.1 +++ eval.h 16 May 2004 04:41:00 -0000 1.2 @@ -11,6 +11,7 @@ } objectType; bool index; + bool doExport; int type; @@ -23,7 +24,7 @@ int typePoly; } ObjectProp; -bool evalObjectProp(h_object *obj, ObjectProp &o); +bool evalObjectProp(const h_object *obj, ObjectProp &o); void clearWarnedEval(); #endif Index: plan.conf =================================================================== RCS file: /cvsroot/cmap/cmap/plan.conf,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- plan.conf 15 May 2004 17:49:33 -0000 1.1 +++ plan.conf 16 May 2004 04:41:00 -0000 1.2 @@ -1,21 +1,21 @@ // Íàñåëåííûé ïóíêò object "CT" { - export = 1; + export = true; polygon = 0x17; layer_min = 0; layer_max = 2; } // Ãðàíèöà object "BC" { - export = 1; + export = true; line = 0x1D; layer_min = 2; layer_max = 3; } // Ëèíèÿ ãðàíèö äîðîã, ïðîåçæèõ ÷àñòåé object "BB" { - export = 0; - index = 0; + export = false; + index = false; point = 0x6406; line = 0x1C; layer_min = 0; @@ -23,7 +23,7 @@ } // Óëèöà, ïëîùàäü, áóëüâàð, ÷àñòü òðàññû object "ST" { - export = 1; + export = true; line = 0x06; polygon = 0x17; layer_min = 0; @@ -31,22 +31,22 @@ } // Äâîð object "DW" { - export = 1; + export = true; polygon = 0x17; layer_min = 0; layer_max = 1; } // Îãðàæäåíèå object "GR" { - export = 0; + export = false; line = 0x1C; layer_min = 0; layer_max = 0; } // Öåðêîâü, õðàì, ìå÷åòü, ñèíàãîãà .. object "RB" { - export = 1; - index = 0; + export = true; + index = false; point = 0x6404; polygon = 0x1A; layer_min = 0; @@ -54,15 +54,15 @@ } // Ñòàäèîí, ñïîðòèâíàÿ ïëîùàäêà object "SR" { - export = 1; + export = true; polygon = 0x19; layer_min = 0; layer_max = 0; } // Êëàäáèùå object "BP" { - export = 1; - index = 0; + export = true; + index = false; point = 0x6403; polygon = 0x1A; layer_min = 0; @@ -70,30 +70,30 @@ } // Ñòàíöèÿ ìåòðî object "UO" { - export = 1; - index = 0; + export = true; + index = false; point = 0x2700; layer_min = 0; layer_max = 1; } // Ó÷àñòîê äîðîãè object "RD" { - export = 1; + export = true; line = 0x05; layer_min = 0; layer_max = 1; } // Òðàìâàéíàÿ ëèíèÿ object "RT" { - export = 1; + export = true; line = 0x14; layer_min = 0; layer_max = 0; } // Æåëåçíîäîðîæíàÿ ëèíèÿ object "RW" { - export = 1; - index = 0; + export = true; + index = false; point = 0x2000; line = 0x1B; layer_min = 0; @@ -101,36 +101,36 @@ } // Ðå÷íàÿ (ìîðñêàÿ) ïðèñòàíü object "SP" { - export = 1; - index = 0; + export = true; + index = false; point = 0x2F09; layer_min = 0; layer_max = 0; } // Àâòîñòîÿíêè, ãàðàæè object "GA" { - export = 1; + export = true; polygon = 0x05; layer_min = 0; layer_max = 0; } // Ðàéîí ìîðÿ, çàëèâ object "SE" { - export = 1; + export = true; polygon = 0x28; layer_min = 0; layer_max = 0; } // Îçåðî object "LK" { - export = 1; + export = true; polygon = 0x3C; layer_min = 0; layer_max = 1; } // Âîäîõðàíèëèùå object "LW" { - export = 1; + export = true; line = 0x1F; polygon = 0x45; layer_min = 0; @@ -138,21 +138,21 @@ } // Ïðóä object "RE" { - export = 1; + export = true; polygon = 0x41; layer_min = 0; layer_max = 0; } // Äåêîðàòèâíûé áàññåéí object "BA" { - export = 1; + export = true; polygon = 0x3C; layer_min = 0; layer_max = 0; } // Ðåêà object "RI" { - export = 1; + export = true; line = 0x1F; polygon = 0x46; layer_min = 0; @@ -160,7 +160,7 @@ } // Êàíàë object "CA" { - export = 1; + export = true; line = 0x1F; polygon = 0x46; layer_min = 0; @@ -168,7 +168,7 @@ } // Ðó÷åé object "RU" { - export = 1; + export = true; line = 0x1F; polygon = 0x46; layer_min = 0; @@ -176,8 +176,8 @@ } // Äðåâåñíàÿ ðàñòèòåëüíîñòü object "TZ" { - export = 1; - index = 0; + export = true; + index = false; point = 0x660A; polygon = 0x16; layer_min = 0; @@ -185,8 +185,8 @@ } // Îòäåëüíûå äåðåâüÿ object "TR" { - export = 1; - index = 0; + export = true; + index = false; point = 0x660A; polygon = 0x16; layer_min = 0; @@ -194,8 +194,8 @@ } // Âûðóáêà object "VR" { - export = 1; - index = 0; + export = true; + index = false; point = 0x660A; polygon = 0x16; layer_min = 0; @@ -203,8 +203,8 @@ } // Êóëüòóðíàÿ ðàñòèòåëüíîñòü, ñàäû object "CZ" { - export = 1; - index = 0; + export = true; + index = false; point = 0x660A; polygon = 0x16; layer_min = 0; @@ -212,8 +212,8 @@ } // Êóñàðíèêîâàÿ ðàñòèåëüíîñòü object "BZ" { - export = 1; - index = 0; + export = true; + index = false; point = 0x660A; polygon = 0x16; layer_min = 0; @@ -221,8 +221,8 @@ } // Òðàâÿíàÿ ðàñòèòåëüíîñòü object "DZ" { - export = 1; - index = 0; + export = true; + index = false; point = 0x660A; polygon = 0x16; layer_min = 0; @@ -230,8 +230,8 @@ } // Ïàðíèêè, îðàíæåðåè, òåïëèöû object "PR" { - export = 1; - index = 0; + export = true; + index = false; point = 0x660A; polygon = 0x16; layer_min = 0; @@ -239,80 +239,80 @@ } // Ïðîñåêè object "PC" { - export = 1; + export = true; line = 0x16; layer_min = 0; layer_max = 0; } // Òåêñò object "TX" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Âëîæåííàÿ êàðòà object "$C" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ôîí ïîäïèñè object "FN" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ïóíêòû ããñ object "GS" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Îòìåòêà âûñîòû object "HT" { - export = 1; - index = 0; + export = true; + index = false; point = 0x6300; layer_min = 0; layer_max = 0; } // Ðåïåð object "RP" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Àäìèíèñòðàòèâíûé ðàéîí object "DI" { - export = 0; + export = false; polygon = 0x03; layer_min = 0; layer_max = 0; } // Òåððèòîðèÿ ãîðîäñêîé çàñòðîéêè object "LA" { - export = 1; + export = true; polygon = 0x17; layer_min = 1; layer_max = 1; } // Ëèíèÿ ïðîåêòèðóåìîé çàñòðîéêè object "BO" { - export = 0; + export = false; line = 0x1C; layer_min = 0; layer_max = 0; } // Ýëåìåíò òîðîëîãèè ïðîåçäà object "TP" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Çäàíèå object "BL" { - export = 1; - index = 0; + export = true; + index = false; point = 0x6402; line = 0x06; polygon = 0x17; @@ -321,103 +321,103 @@ } // Ýëåìåíòû çäàíèé, ñîîðóæåíèé object "EB" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ãðàíèöû ÷àñòåé çäàíèé object "GL" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ïàìÿòíèêè àðõèòåêòóðû object "PA" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ïëÿæ object "SH" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ìîíóìåíò, ïàìÿòíèê object "MM" { - export = 1; - index = 0; + export = true; + index = false; point = 0x2C04; layer_min = 0; layer_max = 0; } // Ôîíòàí object "WC" { - export = 1; - index = 0; + export = true; + index = false; point = 0x6511; layer_min = 0; layer_max = 0; } // Ëåñòíèöà object "SW" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Áåñåäêà, áóäêà object "BS" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ó÷àñòîê òðàñïîðòíîé ìàãèñòðàëè object "TM" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Âîêçàëû, àýðîïîðòû object "BH" { - export = 1; - index = 0; + export = true; + index = false; point = 0x2F04; layer_min = 0; layer_max = 0; } // Àýðîäðîìû object "AE" { - export = 1; - index = 0; + export = true; + index = false; point = 0x5901; layer_min = 0; layer_max = 3; } // Íîìåð äîðîãè object "RN" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Æåëåçíîäîðîæíàÿ ïëàòôîðìà object "RC" { - export = 1; - index = 0; + export = true; + index = false; point = 0x2000; layer_min = 0; layer_max = 2; } // Òóííåëü object "TU" { - export = 1; + export = true; polygon = 0x0C; layer_min = 0; layer_max = 0; } // Ìîñò object "BR" { - export = 1; - index = 0; + export = true; + index = false; point = 0x6401; line = 0x1A; polygon = 0x0C; @@ -426,37 +426,37 @@ } // Ïðîåçä â àðêå object "AR" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ïàðîì object "PM" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Îñòàíîâêè îáùåñòâåííîãî òðàíñïîðòà object "PS" { - export = 0; + export = false; layer_min = 0; layer_max = 1; } // Ïîäâåñíûå äîðîãè object "HR" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ñâåòîôîð object "SF" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Êàíàâà object "KW" { - export = 1; + export = true; line = 0x18; polygon = 0x4C; layer_min = 0; @@ -464,347 +464,347 @@ } // Ïëîòèíà object "PL" { - export = 1; + export = true; line = 0x1A; layer_min = 0; layer_max = 0; } // Äàìáà object "DA" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Îñòðîâ object "OS" { - export = 1; + export = true; polygon = 0x53; layer_min = 0; layer_max = 0; } // Øëþçû object "SL" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Òðóáû object "WF" { - export = 1; + export = true; line = 0x28; layer_min = 0; layer_max = 0; } // Èñòî÷íèêè, êîëîäöû object "IS" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Íàáåðåæíàÿ object "NB" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Íàïðàâëåíèå òå÷åíèÿ object "NT" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Âîäîðîñëè object "VD" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ìîðñêèå ïóòè object "MW" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Íàâèãàöèîííîå îáîðóäîâàíèå object "RS" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Õàðàêòåðèñòèêè ðåê è êàíàëîâ object "FR" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Óðåç âîäû object "WL" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ïîðîãè object "TH" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Êàìíè, ñêàëû object "RO" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Îòìåëü, áàíêà object "BK" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Âîäîìåðíûé ïîñò object "WP" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ìîëû, ïðè÷àëû è âîëíîëîìû object "WS" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ãîðèçîíòàëü object "GG" { - export = 1; + export = true; line = 0x22; layer_min = 0; layer_max = 0; } // Èçîáàòà object "BT" { - export = 1; + export = true; line = 0x25; layer_min = 0; layer_max = 0; } // Ôîðìû ðåëúåôà object "RF" { - export = 0; + export = false; line = 0x22; layer_min = 0; layer_max = 0; } // Îòäåëüíî ëåæàùèå êàìíè object "SN" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Âõîäû â ïåùåðû è ãðîòû object "CV" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Òðóáû object "TB" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ýëåêòðè÷åñêèå ïîäñòàíöèè object "EP" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Âîäîíàïîðíàÿ áàøíÿ object "WB" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Òðóáîïðîâîä object "PT" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ëèíèÿ ýëåêòðîïåðåäà÷ object "EL" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ëèíèÿ ñâÿçè object "TL" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ñêâàæèíû object "SK" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ïðîì. ïðåäïðèÿòèÿ object "PP" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Çàâîäñêèå è ôàáðè÷íûå òðóáû object "ZT" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Çàïðàâî÷íûå ñòàíöèè object "ZS" { - export = 1; - index = 0; + export = true; + index = false; point = 0x2F01; layer_min = 0; layer_max = 0; } // Îòäåëüíûå öèñòåðíû object "CI" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Áàøíè object "BN" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ìà÷òû object "MH" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Íàâåñ object "AW" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Îòñòîéíèê object "OT" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ìåòåîðîëîãè÷åñêèå ñòàíöèè object "MS" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Êàðüåð object "QU" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Òîðôîðàçðàáîòêè object "TF" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ëîòêè äëÿ ñïóñêà object "LS" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ãðóíò object "GT" { - export = 1; + export = true; polygon = 0x53; layer_min = 0; layer_max = 0; } // Õàðàêòåðèñòèêà ðàñòèòåëüíîñòè object "FV" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Àäðåñà, ñãðóïïèðîâàíûå ïî óëèöàì object "A1" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Àäðåñ äîìà object "A2" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ìàðøðóò äâèæåíèÿ object "LL" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Íà÷àëî ìàðøðóòà object "P1" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Êîíåö ìàðøðóòà object "P2" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Êîíòðîëüíûå òî÷êè äëÿ ïðîêëàäêè ìàðøðóòà object "P3" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Òî÷êè çàïðåòà ïðîåçäà äëÿ ïðîêëàäêè ìàðøðóò object "P4" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ñãðóïïèðîâàíûå ïî íàçâàíèÿì ó÷àñòêè äîðîã object "T1" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ó÷àñòêè äîðîã ñ õàðàêòåðèñòèêàìè object "T2" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Ïîâîðîò íà ïåðåêðåñòêå çàïðåùåí object "T3" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Âîçìîæíîå äâèæåíèå ïî ïåðåêðåñòêó object "T4" { - export = 0; + export = false; layer_min = 0; layer_max = 0; } // Áðîä object "BD" { - export = 1; - index = 0; + export = true; + index = false; point = 0x6412; line = 0x16; layer_min = 0; Index: eval.cpp =================================================================== RCS file: /cvsroot/cmap/cmap/eval.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- eval.cpp 15 May 2004 18:43:12 -0000 1.1 +++ eval.cpp 16 May 2004 04:41:00 -0000 1.2 @@ -55,7 +55,7 @@ warnedCODsize = 0; } -bool evalObjectProp(h_object *obj, ObjectProp &o) { +bool evalObjectProp(const h_object *obj, ObjectProp &o) { for (unsigned int i = 0; i < objLen; i++) if (strcmp(objs[i].object_cod, obj->Cod + 1) == 0) return objs[i].handle(obj, o); @@ -66,10 +66,27 @@ return false; } -bool ObjectConf::handle(h_object *obj, ObjectProp &o) { - if (!doExport) +void IntAssign::exec(const h_object *obj, ObjectProp &o) { + lvalue->setValue(o, rvalue->getValue(obj, o)); +} + +void StringAssign::exec(const h_object *obj, ObjectProp &o) { + lvalue->setValue(o, rvalue->getValue(obj)); +} + +void BoolAssign::exec(const h_object *obj, ObjectProp &o) { + lvalue->setValue(o, rvalue->getValue(obj, o)); +} + +bool ObjectConf::handle(const h_object *obj, ObjectProp &o) { + memset(&o, 0, sizeof(ObjectProp)); + + for (Assign *a = first; a != NULL; a = a->next) + a->exec(obj, o); + + if (!o.doExport) return false; - o.index = index; + switch (obj->Cod[0]) { case 'P': o.type = typePoint; @@ -92,8 +109,5 @@ o.typeLine = typeLine; o.typePoly = typePoly; - o.layerMin = layerMin; - o.layerMax = layerMax; - return true; } Index: evalImpl.h =================================================================== RCS file: /cvsroot/cmap/cmap/evalImpl.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- evalImpl.h 15 May 2004 18:43:12 -0000 1.1 +++ evalImpl.h 16 May 2004 04:41:00 -0000 1.2 @@ -1,21 +1,177 @@ #ifndef __CMAP_EVALIMPL_H__ #define __CMAP_EVALIMPL_H__ +#include <string> +#include <vector> + #include "eval.h" #include "IngitFile.h" +class StringExpr { +public: + virtual std::string getValue(const h_object *obj) = 0; +}; + +class StringVar : public StringExpr { +public: + virtual std::string getValue(const h_object *obj) = 0; + virtual void setValue(ObjectProp &o, std::string &value) = 0; +}; + +class StringConst : public StringExpr { +public: + virtual std::string getValue(const h_object *obj) { + return value; + } +protected: + std::string value; +}; + +class IntExpr { +public: + virtual int getValue(const h_object *obj, const ObjectProp &o) = 0; +}; + +class IntVar : public IntExpr { +public: + virtual int getValue(const h_object *obj, const ObjectProp &o) = 0; + virtual void setValue(ObjectProp &o, int value) = 0; +}; + +class LayerMinVar : public IntVar { + virtual int getValue(const h_object *, const ObjectProp &o) { + return o.layerMin; + } + + virtual void setValue(ObjectProp &o, int value) { + o.layerMin = value; + } +}; + +class LayerMaxVar : public IntVar { + virtual int getValue(const h_object *, const ObjectProp &o) { + return o.layerMax; + } + + virtual void setValue(ObjectProp &o, int value) { + o.layerMax = value; + } +}; + +class IntConst : public IntExpr { +public: + IntConst(int _value) : value(_value) { + }; + + virtual int getValue(const h_object *, const ObjectProp &) { + return value; + } +protected: + int value; +}; + +class BoolExpr { +public: + virtual bool getValue(const h_object *obj, const ObjectProp &o) = 0; +}; + +class BoolVar : public BoolExpr { +public: + virtual bool getValue(const h_object *obj, const ObjectProp &o) = 0; + virtual void setValue(ObjectProp &o, bool value) = 0; +}; + +class BoolConst : public BoolExpr { +public: + BoolConst(bool _value) : value(_value) { + }; + + virtual bool getValue(const h_object *, const ObjectProp &) { + return value; + } +protected: + bool value; +}; + +class ExportVar : public BoolVar { + virtual bool getValue(const h_object *, const ObjectProp &o) { + return o.doExport; + } + + virtual void setValue(ObjectProp &o, bool value) { + o.doExport = value; + } +}; + +class IndexVar : public BoolVar { + virtual bool getValue(const h_object *, const ObjectProp &o) { + return o.index; + } + + virtual void setValue(ObjectProp &o, bool value) { + o.index = value; + } +}; + +class Assign { +public: + Assign() : next(NULL) { + } + + virtual void exec(const h_object *obj, ObjectProp &o) = 0; + + Assign *next; +}; + +class StringAssign : public Assign { +public: + StringVar *lvalue; + StringExpr *rvalue; + + virtual void exec(const h_object *obj, ObjectProp &o); +}; + +class IntAssign : public Assign { +public: + IntVar *lvalue; + IntExpr *rvalue; + + virtual void exec(const h_object *obj, ObjectProp &o); +}; + +class BoolAssign : public Assign { +public: + BoolVar *lvalue; + BoolExpr *rvalue; + + virtual void exec(const h_object *obj, ObjectProp &o); +}; + class ObjectConf { public: - bool handle(h_object *obj, ObjectProp &o); + ObjectConf() : first(NULL), last(NULL) { + } + + bool handle(const h_object *obj, ObjectProp &o); - bool doExport; // Ïðèçíàê ýêñïîðòà. 0 - çàïðåò. char object_cod[9]; // 8-çíà÷íûé êîäèôèêàòîð ÂÒÓ - bool index; + int typePoint; int typeLine; int typePoly; - int layerMin; // Layer_min cGPSmap - int layerMax; // Layer_max cGPSmap + + void addAssign(Assign *a) { + if (first == NULL) { + first = a; + last = a; + } else { + last->next = a; + last = a; + } + } + + Assign *first; + Assign *last; }; void addObjectConf(ObjectConf &obj); Index: dbf2conf.cpp =================================================================== RCS file: /cvsroot/cmap/cmap/dbf2conf.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- dbf2conf.cpp 15 May 2004 17:48:16 -0000 1.1 +++ dbf2conf.cpp 16 May 2004 04:41:00 -0000 1.2 @@ -254,11 +254,14 @@ DosToWin (bufsrt, (BYTE *)file_cod1[j].CHR_RUS); printf("// %s\n", bufsrt); printf("object \"%s\" {\n", file_cod1[j].object_cod); - printf(" export = %d;\n", file_cod1[j].do_export); + if (file_cod1[j].do_export == 0) + printf(" export = false;\n"); + else if (file_cod1[j].do_export == 1) + printf(" export = true;\n"); if (file_cod1[j].RGN_point == 0x10) - printf(" index = 0;\n"); + printf(" index = false;\n"); else if (file_cod1[j].RGN_point == 0x20) - printf(" index = 1;\n"); + printf(" index = true;\n"); if (file_cod1[j].TYPE_point != -1) printf(" point = 0x%.4X;\n", file_cod1[j].TYPE_point); if (file_cod1[j].TYPE_line != -1) |