|
|
@@ -6,34 +6,40 @@ |
|
|
|
#include <unordered_map> |
|
|
|
#include <memory> |
|
|
|
#include <string> |
|
|
|
#include <initializer_list> |
|
|
|
#include <utility> |
|
|
|
#include <stdint.h> |
|
|
|
|
|
|
|
namespace Swan { |
|
|
|
|
|
|
|
struct SRFTag { |
|
|
|
virtual ~SRFTag() = default; |
|
|
|
struct SRFVal { |
|
|
|
virtual ~SRFVal() = default; |
|
|
|
|
|
|
|
virtual void serialize(std::ostream &os) = 0; |
|
|
|
virtual void parse(std::istream &is) = 0; |
|
|
|
|
|
|
|
static SRFTag *read(std::istream &is); |
|
|
|
static SRFVal *read(std::istream &is); |
|
|
|
}; |
|
|
|
|
|
|
|
struct SRFObject: SRFTag { |
|
|
|
struct SRFObject: SRFVal { |
|
|
|
SRFObject() {} |
|
|
|
SRFObject(std::initializer_list<std::pair<std::string, SRFVal *>> &lst); |
|
|
|
void serialize(std::ostream &os) override; |
|
|
|
void parse(std::istream &os) override; |
|
|
|
|
|
|
|
std::unordered_map<std::string, std::unique_ptr<SRFTag>> val; |
|
|
|
std::unordered_map<std::string, std::unique_ptr<SRFVal>> val; |
|
|
|
}; |
|
|
|
|
|
|
|
struct SRFArray: SRFTag { |
|
|
|
struct SRFArray: SRFVal { |
|
|
|
SRFArray() {} |
|
|
|
SRFArray(std::initializer_list<SRFVal *> &lst); |
|
|
|
void serialize(std::ostream &os) override; |
|
|
|
void parse(std::istream &os) override; |
|
|
|
|
|
|
|
std::vector<std::unique_ptr<SRFTag>> val; |
|
|
|
std::vector<std::unique_ptr<SRFVal>> val; |
|
|
|
}; |
|
|
|
|
|
|
|
struct SRFString: SRFTag { |
|
|
|
struct SRFString: SRFVal { |
|
|
|
SRFString(): val("") {} |
|
|
|
SRFString(const std::string &v): val(v) {} |
|
|
|
|
|
|
@@ -43,7 +49,7 @@ struct SRFString: SRFTag { |
|
|
|
std::string val; |
|
|
|
}; |
|
|
|
|
|
|
|
struct SRFInt: SRFTag { |
|
|
|
struct SRFInt: SRFVal { |
|
|
|
SRFInt(): val(0) {} |
|
|
|
SRFInt(int32_t v): val(v) {} |
|
|
|
|
|
|
@@ -53,7 +59,7 @@ struct SRFInt: SRFTag { |
|
|
|
int32_t val; |
|
|
|
}; |
|
|
|
|
|
|
|
struct SRFFloat: SRFTag { |
|
|
|
struct SRFFloat: SRFVal { |
|
|
|
SRFFloat(): val(0) {} |
|
|
|
SRFFloat(float v): val(v) {} |
|
|
|
|
|
|
@@ -63,7 +69,7 @@ struct SRFFloat: SRFTag { |
|
|
|
float val; |
|
|
|
}; |
|
|
|
|
|
|
|
struct SRFDouble: SRFTag { |
|
|
|
struct SRFDouble: SRFVal { |
|
|
|
SRFDouble(): val(0) {} |
|
|
|
SRFDouble(double v): val(v) {} |
|
|
|
|
|
|
@@ -73,12 +79,12 @@ struct SRFDouble: SRFTag { |
|
|
|
double val; |
|
|
|
}; |
|
|
|
|
|
|
|
struct SRFNone: SRFTag { |
|
|
|
struct SRFNone: SRFVal { |
|
|
|
void serialize(std::ostream &os) override; |
|
|
|
void parse(std::istream &os) override; |
|
|
|
}; |
|
|
|
|
|
|
|
struct SRFByteArray: SRFTag { |
|
|
|
struct SRFByteArray: SRFVal { |
|
|
|
SRFByteArray() = default; |
|
|
|
SRFByteArray(std::vector<uint8_t> v): val(v) {} |
|
|
|
|
|
|
@@ -88,7 +94,7 @@ struct SRFByteArray: SRFTag { |
|
|
|
std::vector<uint8_t> val; |
|
|
|
}; |
|
|
|
|
|
|
|
struct SRFWordArray: SRFTag { |
|
|
|
struct SRFWordArray: SRFVal { |
|
|
|
SRFWordArray() = default; |
|
|
|
SRFWordArray(std::vector<uint16_t> v): val(v) {} |
|
|
|
|
|
|
@@ -98,7 +104,7 @@ struct SRFWordArray: SRFTag { |
|
|
|
std::vector<uint16_t> val; |
|
|
|
}; |
|
|
|
|
|
|
|
struct SRFIntArray: SRFTag { |
|
|
|
struct SRFIntArray: SRFVal { |
|
|
|
SRFIntArray() = default; |
|
|
|
SRFIntArray(std::vector<int32_t> v): val(v) {} |
|
|
|
|
|
|
@@ -108,7 +114,7 @@ struct SRFIntArray: SRFTag { |
|
|
|
std::vector<int32_t> val; |
|
|
|
}; |
|
|
|
|
|
|
|
struct SRFFloatArray: SRFTag { |
|
|
|
struct SRFFloatArray: SRFVal { |
|
|
|
SRFFloatArray() = default; |
|
|
|
SRFFloatArray(std::vector<float> v): val(v) {} |
|
|
|
|
|
|
@@ -118,7 +124,7 @@ struct SRFFloatArray: SRFTag { |
|
|
|
std::vector<float> val; |
|
|
|
}; |
|
|
|
|
|
|
|
struct SRFDoubleArray: SRFTag { |
|
|
|
struct SRFDoubleArray: SRFVal { |
|
|
|
SRFDoubleArray() = default; |
|
|
|
SRFDoubleArray(std::vector<double> v): val(v) {} |
|
|
|
|