?? iom_p.h
字號:
/* This file is part of the iom project. * For more information, please see <http://www.interlis.ch>. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#ifndef IOM_IOM_P_H#define IOM_IOM_P_H/** @file * private IOM header. */#ifdef _MSC_VER// disable warning C4786: symbol greater than 255 character,#pragma warning(disable: 4786)#endif#include <iostream>#include <vector>#include <stack>#include <map>#include <xercesc/util/XMLString.hpp>#include <xercesc/framework/XMLBuffer.hpp>#include <xercesc/util/StringPool.hpp>#include <xercesc/framework/XMLPScanToken.hpp>#include <xercesc/sax2/SAX2XMLReader.hpp>#include <xercesc/sax2/DefaultHandler.hpp>#include <xercesc/framework/XMLFormatter.hpp>#include <xercesc/framework/LocalFileFormatTarget.hpp>#include <xercesc/util/TransService.hpp>#include <iom/iom.h>#ifdef _MSC_VER#include <crtdbg.h>// signed/unsigned mismatch#pragma warning(default: 4018)#endif#ifdef _DEBUG //#define dbgnew new( _CLIENT_BLOCK, __FILE__, __LINE__) #define dbgnew new#else #define dbgnew new#endif // _DEBUG#ifdef _MSC_VER#define IOM_PATH_MAX _MAX_PATH#else#define IOM_PATH_MAX PATH_MAX#endifXERCES_CPP_NAMESPACE_USEclass XmlWrtAttr {private: const XMLCh *name; const XMLCh *value; bool oidAttr;public: const XMLCh *getName(); const XMLCh *getValue(); bool isOid(); XmlWrtAttr(const XMLCh *name,const XMLCh *value); XmlWrtAttr(const XMLCh *name,const XMLCh *value,bool isOid);};class XmlWriter {private: XMLFormatter *out; XMLFormatTarget* destination;public: ~XmlWriter(); XmlWriter(); void open(const char *filename); void startElement(int tagid,XmlWrtAttr attrv[],int attrc); void endElement(int tagid); void endElement(); void characters(const XMLCh *const chars); void close(); void printNewLine(); void printIndent(int level);private: std::stack<int> stack;};class IomIterator { private: struct iom_iterator *pointee;public: IomIterator(){pointee=0;} IomIterator(struct iom_iterator *pointee1); IomIterator(const IomIterator& src); IomIterator& operator=(const IomIterator& src); ~IomIterator(); struct iom_iterator& operator*() const { return *pointee; } struct iom_iterator* operator->() const { return pointee; } bool isNull(){return pointee==0;}};class IomFile { private: struct iom_file *pointee;public: IomFile(){pointee=0;} IomFile(struct iom_file *pointee1); IomFile(const IomFile& src); IomFile& operator=(const IomFile& src); ~IomFile(); struct iom_file& operator*() const { return *pointee; } struct iom_file* operator->() const { return pointee; } bool isNull(){return pointee==0;}};class IomBasket { private: struct iom_basket *pointee;public: IomBasket(){pointee=0;} IomBasket(struct iom_basket *pointee1); IomBasket(const IomBasket& src); IomBasket& operator=(const IomBasket& src); ~IomBasket(); struct iom_basket& operator*() const { return *pointee; } struct iom_basket* operator->() const { return pointee; } bool isNull(){return pointee==0;}};class IomObject { protected: struct iom_object *pointee;public: IomObject(){pointee=0;} IomObject(struct iom_object *pointee1); IomObject(const IomObject& src); IomObject& operator=(const IomObject& src); ~IomObject(); struct iom_object& operator*() const { return *pointee; } struct iom_object* operator->() const { return pointee; } bool isNull(){return pointee==0;}};struct iom_file {private: XMLPScanToken token; SAX2XMLReader* parser; class ParserHandler* handler; // table of baskets std::vector<IomBasket> basketv;public: void addBasket(IomBasket basket); IomBasket getBasket(const XMLCh *oid);private: const char *filename;public: ~iom_file(); iom_file(); int readHeader(const char *model); int readBasket(IomFile file); int readLoop(const char *filename); void setFilename(const char *filename); int save();private: int useCount;public: struct iom_file *getRef(){useCount++;return this;} int freeRef(){useCount--;return useCount;}private: IomBasket ilibasket;public: void setModel(IomBasket model); IomBasket getModel();private: XMLCh *headversion_w; char *headversion_c;public: void setHeadSecVersion(const XMLCh *version); const char *getHeadSecVersion_c(); const XMLCh *getHeadSecVersion();private: XMLCh *headsender_w; char *headsender_c;public: void setHeadSecSender(const XMLCh *sender); const char *getHeadSecSender_c(); const XMLCh *getHeadSecSender();private: XMLCh *headcomment_w; char *headcomment_c;public: void setHeadSecComment(const XMLCh *comment); const char *getHeadSecComment_c(); const XMLCh *getHeadSecComment();private: void writePolyline(XmlWriter &out, IomObject &obj,bool hasLineAttr); void writeSurface(XmlWriter &out, IomObject &obj); void writeAttrs(XmlWriter &out, IomObject &obj); void writeAttr(XmlWriter &out, IomObject &obj,int attr);private: // map<int classTag,vector<pair<int pos,int attrName>>> typedef std::vector< std::pair<int,int> > attrv_type; typedef std::map<int,attrv_type> tagv_type; tagv_type tagList; void buildTagList(); int getQualifiedTypeName(IomObject &aclass);private:public: friend struct iom_iterator;};struct iom_basket { struct iom_file *file; // use weak pointer to avoid a circular reference in the smart pointersprivate: int tag; char *tag_c;public: void setTag(int tag); const char *getTag_c(); int getTag();private: int xmlLine; int xmlCol;public: void setXMLLineNumber(int line); int getXMLLineNumber(); void setXMLColumnNumber(int col); int getXMLColumnNumber();private: int consistency;public: void setConsistency(int cons); int getConsistency();private: int kind;public: void setKind(int kind); int getKind();private: XMLCh *oid_w; char *oid_c;public: void setOid(const XMLCh *oid); const char *getOid_c(); const XMLCh *getOid();private: XMLCh *startstate_w; char *startstate_c;public: void setStartState(const XMLCh *startstate); const char *getStartState_c(); const XMLCh *getStartState();private: XMLCh *endstate_w; char *endstate_c;public: void setEndState(const XMLCh *endstate); const char *getEndState_c(); const XMLCh *getEndState();private: XMLCh *topics_w; char *topics_c;public: void setTopics(const XMLCh *topics); const char *getTopics_c(); const XMLCh *getTopics();public: iom_basket(); ~iom_basket();private: int useCount;public: struct iom_basket *getRef(){useCount++;return this;} int freeRef(){useCount--;return useCount;}private: std::vector<IomObject> objectv;public: void addObject(IomObject object); IomObject getObject(const XMLCh *oid); friend struct iom_iterator;};class iom_value {private: const XMLCh *str; IomObject obj; iom_value(); public: iom_value(IomObject value); iom_value(const XMLCh *value); const XMLCh *getStr(); IomObject getObj();};struct iom_object {private: int useCount;public: struct iom_object *getRef(){useCount++;return this;} int freeRef(){useCount--;return useCount;}private: struct iom_basket *basket; // use weak pointer to avoid a circular reference in the smart pointerspublic: void setBasket(IomBasket basket);public: //iom_object(); iom_object(); virtual ~iom_object();private: int consistency;public: void setConsistency(int cons); int getConsistency();private: int operation;public: void setOperation(int op); int getOperation();private: int tag; char *tag_c;public: void setTag(int tag); const char *getTag_c(); int getTag();private: int xmlLine; int xmlCol;public: void setXMLLineNumber(int line); int getXMLLineNumber(); void setXMLColumnNumber(int col); int getXMLColumnNumber();private: XMLCh *oid_w; char *oid_c;public: void setOid(const XMLCh *oid); const XMLCh *getOid(); const char *getOid_c();private: XMLCh *bid_w; char *bid_c;public: void setBid(const XMLCh *bid); const char *getBid_c(); const XMLCh* getBid();private: XMLCh *refOid_w; char *refOid_c;public: void setRefOid(const XMLCh *oid); const XMLCh *getRefOid(); const char *getRefOid_c();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -