00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #if !defined(_XRB_BINARYFILESERIALIZER_HPP_)
00012 #define _XRB_BINARYFILESERIALIZER_HPP_
00013
00014 #include "xrb.hpp"
00015
00016 #include "xrb_serializer.hpp"
00017 #include "xrb_bitcachedfile.hpp"
00018 #include "xrb_endian.hpp"
00019
00020 namespace Xrb
00021 {
00022
00023
00024 class BinaryFileSerializer : public Serializer
00025 {
00026 public:
00027
00028 BinaryFileSerializer ();
00029 virtual ~BinaryFileSerializer ();
00030
00031 virtual bool IsAtEnd () const;
00032 virtual bool HasFewerThan8BitsLeft () const;
00033
00034 void Open (char const *path, char const *mode);
00035 void Close ();
00036
00037
00038
00039 virtual Sint32 ReadSignedBits (Uint32 bit_count);
00040 virtual void WriteSignedBits (Sint32 value, Uint32 bit_count);
00041
00042 virtual Uint32 ReadUnsignedBits (Uint32 bit_count);
00043 virtual void WriteUnsignedBits (Uint32 value, Uint32 bit_count);
00044
00045 virtual bool ReadBool ();
00046 virtual void WriteBool (bool value);
00047
00048
00049
00050 virtual Sint8 ReadSint8 ();
00051 virtual void WriteSint8 (Sint8 value);
00052
00053 virtual Uint8 ReadUint8 ();
00054 virtual void WriteUint8 (Uint8 value);
00055
00056 virtual Sint16 ReadSint16 ();
00057 virtual void WriteSint16 (Sint16 value);
00058
00059 virtual Uint16 ReadUint16 ();
00060 virtual void WriteUint16 (Uint16 value);
00061
00062 virtual Sint32 ReadSint32 ();
00063 virtual void WriteSint32 (Sint32 value);
00064
00065 virtual Uint32 ReadUint32 ();
00066 virtual void WriteUint32 (Uint32 value);
00067
00068 virtual void ReadFloat (float *destination);
00069 virtual void WriteFloat (float value);
00070
00071 virtual void ReadFloat (double *destination);
00072 virtual void WriteFloat (double value);
00073
00074 virtual Uint32 ReadBufferString (char *destination, Uint32 destination_length);
00075 virtual Uint32 WriteBufferString (char const *source, Uint32 source_length);
00076
00077 virtual void ReadColor (Color *destination);
00078 virtual void WriteColor (Color const &value);
00079
00080 virtual void ReadScreenCoordVector2 (ScreenCoordVector2 *destination);
00081 virtual void WriteScreenCoordVector2 (ScreenCoordVector2 const &value);
00082
00083 virtual void ReadFloatVector2 (FloatVector2 *destination);
00084 virtual void WriteFloatVector2 (FloatVector2 const &value);
00085
00086 virtual void ReadFloatSimpleTransform2 (FloatSimpleTransform2 *destination);
00087 virtual void WriteFloatSimpleTransform2 (FloatSimpleTransform2 const &value);
00088
00089 virtual void ReadFloatMatrix2 (FloatMatrix2 *destination);
00090 virtual void WriteFloatMatrix2 (FloatMatrix2 const &value);
00091
00092 virtual void ReadFloatTransform2 (FloatTransform2 *destination);
00093 virtual void WriteFloatTransform2 (FloatTransform2 const &value);
00094
00095 protected:
00096
00097
00098 virtual void FlushWriteCache ();
00099
00100 private:
00101
00104 BitCachedFile m_cache;
00105 };
00106
00107 }
00108
00109 #endif // !defined(_XRB_BINARYFILESERIALIZER_HPP_)