#pragma once #include #include #include #include #include #include #include #include #include namespace Swan { struct SRF { virtual ~SRF() = default; virtual void serialize(std::ostream &os) const = 0; virtual void parse(std::istream &is) = 0; virtual std::ostream &pretty(std::ostream &os) const = 0; static SRF *read(std::istream &is); }; struct SRFObject: SRF { SRFObject() {} SRFObject(std::initializer_list> lst); void serialize(std::ostream &os) const override; void parse(std::istream &os) override; std::ostream &pretty(std::ostream &os) const override; std::unordered_map> val; }; struct SRFArray: SRF { SRFArray() {} SRFArray(std::initializer_list lst); void serialize(std::ostream &os) const override; void parse(std::istream &os) override; std::ostream &pretty(std::ostream &os) const override; std::vector> val; }; struct SRFString: SRF { SRFString(): val("") {} SRFString(const std::string &v): val(v) {} void serialize(std::ostream &os) const override; void parse(std::istream &os) override; std::ostream &pretty(std::ostream &os) const override; std::string val; }; struct SRFByte: SRF { SRFByte(): val(0) {} SRFByte(uint8_t v): val(v) {} void serialize(std::ostream &os) const override; void parse(std::istream &os) override; std::ostream &pretty(std::ostream &os) const override; uint8_t val; }; struct SRFWord: SRF { SRFWord(): val(0) {} SRFWord(uint16_t v): val(v) {} void serialize(std::ostream &os) const override; void parse(std::istream &os) override; std::ostream &pretty(std::ostream &os) const override; uint16_t val; }; struct SRFInt: SRF { SRFInt(): val(0) {} SRFInt(int32_t v): val(v) {} void serialize(std::ostream &os) const override; void parse(std::istream &os) override; std::ostream &pretty(std::ostream &os) const override; int32_t val; }; struct SRFFloat: SRF { SRFFloat(): val(0) {} SRFFloat(float v): val(v) {} void serialize(std::ostream &os) const override; void parse(std::istream &os) override; std::ostream &pretty(std::ostream &os) const override; float val; }; struct SRFDouble: SRF { SRFDouble(): val(0) {} SRFDouble(double v): val(v) {} void serialize(std::ostream &os) const override; void parse(std::istream &os) override; std::ostream &pretty(std::ostream &os) const override; double val; }; struct SRFNone: SRF { void serialize(std::ostream &os) const override; void parse(std::istream &os) override; std::ostream &pretty(std::ostream &os) const override; }; struct SRFByteArray: SRF { SRFByteArray() = default; SRFByteArray(std::initializer_list lst): val(lst) {} SRFByteArray(std::vector v): val(v) {} void serialize(std::ostream &os) const override; void parse(std::istream &os) override; std::ostream &pretty(std::ostream &os) const override; std::vector val; }; struct SRFWordArray: SRF { SRFWordArray() = default; SRFWordArray(std::initializer_list v): val(v) {} SRFWordArray(std::vector v): val(v) {} void serialize(std::ostream &os) const override; void parse(std::istream &os) override; std::ostream &pretty(std::ostream &os) const override; std::vector val; }; struct SRFIntArray: SRF { SRFIntArray() = default; SRFIntArray(std::initializer_list v): val(v) {} SRFIntArray(std::vector v): val(v) {} void serialize(std::ostream &os) const override; void parse(std::istream &os) override; std::ostream &pretty(std::ostream &os) const override; std::vector val; }; struct SRFFloatArray: SRF { SRFFloatArray() = default; SRFFloatArray(std::initializer_list v): val(v) {} SRFFloatArray(std::vector v): val(v) {} void serialize(std::ostream &os) const override; void parse(std::istream &os) override; std::ostream &pretty(std::ostream &os) const override; std::vector val; }; struct SRFDoubleArray: SRF { SRFDoubleArray() = default; SRFDoubleArray(std::initializer_list v): val(v) {} SRFDoubleArray(std::vector v): val(v) {} void serialize(std::ostream &os) const override; void parse(std::istream &os) override; std::ostream &pretty(std::ostream &os) const override; std::vector val; }; }