42namespace ALEMBIC_VERSION_NS {
44class IStreams::PrivateData
63 if (!fileName.empty())
65 std::vector<std::istream *>::iterator
it;
66 for (
it = streams.begin();
it != streams.end(); ++
it)
68 std::ifstream *
filestream =
dynamic_cast<std::ifstream *
>(*it);
78 std::vector<std::istream *> streams;
79 std::vector<Alembic::Util::uint64_t> offsets;
80 Alembic::Util::mutex * locks;
84 Alembic::Util::uint16_t version;
91 std::ifstream *
filestream =
new std::ifstream;
108 mData->streams.clear();
118 mData->locks =
new Alembic::Util::mutex[
mData->streams.size()];
121IStreams::IStreams(
const std::vector< std::istream * > &
iStreams) :
128 mData->streams.clear();
132 mData->locks =
new Alembic::Util::mutex[
mData->streams.size()];
147 throw std::runtime_error(
148 "Ogawa currently only supports little-endian reading.");
151 if (
mData->streams.empty())
158 for (std::size_t
i = 0;
i <
mData->streams.size(); ++
i)
160 char header[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
161 mData->offsets.push_back(
mData->streams[
i]->tellg());
166 mData->frozen =
false;
167 mData->valid =
false;
172 Alembic::Util::uint16_t version = (
header[6] << 8) |
header[7];
174 *((Alembic::Util::uint64_t *)(&(
header[8])));
179 mData->frozen = frozen;
180 mData->version = version;
184 mData->version != version)
186 mData->frozen =
false;
187 mData->valid =
false;
199bool IStreams::isValid()
204bool IStreams::isFrozen()
206 return mData->frozen;
209Alembic::Util::uint16_t IStreams::getVersion()
211 return mData->version;
214void IStreams::read(std::size_t
iThreadId, Alembic::Util::uint64_t
iPos,
215 Alembic::Util::uint64_t
iSize,
void *
oBuf)
233 if (stream ==
NULL && !
mData->fileName.empty())
235 std::ifstream *
filestream =
new std::ifstream;