#pragma once #include #include "InputOutputStream.h" using namespace std; class Tag { public: static const byte TAG_End = 0; static const byte TAG_Byte = 1; static const byte TAG_Short = 2; static const byte TAG_Int = 3; static const byte TAG_Long = 4; static const byte TAG_Float = 5; static const byte TAG_Double = 6; static const byte TAG_Byte_Array = 7; static const byte TAG_String = 8; static const byte TAG_List = 9; static const byte TAG_Compound = 10; static const byte TAG_Int_Array = 11; private: wstring name; protected: Tag(const wstring &name); public: virtual void write(DataOutput *dos) = 0; virtual void load(DataInput *dis) = 0; virtual wstring toString() = 0; virtual byte getId() = 0; void print(ostream out); void print(char *prefix, wostream out); wstring getName(); Tag *setName(const wstring& name); static Tag *readNamedTag(DataInput *dis); static void writeNamedTag(Tag *tag, DataOutput *dos); static Tag *newTag(byte type, const wstring &name); static wchar_t *getTagName(byte type); virtual ~Tag() {} virtual bool equals(Tag *obj); // 4J Brought forward from 1.2 virtual Tag *copy() = 0; // 4J Brought foward from 1.2 };