Program Listing for File BinaryFileReaderWriter.h

Return to documentation for file (Utilities/BinaryFileReaderWriter.h)

#ifndef __BinaryFileReaderWriter_H__
#define __BinaryFileReaderWriter_H__

#include <iostream>
#include <fstream>

#include "SPlisHSPlasH/Common.h"

namespace SPH
{
    class BinaryFileWriter
    {
    public:
        std::ofstream m_file;

    public:

        bool openFile(const std::string &fileName)
        {
            m_file.open(fileName, std::ios::out | std::ios::binary);
            if (!m_file.is_open())
            {
                std::cout << "Cannot open file.\n";
                return false;
            }
            return true;
        }

        void closeFile()
        {
            m_file.close();
        }

        void writeBuffer(const char *buffer, size_t size)
        {
            m_file.write(buffer, size);
        }

        template<typename T>
        void write(const T &v)
        {
            writeBuffer((char*)&v, sizeof(T));
        }

        void write(const std::string &str)
        {
            write((unsigned int) str.size());
            writeBuffer(str.c_str(), str.size());
        }

        template<typename T>
        void writeMatrix(const T &m)
        {
            writeBuffer((char*)m.data(), m.size() * sizeof(m.data()[0]));
        }
    };

    class BinaryFileReader
    {
    public:
        std::ifstream m_file;

    public:

        bool openFile(const std::string &fileName)
        {
            m_file.open(fileName, std::ios::in | std::ios::binary);
            if (!m_file.is_open())
            {
                std::cout << "Cannot open file.\n";
                return false;
            }
            return true;
        }

        void closeFile()
        {
            m_file.close();
        }

        void readBuffer(char *buffer, size_t size)
        {
            m_file.read(buffer, size);
        }

        template<typename T>
        void read(T &v)
        {
            readBuffer((char*)&v, sizeof(T));
        }

        void read(std::string &str)
        {
            unsigned int len;
            read(len);
            char* temp = new char[len + 1u];
            readBuffer(temp, len);
            temp[len] = '\0';
            str = temp;
        }

        template<typename T>
        void readMatrix(T &m)
        {
            readBuffer((char*)m.data(), m.size() * sizeof(m.data()[0]));
        }
    };


}

#endif