Loading...
Searching...
No Matches
Stream.h
Go to the documentation of this file.
// Copyright Contributors to the OpenVDB Project
// SPDX-License-Identifier: MPL-2.0
#ifndef OPENVDB_IO_STREAM_HAS_BEEN_INCLUDED
#define OPENVDB_IO_STREAM_HAS_BEEN_INCLUDED
#include "Archive.h"
#include <iosfwd>
#include <memory>
namespace openvdb {
OPENVDB_USE_VERSION_NAMESPACE
namespace OPENVDB_VERSION_NAME {
namespace io {
class GridDescriptor;
/// Grid archive associated with arbitrary input and output streams (not necessarily files)
class OPENVDB_API Stream: public Archive
{
public:
/// @brief Read grids from an input stream.
/// @details If @a delayLoad is true, map the contents of the input stream
/// into memory and enable delayed loading of grids.
/// @note Define the environment variable @c OPENVDB_DISABLE_DELAYED_LOAD
/// to disable delayed loading unconditionally.
explicit Stream(std::istream&, bool delayLoad = true);
/// Construct an archive for stream output.
Stream();
/// Construct an archive for output to the given stream.
explicit Stream(std::ostream&);
Stream(const Stream&);
Stream& operator=(const Stream&);
~Stream() override;
/// @brief Return a copy of this archive.
Archive::Ptr copy() const override;
/// Return the file-level metadata in a newly created MetaMap.
MetaMap::Ptr getMetadata() const;
/// Return pointers to the grids that were read from the input stream.
GridPtrVecPtr getGrids();
/// @brief Write the grids in the given container to this archive's output stream.
/// @throw ValueError if this archive was constructed without specifying an output stream.
void write(const GridCPtrVec&, const MetaMap& = MetaMap()) const override;
/// @brief Write the grids in the given container to this archive's output stream.
/// @throw ValueError if this archive was constructed without specifying an output stream.
template<typename GridPtrContainerT>
void write(const GridPtrContainerT&, const MetaMap& = MetaMap()) const;
private:
/// Create a new grid of the type specified by the given descriptor,
/// then populate the grid from the given input stream.
/// @return the newly created grid.
GridBase::Ptr readGrid(const GridDescriptor&, std::istream&) const;
void writeGrids(std::ostream&, const GridCPtrVec&, const MetaMap&) const;
struct Impl;
std::unique_ptr<Impl> mImpl;
};
////////////////////////////////////////
template<typename GridPtrContainerT>
inline void
Stream::write(const GridPtrContainerT& container, const MetaMap& metadata) const
{
GridCPtrVec grids;
std::copy(container.begin(), container.end(), std::back_inserter(grids));
this->write(grids, metadata);
}
} // namespace io
} // namespace OPENVDB_VERSION_NAME
} // namespace openvdb
#endif // OPENVDB_IO_STREAM_HAS_BEEN_INCLUDED
Archive.h
OPENVDB_API
#define OPENVDB_API
Definition Platform.h:251
openvdb::v10_0::GridBase::Ptr
SharedPtr< GridBase > Ptr
Definition Grid.h:80
openvdb::v10_0::MetaMap
Container that maps names (strings) to values of arbitrary types.
Definition MetaMap.h:20
openvdb::v10_0::MetaMap::Ptr
SharedPtr< MetaMap > Ptr
Definition MetaMap.h:22
openvdb::v10_0::io::Archive::Archive
Archive()
openvdb::v10_0::io::Archive::Ptr
SharedPtr< Archive > Ptr
Definition Archive.h:35
openvdb::v10_0::io::GridDescriptor
Definition GridDescriptor.h:20
openvdb::v10_0::io::Stream::Stream
Stream(const Stream &)
openvdb::v10_0::io::Stream::operator=
Stream & operator=(const Stream &)
openvdb::v10_0::io::Stream::getGrids
GridPtrVecPtr getGrids()
Return pointers to the grids that were read from the input stream.
openvdb::v10_0::io::Stream::write
void write(const GridCPtrVec &, const MetaMap &=MetaMap()) const override
Write the grids in the given container to this archive's output stream.
openvdb::v10_0::io::Stream::Stream
Stream()
Construct an archive for stream output.
openvdb::v10_0::io::Stream::copy
Archive::Ptr copy() const override
Return a copy of this archive.
openvdb::v10_0::io::Stream::getMetadata
MetaMap::Ptr getMetadata() const
Return the file-level metadata in a newly created MetaMap.
openvdb::v10_0::io::Stream::Stream
Stream(std::ostream &)
Construct an archive for output to the given stream.
openvdb::v10_0::io::Stream::~Stream
~Stream() override
openvdb::v10_0::io::Stream::Stream
Stream(std::istream &, bool delayLoad=true)
Read grids from an input stream.
openvdb::v10_0::GridPtrVecPtr
SharedPtr< GridPtrVec > GridPtrVecPtr
Definition Grid.h:511
openvdb::v10_0::GridCPtrVec
std::vector< GridBase::ConstPtr > GridCPtrVec
Definition Grid.h:513
openvdb
Definition Exceptions.h:13
OPENVDB_VERSION_NAME
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition version.h.in:121
OPENVDB_USE_VERSION_NAMESPACE
#define OPENVDB_USE_VERSION_NAMESPACE
Definition version.h.in:212