a8/a8/xobject.h
2018-11-20 20:32:56 +08:00

65 lines
1.6 KiB
C++

#ifndef A8_XOBJECT_H
#define A8_XOBJECT_H
namespace Json
{
class Value;
}
namespace tinyxml2
{
class XMLElement;
}
namespace a8
{
const int XOT_SIMPLE = 0;
const int XOT_ARRAY = 1;
const int XOT_OBJECT = 2;
class XObject
{
public:
XObject();
XObject(a8::XValue& val);
~XObject();
unsigned char GetType();
int Size();
a8::XValue AsXValue();
std::shared_ptr<a8::XObject> operator[] (int i);
std::shared_ptr<a8::XObject> operator[] (const std::string& key);
std::shared_ptr<a8::XObject> At(int i);
std::shared_ptr<a8::XObject> At(const std::string& key);
bool HasKey(const std::string& key);
bool HasKey(int i);
const a8::XObject& operator=(const a8::XObject& obj);
a8::XObject& Move(a8::XObject& a);
bool ReadFromFile(const std::string& filename);
bool ReadFromJsonString(const std::string& jsondata);
bool ReadFromXmlFile(const std::string& filename);
bool ReadFromXmlString(const std::string& xmldata);
void ToJsonStr(std::string& data);
void ToUrlEncodeStr(std::string& data);
private:
void JsonValueToXObject(Json::Value& json_val, a8::XObject& xobject);
void XmlElementToXObject(tinyxml2::XMLElement* xml_ele, a8::XObject& xobject);
protected:
unsigned char type_ = a8::XOT_SIMPLE;
union {
a8::XValue* x_value;
std::vector<std::shared_ptr<a8::XObject>>* array_value;
std::map<std::string, std::shared_ptr<a8::XObject>>* object_value;
} value_ = {0};
};
}
#endif