iom_p.h

来自「支持各种栅格图像和矢量图像读取的库」· C头文件 代码 · 共 816 行 · 第 1/2 页

H
816
字号
/* 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 + =
减小字号Ctrl + -
显示快捷键?