Coverage Report

Created: 2025-07-11 06:05

/src/alembic/lib/Alembic/Ogawa/OData.cpp
Line
Count
Source (jump to first uncovered line)
1
//-*****************************************************************************
2
//
3
// Copyright (c) 2013,
4
//  Sony Pictures Imageworks Inc. and
5
//  Industrial Light & Magic, a division of Lucasfilm Entertainment Company Ltd.
6
//
7
// All rights reserved.
8
//
9
// Redistribution and use in source and binary forms, with or without
10
// modification, are permitted provided that the following conditions are
11
// met:
12
// *       Redistributions of source code must retain the above copyright
13
// notice, this list of conditions and the following disclaimer.
14
// *       Redistributions in binary form must reproduce the above
15
// copyright notice, this list of conditions and the following disclaimer
16
// in the documentation and/or other materials provided with the
17
// distribution.
18
// *       Neither the name of Industrial Light & Magic nor the names of
19
// its contributors may be used to endorse or promote products derived
20
// from this software without specific prior written permission.
21
//
22
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
//
34
//-*****************************************************************************
35
36
#include <Alembic/Ogawa/OGroup.h>
37
#include <Alembic/Ogawa/OData.h>
38
#include <Alembic/Ogawa/OStream.h>
39
40
namespace Alembic {
41
namespace Ogawa {
42
namespace ALEMBIC_VERSION_NS {
43
44
class OData::PrivateData
45
{
46
public:
47
48
    // for the empty dataset
49
    PrivateData()
50
0
    {
51
0
        pos = 0;
52
0
        size = 0;
53
0
    }
54
55
    PrivateData(OStreamPtr iStream,
56
                Alembic::Util::uint64_t iPos,
57
                Alembic::Util::uint64_t iSize) :
58
0
        stream(iStream), pos(iPos), size(iSize) {}
59
60
0
    ~PrivateData() {}
61
62
    OStreamPtr stream;
63
64
    Alembic::Util::uint64_t pos;
65
    Alembic::Util::uint64_t size;
66
};
67
68
0
OData::OData() : mData(new OData::PrivateData())
69
0
{
70
0
}
71
72
OData::OData(OStreamPtr iStream,
73
             Alembic::Util::uint64_t iPos,
74
             Alembic::Util::uint64_t iSize)
75
0
    : mData(new OData::PrivateData(iStream, iPos, iSize))
76
0
{
77
0
}
78
79
OData::~OData()
80
0
{
81
0
}
82
83
void OData::rewrite(Alembic::Util::uint64_t iSize, void * iData,
84
                    Alembic::Util::uint64_t iOffset)
85
0
{
86
87
    // don't write anything if we will write beyond our buffer or the
88
    // stream is invalid
89
0
    if (!mData->stream || iSize == 0 || mData->size == 0 ||
90
0
        iOffset + iSize > mData->size)
91
0
    {
92
0
        return;
93
0
    }
94
95
    // +8 is to account for the written out size
96
0
    mData->stream->seek(mData->pos + iOffset + 8);
97
0
    mData->stream->write(iData, iSize);
98
0
}
99
100
Alembic::Util::uint64_t OData::getSize() const
101
0
{
102
0
    return mData->size;
103
0
}
104
105
Alembic::Util::uint64_t OData::getPos() const
106
0
{
107
0
    return mData->pos;
108
0
}
109
110
} // End namespace ALEMBIC_VERSION_NS
111
} // End namespace Ogawa
112
} // End namespace Alembic