OPTPiX SpriteStudio SDK
Loading...
Searching...
No Matches
ssarchiver.h
Go to the documentation of this file.
1#ifndef __SSARCHIVER__
2#define __SSARCHIVER__
3
4#include "./tinyxml2/tinyxml2.h"
5#include "sstypes.h"
6#include <string>
7#include <vector>
8#include <map>
9
10// MEMO: 定義順の関係でここでusingしてしまうと問題が発生する
11// using namespace tinyxml2;
12
13namespace spritestudio6
14{
15
16// MEMO: 後に入れ替え可能なようにエリアスで定義しておく。
17namespace libXML = tinyxml2;
18
20// MEMO: 元はstructでの定義だったのだが、記述意図から類推すると恐らくtypesafeのためだと思われるため、念のためnamespaceに変更。
21// struct EnumSsArchiver
23{
24 enum Type
25 {
26 unkown = 0, //不明
27 in, //Input
28 out, //Output
29 };
30};
31
32class SsXmlIArchiver;
33
34//class SsXmlStringConverter
36{
37public:
40
41 virtual bool inputString( SsString value , SsString subvalue ) = 0;
42};
43
44
47{
48private:
49 libXML::XMLElement* m_xml;
50
51public:
52
54
55
57 virtual ~ISsXmlArchiver(){}
58
59 libXML::XMLElement* getxml(){ return m_xml;}
60
61 void firstChild(ISsXmlArchiver* ar , const char* element_name)
62 {
63 m_xml = ar->getxml()->FirstChildElement( element_name );
64 }
65
66 void setDocumet( libXML::XMLDocument* doc , const char* element_name)
67 {
68 m_xml = doc->FirstChildElement(element_name);
69 }
70
71 void setElement(libXML::XMLElement* e )
72 {
73 m_xml = e;
74 }
75
76 virtual bool dc( const char* name , int& member ) = 0;
77 virtual bool dc( const char* name , float& member ) = 0;
78 virtual bool dc( const char* name , bool& member ) = 0;
79 virtual bool dc( const char* name , std::vector<SsString>& list ) = 0;
80
81 virtual bool dc( const char* name , SsString& member ) = 0;
82 virtual bool dc( const char* name , SsPoint2& member ) = 0;
83 virtual bool dc( const char* name , SsCurve& member ) = 0;
84 virtual bool dc( const char* name , SsXmlRangeValueConverter& member ) = 0;
85
86 virtual bool dc(const char* name, std::vector<SsPoint2>& list) = 0;
87 virtual bool dc(const char* name, std::vector<SsTriangle>& list) = 0;
88 virtual bool dc(const char* name, std::map<SsString, int>& _map) = 0;
89
90
91 virtual bool dc_attr( const char* name , SsString& member ) = 0;
92 virtual bool dc_attr( const char* name , int& member ) = 0;
93
94
95
96};
97
98
99inline static int GetTextToInt(libXML::XMLElement* e , int default_value )
100{
101 int ret =default_value;
102 const char* v = e->GetText();
103 if ( v )
104 {
105 ret = atoi(v);
106 }
107 return ret;
108}
109
110
113{
114public:
116
117
118 SsXmlIArchiver(ISsXmlArchiver* ar , const char* element_name)
119 {
120 firstChild( ar , element_name );
121 }
122 SsXmlIArchiver( libXML::XMLDocument* doc , const char* element_name)
123 {
124 setDocumet( doc , element_name );
125 }
126
127 SsXmlIArchiver(libXML::XMLElement* e )
128 {
129 setElement( e );
130 }
131
132
133 virtual ~SsXmlIArchiver(){}
134
135
136 virtual bool dc( const char* name , int& member );
137 virtual bool dc( const char* name , float& member );
138 virtual bool dc( const char* name , SsString& member );
139 virtual bool dc( const char* name , bool& member );
140 virtual bool dc( const char* name , std::vector<SsString>& list );
141 virtual bool dc( const char* name , SsPoint2& member );
142 virtual bool dc( const char* name , SsCurve& member );
143 virtual bool dc( const char* name , SsTriangle& member);
144// virtual bool dc( const char* name , SsBoneBind& member);
145
146 virtual bool dc( const char* name , SsXmlRangeValueConverter& member )
147 {
148 libXML::XMLElement* e = getxml()->FirstChildElement( name );
149 SsXmlIArchiver _ar(e);
150
151 SsString str;
152 _ar.dc_attr( "value" , str );
153
154 SsString str2;
155 _ar.dc_attr( "subvalue" , str2 );
156
157 return member.inputString(str,str2);
158 }
159
160 virtual bool dc(const char* name, std::vector<SsPoint2>& list);
161 virtual bool dc(const char* name, std::vector<SsTriangle>& list);
162
163 virtual bool dc(const char* name, std::map<SsString,int>& _map);
164
165
166 virtual bool dc_attr( const char* name , SsString& member );
167 virtual bool dc_attr( const char* name , int& member );
168
169
170
171
172 template<class myclass> bool dc( const char* name , std::vector<myclass*>& list , const std::string key = "value" )
173 {
174 list.clear();
175 libXML::XMLElement* e = getxml()->FirstChildElement( name );
176 if (e == 0)return false;
177 if ( key != "" )
178 e = e->FirstChildElement( key.c_str() );
179
180 while( e )
181 {
182 myclass* _temp = new myclass();
183 SsXmlIArchiver _ar(e);
184 _temp->__Serialize( &_ar );
185 list.push_back( _temp );
186 e = e->NextSiblingElement();
187 }
188
189 return true;
190 }
191
192 template<class myclass> bool dc( const char* name , myclass& type )
193 {
194 SsString str;
195 dc( name , str );
196 __StringToEnum_( str , type);
197
198 return false;
199 }
200
201 template<class myclass> bool dc_attr( const char* name , myclass& type )
202 {
203 SsString str;
204 dc_attr( name , str );
205 __StringToEnum_( str , type);
206
207 return false;
208 }
209
210};
211
212
213#define SPRITESTUDIO6SDK_SERIALIZE_BLOCK void __Serialize(ISsXmlArchiver* ar)
214
215#define SPRITESTUDIO6SDK_SSAR_DECLARE(t) ar->dc(#t,t)
216#define SPRITESTUDIO6SDK_SSAR_DECLARE_ATTRIBUTE(t) ar->dc_attr(#t,t)
217
218#define SPRITESTUDIO6SDK_SSAR_STRUCT_DECLARE(t) {SsXmlIArchiver _ar( ar , #t );\
219t.__Serialize( &_ar );}\
220
221template<class myclass>
222inline bool __SSAR_DECLARE_LIST__( ISsXmlArchiver* ar , std::vector<myclass*>& list, const char* name ,const std::string key = "value" )
223{
224 if ( ar->getType() == EnumSsArchiver::in )
225 {
226 return (static_cast<SsXmlIArchiver*>(ar))->dc( name , list , key );
227 }
228
229 if ( ar->getType() == EnumSsArchiver::out )
230 {
231 }
232
233 return false;
234}
235
236
237#define SPRITESTUDIO6SDK_SSAR_DECLARE_LIST(t) spritestudio6::__SSAR_DECLARE_LIST__( ar , t , #t)
238#define SPRITESTUDIO6SDK_SSAR_DECLARE_LIST2(t,s) spritestudio6::__SSAR_DECLARE_LIST__( ar , t , s)
239#define SPRITESTUDIO6SDK_SSAR_DECLARE_LISTEX(t,key) spritestudio6::__SSAR_DECLARE_LIST__( ar , t , #t , key )
240
241template<class myclass>
242inline bool __SSAR_DECLARE_ENUM__( ISsXmlArchiver* ar ,myclass& type, const char* name )
243{
244 if ( ar->getType() == EnumSsArchiver::in )
245 {
246 return (static_cast<SsXmlIArchiver*>(ar))->dc( name , type );
247 }
248
249 if ( ar->getType() == EnumSsArchiver::out )
250 {
251 }
252 return false;
253}
254
255template<class myclass>
256inline bool __SSAR_DECLARE_ATTRIBUTE_ENUM__( ISsXmlArchiver* ar ,myclass& type, const char* name )
257{
258 if ( ar->getType() == EnumSsArchiver::in )
259 {
260 return (static_cast<SsXmlIArchiver*>(ar))->dc_attr( name , type );
261 }
262
263 if ( ar->getType() == EnumSsArchiver::out )
264 {
265 }
266 return false;
267}
268
269
270
271#define SPRITESTUDIO6SDK_SSAR_DECLARE_ENUM(t) spritestudio6::__SSAR_DECLARE_ENUM__( ar , t , #t)
272#define SPRITESTUDIO6SDK_SSAR_DECLARE_ATTRIBUTE_ENUM(t) spritestudio6::__SSAR_DECLARE_ATTRIBUTE_ENUM__( ar , t , #t)
273
274
275bool StringToPoint2( const std::string& str , SsPoint2& point );
276bool StringToIRect( const std::string& str , SsIRect& rect );
277bool StringToTriangle(const std::string& str, SsTriangle& tri);
278
279
281void SsArchiverInit();
282
283
284#define SPRITESTUDIO6SDK_AR_SELF_CHECK() if ( this->getxml() == 0 ) return false;
285
286
287
288} // namespace spritestudio6
289
290#endif
アーカイバクラスのインターフェース
Definition ssarchiver.h:47
virtual bool dc(const char *name, SsCurve &member)=0
void firstChild(ISsXmlArchiver *ar, const char *element_name)
Definition ssarchiver.h:61
virtual bool dc_attr(const char *name, SsString &member)=0
virtual bool dc(const char *name, SsXmlRangeValueConverter &member)=0
virtual bool dc(const char *name, float &member)=0
virtual bool dc(const char *name, std::vector< SsPoint2 > &list)=0
void setDocumet(libXML::XMLDocument *doc, const char *element_name)
Definition ssarchiver.h:66
virtual bool dc(const char *name, SsPoint2 &member)=0
virtual bool dc(const char *name, SsString &member)=0
ISsXmlArchiver()
Definition ssarchiver.h:56
virtual bool dc(const char *name, std::vector< SsString > &list)=0
virtual bool dc(const char *name, std::map< SsString, int > &_map)=0
virtual bool dc(const char *name, bool &member)=0
virtual bool dc(const char *name, std::vector< SsTriangle > &list)=0
virtual ~ISsXmlArchiver()
Definition ssarchiver.h:57
void setElement(libXML::XMLElement *e)
Definition ssarchiver.h:71
libXML::XMLElement * getxml()
Definition ssarchiver.h:59
virtual bool dc(const char *name, int &member)=0
virtual bool dc_attr(const char *name, int &member)=0
virtual EnumSsArchiver::Type getType()
Definition ssarchiver.h:53
曲線補間計算用パラメータ
Definition sstypes.h:355
アーカイバクラス インプットクラス
Definition ssarchiver.h:113
virtual bool dc(const char *name, SsXmlRangeValueConverter &member)
Definition ssarchiver.h:146
bool dc(const char *name, std::vector< myclass * > &list, const std::string key="value")
Definition ssarchiver.h:172
bool dc_attr(const char *name, myclass &type)
Definition ssarchiver.h:201
virtual bool dc_attr(const char *name, SsString &member)
Definition ssarchiver.cpp:8
virtual ~SsXmlIArchiver()
Definition ssarchiver.h:133
bool dc(const char *name, myclass &type)
Definition ssarchiver.h:192
virtual EnumSsArchiver::Type getType()
Definition ssarchiver.h:115
SsXmlIArchiver(libXML::XMLDocument *doc, const char *element_name)
Definition ssarchiver.h:122
SsXmlIArchiver(ISsXmlArchiver *ar, const char *element_name)
Definition ssarchiver.h:118
virtual bool dc(const char *name, int &member)
Definition ssarchiver.cpp:30
SsXmlIArchiver(libXML::XMLElement *e)
Definition ssarchiver.h:127
Definition ssarchiver.h:36
virtual bool inputString(SsString value, SsString subvalue)=0
virtual ~SsXmlRangeValueConverter()
Definition ssarchiver.h:39
SsXmlRangeValueConverter()
Definition ssarchiver.h:38
GLfloat value
Definition glad.h:2667
GLdouble v
Definition glad.h:2712
GLint GLint GLsizei GLint GLenum GLenum type
Definition glad.h:1980
GLuint const GLchar * name
Definition glad.h:3345
シリアライズクラスのInput/Outputの状態
Definition ssarchiver.h:23
Type
Definition ssarchiver.h:25
@ unkown
Definition ssarchiver.h:26
@ in
Definition ssarchiver.h:27
@ out
Definition ssarchiver.h:28
Definition ISsEffectRender.h:5
void __StringToEnum_(SsString n, SsPartType::_enum &out)
Definition sstypes.cpp:30
bool __SSAR_DECLARE_LIST__(ISsXmlArchiver *ar, std::vector< myclass * > &list, const char *name, const std::string key="value")
Definition ssarchiver.h:222
bool StringToTriangle(const std::string &str, SsTriangle &tri)
Definition ssarchiver.cpp:269
bool StringToIRect(const std::string &str, SsIRect &rect)
Definition ssarchiver.cpp:307
void SsArchiverInit()
SpriteStudio XMLデータ読み書きの初期化
Definition ssarchiver.cpp:328
SsTRect< int > SsIRect
Definition sstypes.h:223
bool __SSAR_DECLARE_ATTRIBUTE_ENUM__(ISsXmlArchiver *ar, myclass &type, const char *name)
Definition ssarchiver.h:256
bool StringToPoint2(const std::string &str, SsPoint2 &point)
Definition ssarchiver.cpp:289
bool __SSAR_DECLARE_ENUM__(ISsXmlArchiver *ar, myclass &type, const char *name)
Definition ssarchiver.h:242
std::string SsString
Definition sstypes.h:30
2次元座標を表現するためのクラスです。
Definition sstypes.h:36
Definition sstypes.h:934