31 #ifndef OPENVDB_METADATA_METADATA_HAS_BEEN_INCLUDED
32 #define OPENVDB_METADATA_METADATA_HAS_BEEN_INCLUDED
40 #include <boost/shared_ptr.hpp>
41 #include <boost/cstdint.hpp>
52 typedef boost::shared_ptr<Metadata>
Ptr;
53 typedef boost::shared_ptr<const Metadata>
ConstPtr;
59 virtual Name typeName()
const = 0;
65 virtual void copy(
const Metadata& other) = 0;
68 virtual std::string str()
const = 0;
72 virtual bool asBool()
const = 0;
80 virtual Index32 size()
const = 0;
83 void read(std::istream&);
85 void write(std::ostream&)
const;
91 static bool isRegisteredType(
const Name& typeName);
94 static void clearRegistry();
97 static void registerType(
const Name& typeName,
Metadata::Ptr (*createMetadata)());
98 static void unregisterType(
const Name& typeName);
102 static Index32 readSize(std::istream&);
104 void writeSize(std::ostream&)
const;
107 virtual void readValue(std::istream&,
Index32 numBytes) = 0;
109 virtual void writeValue(std::ostream&)
const = 0;
127 virtual std::string
str()
const {
return "<unknown>"; }
128 virtual bool asBool()
const {
return false; }
132 virtual void readValue(std::istream&s,
Index32 numBytes);
133 virtual void writeValue(std::ostream&)
const;
142 typedef boost::shared_ptr<TypedMetadata<T> >
Ptr;
143 typedef boost::shared_ptr<const TypedMetadata<T> >
ConstPtr;
150 virtual Name typeName()
const;
152 virtual void copy(
const Metadata& other);
153 virtual std::string str()
const;
154 virtual bool asBool()
const;
158 void setValue(
const T&);
161 const T& value()
const;
170 static void registerType();
171 static void unregisterType();
172 static bool isRegisteredType();
175 virtual void readValue(std::istream&,
Index32 numBytes);
176 virtual void writeValue(std::ostream&)
const;
192 const Index32 n = this->size();
193 os.write(reinterpret_cast<const char*>(&n),
sizeof(
Index32));
201 is.read(reinterpret_cast<char*>(&n),
sizeof(
Index32));
209 const Index32 numBytes = this->readSize(is);
210 this->readValue(is, numBytes);
218 this->writeValue(os);
225 template <
typename T>
231 template <
typename T>
237 template <
typename T>
245 template <
typename T>
251 template <
typename T>
258 template <
typename T>
265 template <
typename T>
272 template <
typename T>
279 template <
typename T>
284 metadata->copy(*
this);
288 template <
typename T>
303 is.read(reinterpret_cast<char*>(&mValue), this->size());
310 os.write(reinterpret_cast<const char*>(&mValue), this->size());
313 template <
typename T>
317 std::ostringstream ostr;
329 template <
typename T>
337 template <
typename T>
345 template <
typename T>
352 template <
typename T>
364 return (mValue ?
"true" :
"false");
371 ostr << metadata.
str();
393 #endif // OPENVDB_METADATA_METADATA_HAS_BEEN_INCLUDED
TypedMetadata< boost::int64_t > Int64Metadata
Definition: metadata/Metadata.h:380
TypedMetadata< float > FloatMetadata
Definition: metadata/Metadata.h:378
General-purpose arithmetic and comparison routines, most of which accept arbitrary value types (or at...
bool operator==(const Vec3< T0 > &v0, const Vec3< T1 > &v1)
Equality operator, does exact floating point comparisons.
Definition: Vec3.h:450
std::ostream & operator<<(std::ostream &ostr, const Metadata &metadata)
Write a Metadata to an output stream.
Definition: metadata/Metadata.h:369
#define OPENVDB_THROW(exception, message)
Definition: Exceptions.h:97
uint32_t Index32
Definition: Types.h:56
TypedMetadata< Vec2s > Vec2SMetadata
Definition: metadata/Metadata.h:383
TypedMetadata< double > DoubleMetadata
Definition: metadata/Metadata.h:377
TypedMetadata< Vec3s > Vec3SMetadata
Definition: metadata/Metadata.h:386
TypedMetadata< Mat4s > Mat4SMetadata
Definition: metadata/Metadata.h:387
TypedMetadata< Vec2i > Vec2IMetadata
Definition: metadata/Metadata.h:382
TypedMetadata< Vec3i > Vec3IMetadata
Definition: metadata/Metadata.h:385
#define OPENVDB_VERSION_NAME
Definition: version.h:43
TypedMetadata< bool > BoolMetadata
Definition: metadata/Metadata.h:376
bool isZero(const Type &x)
Return true if x is exactly equal to zero.
Definition: Math.h:324
std::string Name
Definition: Name.h:44
Definition: Exceptions.h:39
TypedMetadata< boost::int32_t > Int32Metadata
Definition: metadata/Metadata.h:379
TypedMetadata< Vec2d > Vec2DMetadata
Definition: metadata/Metadata.h:381
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h:71
Definition: Exceptions.h:87
TypedMetadata< Mat4d > Mat4DMetadata
Definition: metadata/Metadata.h:388
TypedMetadata< Vec3d > Vec3DMetadata
Definition: metadata/Metadata.h:384