/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * This file is part of xlslib -- A multiplatform, C/C++ library * for dynamic generation of Excel(TM) files. * * Copyright 2004 Yeico S. A. de C. V. All Rights Reserved. * Copyright 2008-2013 David Hoerl All Rights Reserved. * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY David Hoerl ''AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL David Hoerl OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "../oledoc/binfile.h" #include "../xlslib/unit.h" using namespace xlslib_core; using namespace xlslib_strings; /* ****************************** * CBinFile class Implementation ****************************** */ CBinFile::CBinFile() : m_File() { } CBinFile::~CBinFile() { Close(); } int CBinFile::Open(const string& file_name) { Close(); m_File.open(file_name.c_str(), std::ios_base::binary|std::ios_base::out); return m_File.good() ? NO_ERRORS : FILE_ERROR; } int CBinFile::Close(void) { if(m_File.is_open()) { m_File.close(); } return NO_ERRORS; } unsigned32_t CBinFile::Position(void) { unsigned32_t pt = 0; if(m_File.is_open()) { pt = (unsigned32_t)m_File.tellp(); } return pt; } int CBinFile::Write(unsigned8_t * data, size_t size) { int errcode; errcode = write_service((const char*)data, size); return errcode; } int CBinFile::Write(CUnit& data_unit) { int errcode; errcode = write_service((const char*)data_unit.GetBuffer(), data_unit.GetDataSize()); return errcode; } int CBinFile::WriteByte(unsigned8_t byte) { int errcode; errcode = write_service((const char*)&byte, 1); return errcode; } int CBinFile::WriteUnsigned16(unsigned16_t data) { int errcode; errcode = WriteByte(BYTE_0(data)); if (errcode != NO_ERRORS) { return errcode; } errcode = WriteByte(BYTE_1(data)); return errcode; } int CBinFile::WriteUnsigned32(unsigned32_t data) { int errcode; errcode = WriteByte(BYTE_0(data)); if (errcode != NO_ERRORS) { return errcode; } errcode = WriteByte(BYTE_1(data)); if (errcode != NO_ERRORS) { return errcode; } errcode = WriteByte(BYTE_2(data)); if (errcode != NO_ERRORS) { return errcode; } errcode = WriteByte(BYTE_3(data)); return errcode; } int CBinFile::WriteSigned16(signed16_t data) { int errcode; errcode = WriteByte(BYTE_0((unsigned32_t)data)); if (errcode != NO_ERRORS) { return errcode; } errcode = WriteByte(BYTE_1((unsigned32_t)data)); return errcode; } int CBinFile::WriteSigned32(signed32_t data) { int errcode; errcode = WriteByte(BYTE_0((unsigned32_t)data)); if (errcode != NO_ERRORS) { return errcode; } errcode = WriteByte(BYTE_1((unsigned32_t)data)); if (errcode != NO_ERRORS) { return errcode; } errcode = WriteByte(BYTE_2((unsigned32_t)data)); if (errcode != NO_ERRORS) { return errcode; } errcode = WriteByte(BYTE_3((unsigned32_t)data)); return errcode; } int CBinFile::WriteByteArray(const unsigned8_t *data, size_t size) { int errcode; errcode = write_service((const char*)data, size); return errcode; } int CBinFile::SerializeFixedArray(const unsigned8_t data, size_t size) { int errcode = NO_ERRORS; for (size_t i = 0; i 1) { m_File.write(buffer, static_cast(size)); } else if(size == 1) { m_File.put(*buffer); } } return m_File.good() ? NO_ERRORS : FILE_ERROR; }