#ifndef XNA_CONTENT_READERS_DEFAULT_HPP #define XNA_CONTENT_READERS_DEFAULT_HPP #include "../../common/color.hpp" #include "../../common/numerics.hpp" #include "../../csharp/timespan.hpp" #include "../../default.hpp" #include "../reader.hpp" namespace xna { class ObjectReader : public ContentTypeReader { public: ObjectReader() : ContentTypeReader(typeof()) {} virtual Object Read(ContentReader& input, Object& existingInstance) override { Exception::Throw(Exception::NOT_IMPLEMENTED); return Object(); } }; class BooleanReader : public ContentTypeReaderT { public: BooleanReader() : ContentTypeReaderT(typeof()) {} bool Read(ContentReader& input, bool& existingInstance) override { return input.ReadBoolean(); } }; class ByteReader : public ContentTypeReaderT { public: ByteReader() : ContentTypeReaderT(typeof()) {} Byte Read(ContentReader& input, Byte& existingInstance) override { const auto b = input.ReadByte(); return b; } }; class CharReader : public ContentTypeReaderT { public: CharReader() : ContentTypeReaderT(typeof()) {} Char Read(ContentReader& input, Char& existingInstance) override { const auto b = input.ReadChar(); return b; } }; class ColorReader : public ContentTypeReaderT { public: ColorReader() : ContentTypeReaderT(typeof()) {} Color Read(ContentReader& input, Color& existingInstance) override { const auto i = input.ReadUInt32(); return { i }; } }; class DoubleReader : public ContentTypeReaderT { public: DoubleReader() : ContentTypeReaderT(typeof()) {} double Read(ContentReader& input, double& existingInstance) override { return input.ReadDouble(); } }; class Int16Reader : public ContentTypeReaderT { public: Int16Reader() : ContentTypeReaderT(typeof()) {} Short Read(ContentReader& input, Short& existingInstance) override { return input.ReadInt16(); } }; class Int32Reader : public ContentTypeReaderT { public: Int32Reader() : ContentTypeReaderT(typeof()) {} Int Read(ContentReader& input, Int& existingInstance) override { return input.ReadInt32(); } }; class Int64Reader : public ContentTypeReaderT { public: Int64Reader() : ContentTypeReaderT(typeof()) {} Long Read(ContentReader& input, Long& existingInstance) override { return input.ReadInt64(); } }; class MatrixReader : public ContentTypeReaderT { public: MatrixReader() : ContentTypeReaderT(typeof()) {} Matrix Read(ContentReader& input, Matrix& existingInstance) override { return input.ReadMatrix(); } }; class PointReader : public ContentTypeReaderT { public: PointReader() : ContentTypeReaderT(typeof()) {} Point Read(ContentReader& input, Point& existingInstance) override { Point point; point.X = input.ReadInt32(); point.Y = input.ReadInt32(); return point; } }; class QuaternionReader : public ContentTypeReaderT { public: QuaternionReader() : ContentTypeReaderT(typeof()) {} Quaternion Read(ContentReader& input, Quaternion& existingInstance) override { return input.ReadQuaternion(); } }; class RectangleReader : public ContentTypeReaderT { public: RectangleReader() : ContentTypeReaderT(typeof()) {} Rectangle Read(ContentReader& input, Rectangle& existingInstance) override { Rectangle rectangle; rectangle.X = input.ReadInt32(); rectangle.Y = input.ReadInt32(); rectangle.Width = input.ReadInt32(); rectangle.Height = input.ReadInt32(); return rectangle; } }; class SByteReader : public ContentTypeReaderT { public: SByteReader() : ContentTypeReaderT(typeof()) {} Sbyte Read(ContentReader& input, Sbyte& existingInstance) override { return input.ReadSByte(); } }; class SingleReader : public ContentTypeReaderT { public: SingleReader() : ContentTypeReaderT(typeof()) {} float Read(ContentReader& input, float& existingInstance) override { return input.ReadSingle(); } }; class TimeSpanReader : public ContentTypeReaderT { public: TimeSpanReader() : ContentTypeReaderT(typeof()) {} TimeSpan Read(ContentReader& input, TimeSpan& existingInstance) override { return TimeSpan::FromTicks(input.ReadInt64()); } }; class UInt16Reader : public ContentTypeReaderT { public: UInt16Reader() : ContentTypeReaderT(typeof()) {} Ushort Read(ContentReader& input, Ushort& existingInstance) override { return input.ReadUInt16(); } }; class UInt32Reader : public ContentTypeReaderT { public: UInt32Reader() : ContentTypeReaderT(typeof()) {} Uint Read(ContentReader& input, Uint& existingInstance) override { return input.ReadUInt32(); } }; class UInt64Reader : public ContentTypeReaderT { public: UInt64Reader() : ContentTypeReaderT(typeof()) {} Ulong Read(ContentReader& input, Ulong& existingInstance) override { return input.ReadUInt64(); } }; class Vector2Reader : public ContentTypeReaderT { public: Vector2Reader() : ContentTypeReaderT(typeof()) {} Vector2 Read(ContentReader& input, Vector2& existingInstance) override { return input.ReadVector2(); } }; class Vector3Reader : public ContentTypeReaderT { public: Vector3Reader() : ContentTypeReaderT(typeof()) {} Vector3 Read(ContentReader& input, Vector3& existingInstance) override { return input.ReadVector3(); } }; class Vector4Reader : public ContentTypeReaderT { public: Vector4Reader() : ContentTypeReaderT(typeof()) {} Vector4 Read(ContentReader& input, Vector4& existingInstance) override { return input.ReadVector4(); } }; template class ListReader : public ContentTypeReaderT> { public: ListReader(){} std::vector Read(ContentReader& input, std::vector& existingInstance) override { auto num = input.ReadInt32(); auto& objList = existingInstance; while (num-- > 0) { auto obj = input.ReadObject(*elementReader); objList.push_back(obj); } return objList; } void Initialize(sptr const& manager) override { elementReader = manager->GetTypeReader(typeof()); } private: PContentTypeReader elementReader = nullptr; }; } #endif