root/src/BinaryWriter.cpp

////////////////////////////////////////////////////////////////////////
// Copyright (c) Nehmulos 2011-2014
// This file is part of N0 Strain Serialization Library.
//
// N0Strain-Serialization-Library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// N0Strain-Serialization-Library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with N0Strain-Serialization-Library.  If not, see https://gnu.org/licenses/lgpl-3.0
////////////////////////////////////////////////////////////////////////




#include "BinaryWriter.h"

namespace nw {

BinaryWriter::BinaryWriter(const String filepath) : Describer(), file(BinaryFstream(filepath.c_str(), "wb"))
{
        writeValidationSequence();
}

BinaryWriter::~BinaryWriter()
{
        if(file.isOpen())
                close();
}

void BinaryWriter::close()
{
        writeValidationSequence();
        file.close();
}
bool BinaryWriter::isInWriteMode() { return true; }

bool BinaryWriter::push(const String tagName)
{
        file << true;
        return true;
}
void BinaryWriter::describeArray(const String arrayName, const String elementsName, unsigned int size)
{
        arraySize.push(size);
        file << size;
}
void BinaryWriter::describeValueArray(const String arrayName, unsigned int size)
{
        describeArray("","",size);
}
bool BinaryWriter::enterNextElement(unsigned int iterator)
{
        if(iterator < arraySize.top())
        {
                return true;
        }
        else
        {
                arraySize.pop();
                return false;
        }

}
void BinaryWriter::describeName(const String name)
{

}
void BinaryWriter::describeValue(String& ref)
{
        this->file << ref;
}
void BinaryWriter::describeValue(double& ref)
{
        this->file << ref;
}
void BinaryWriter::describeValue(char& ref)
{
        this->file << ref;
}
void BinaryWriter::describeValue(unsigned char& ref)
{
        this->file << ref;
}
void BinaryWriter::describeValue(int& ref)
{
        this->file << ref;
}
void BinaryWriter::describeValue(unsigned int& ref)
{
        this->file << ref;
}
void BinaryWriter::describeValue(float& ref)
{
        this->file << ref;
}
void BinaryWriter::describeValue(bool& ref)
{
        this->file << ref;
}
void BinaryWriter::describeValue( signed char& ref)
{
        this->file << ref;
}
void BinaryWriter::describeValue( short& ref)
{
        this->file << ref;
}
void BinaryWriter::describeValue( unsigned short& ref)
{
        this->file << ref;
}
void BinaryWriter::describeValue( long& ref)
{
        this->file << ref;
}
void BinaryWriter::describeValue( unsigned long& ref)
{
        this->file << ref;
}
void BinaryWriter::describeValue( long long& ref)
{
        this->file << ref;
}
void BinaryWriter::describeValue( long double& ref)
{
        this->file << ref;
}
void BinaryWriter::describeValue(Pointer pointerToPointer)
{
        unsigned int id = getIDForSerializedObject(pointerToPointer);
        this->file << id;
//      registerPointer(pointer);
}
void BinaryWriter::describeBlob(const String blobName, nw::Pointer binaryBlob, unsigned int blobSize)
{
        this->file.write(binaryBlob, blobSize);
}
void BinaryWriter::comment(const String text) {}

void BinaryWriter::pop() {}

void BinaryWriter::writeValidationSequence()
{
        String validationSequence = N0Slib_Binary_ValidationBytes;
        this->file << validationSequence;
}

}  // namespace nw