Subversion Repositories AndroidProjects

Rev

Rev 1607 | Blame | Compare with Previous | Last modification | View Log | RSS feed

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

using BauzoidNET.math;

using EndianHandling;

namespace BurutaruEditor.file
{
    public class BinarySerializer : Serializer
    {
        //======================================================================================================================================================

        private FileStream mFileStream = null;
        private EndianBinaryWriter mWriter = null;
        private EndianBinaryReader mReader = null;

        //======================================================================================================================================================

        public BinarySerializer(string filename, OpenMode mode)
            : base(filename, mode)
        {
            if (isOpenForReading())
            {
                mFileStream = File.OpenRead(filename);
                mReader = new EndianBinaryReader(mFileStream, Encoding.ASCII, true);
            }
            else if (isOpenForWriting())
            {
                mFileStream = File.OpenWrite(filename);
                mWriter = new EndianBinaryWriter(mFileStream, Encoding.ASCII, true);
            }
        }

        public override void Close()
        {
            mReader = null;
            mWriter = null;
            mFileStream.Close();
        }

        //======================================================================================================================================================

        public override void Write(string str)
        {
            byte[] bytes = Encoding.ASCII.GetBytes(str);
            mWriter.Write(bytes.Length);
            mWriter.Write(bytes);
        }

        public override void Write(float number)
        {
            mWriter.Write(number);
        }

        public override void Write(int number)
        {
            mWriter.Write(number);
        }

        public override void Write(Vector2 v)
        {
            mWriter.Write(v.x);
            mWriter.Write(v.y);
        }

        public override void Write(Vector3 v)
        {
            mWriter.Write(v.x);
            mWriter.Write(v.y);
            mWriter.Write(v.z);
        }

        public override void Write(Vector4 v)
        {
            mWriter.Write(v.x);
            mWriter.Write(v.y);
            mWriter.Write(v.z);
            mWriter.Write(v.w);
        }

        public override void Write(bool v)
        {
            Write(v ? 1 : 0);            
        }

        public override string ReadString()
        {
            int count;
            string data;
            mReader.ReadInt32(out count);
            mReader.ReadString(count, out data);
            return data;
        }

        public override float ReadFloat()
        {
            float result;
            mReader.ReadSingle(out result);
            return result;
        }

        public override int ReadInt()
        {
            int result;
            mReader.ReadInt32(out result);
            return result;
        }

        public override Vector2 ReadVector2()
        {
            float x = ReadFloat();
            float y = ReadFloat();
            return new Vector2(x, y);
        }

        public override bool ReadBool()
        {
            int n = ReadInt();
            return (n != 0);
        }

        //======================================================================================================================================================

    }
}