source: libebml/src/EbmlBinary.cpp @ 1443

Revision 1443, 2.8 KB checked in by astrange, 3 years ago (diff)

Merge libebml and libmatroska changes.

Line 
1/****************************************************************************
2** libebml : parse EBML files, see http://embl.sourceforge.net/
3**
4** <file/class description>
5**
6** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
7**
8** This file is part of libebml.
9**
10** This library is free software; you can redistribute it and/or
11** modify it under the terms of the GNU Lesser General Public
12** License as published by the Free Software Foundation; either
13** version 2.1 of the License, or (at your option) any later version.
14**
15** This library is distributed in the hope that it will be useful,
16** but WITHOUT ANY WARRANTY; without even the implied warranty of
17** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18** Lesser General Public License for more details.
19**
20** You should have received a copy of the GNU Lesser General Public
21** License along with this library; if not, write to the Free Software
22** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23**
24** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.
25**
26** Contact license@matroska.org if any conditions of this licensing are
27** not clear to you.
28**
29**********************************************************************/
30
31/*!
32        \file
33        \version \$Id$
34        \author Steve Lhomme     <robux4 @ users.sf.net>
35        \author Julien Coloos   <suiryc @ users.sf.net>
36*/
37#include <cassert>
38#include <string>
39
40#include "ebml/EbmlBinary.h"
41#include "ebml/StdIOCallback.h"
42
43START_LIBEBML_NAMESPACE
44
45EbmlBinary::EbmlBinary()
46 :EbmlElement(0, false), Data(NULL)
47{}
48
49EbmlBinary::EbmlBinary(const EbmlBinary & ElementToClone)
50 :EbmlElement(ElementToClone)
51{
52        if (ElementToClone.Data == NULL)
53                Data = NULL;
54        else {
55                Data = (binary *)malloc(GetSize() * sizeof(binary));
56                assert(Data != NULL);
57                memcpy(Data, ElementToClone.Data, GetSize());
58        }
59}
60
61EbmlBinary::~EbmlBinary(void) {
62        if(Data)
63                free(Data);
64}
65
66EbmlBinary::operator const binary &() const {return *Data;}
67
68
69filepos_t EbmlBinary::RenderData(IOCallback & output, bool bForceRender, bool bWithDefault)
70{
71        output.writeFully(Data,GetSize());
72
73        return GetSize();
74}
75       
76/*!
77        \note no Default binary value handled
78*/
79uint64 EbmlBinary::UpdateSize(bool bWithDefault, bool bForceRender)
80{
81        return GetSize();
82}
83
84filepos_t EbmlBinary::ReadData(IOCallback & input, ScopeMode ReadFully)
85{
86        if (Data != NULL)
87                free(Data);
88       
89    if (ReadFully == SCOPE_NO_DATA || !GetSize())
90        {
91                Data = NULL;
92                return GetSize();
93        }
94
95        Data = (binary *)malloc(GetSize());
96    if (Data == NULL)
97                throw CRTError(std::string("Error allocating data"));
98        SetValueIsSet();
99        return input.read(Data, GetSize());
100}
101
102bool EbmlBinary::operator==(const EbmlBinary & ElementToCompare) const
103{
104        return ((GetSize() == ElementToCompare.GetSize()) && !memcmp(Data, ElementToCompare.Data, GetSize()));
105}
106
107END_LIBEBML_NAMESPACE
Note: See TracBrowser for help on using the repository browser.