PBRT
/home/felix/UBC/projects/AdaptiveLightfieldSampling/pbrt_v2/src/3rdparty/openexr-1.7.0/ImfOpaqueAttribute.h
00001 
00002 //
00003 // Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
00004 // Digital Ltd. LLC
00005 // 
00006 // All rights reserved.
00007 // 
00008 // Redistribution and use in source and binary forms, with or without
00009 // modification, are permitted provided that the following conditions are
00010 // met:
00011 // *       Redistributions of source code must retain the above copyright
00012 // notice, this list of conditions and the following disclaimer.
00013 // *       Redistributions in binary form must reproduce the above
00014 // copyright notice, this list of conditions and the following disclaimer
00015 // in the documentation and/or other materials provided with the
00016 // distribution.
00017 // *       Neither the name of Industrial Light & Magic nor the names of
00018 // its contributors may be used to endorse or promote products derived
00019 // from this software without specific prior written permission. 
00020 // 
00021 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00024 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00025 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00026 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00027 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00028 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00029 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00030 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00031 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00032 //
00034 
00035 
00036 
00037 #ifndef INCLUDED_IMF_OPAQUE_ATTRIBUTE_H
00038 #define INCLUDED_IMF_OPAQUE_ATTRIBUTE_H
00039 
00040 //-----------------------------------------------------------------------------
00041 //
00042 //      class OpaqueAttribute
00043 //
00044 //      When an image file is read, OpqaqueAttribute objects are used
00045 //      to hold the values of attributes whose types are not recognized
00046 //      by the reading program.  OpaqueAttribute objects can be read
00047 //      from an image file, copied, and written back to to another image
00048 //      file, but their values are inaccessible.
00049 //
00050 //-----------------------------------------------------------------------------
00051 
00052 #include <ImfAttribute.h>
00053 #include <ImfArray.h>
00054 
00055 namespace Imf {
00056 
00057 
00058 class OpaqueAttribute: public Attribute
00059 {
00060   public:
00061 
00062     //----------------------------
00063     // Constructors and destructor
00064     //----------------------------
00065 
00066     OpaqueAttribute (const char typeName[]);
00067     OpaqueAttribute (const OpaqueAttribute &other);
00068     virtual ~OpaqueAttribute ();
00069 
00070 
00071     //-------------------------------
00072     // Get this attribute's type name
00073     //-------------------------------
00074 
00075     virtual const char *        typeName () const;
00076     
00077 
00078     //------------------------------
00079     // Make a copy of this attribute
00080     //------------------------------
00081 
00082     virtual Attribute *         copy () const;
00083 
00084 
00085     //----------------
00086     // I/O and copying
00087     //----------------
00088 
00089     virtual void                writeValueTo (OStream &os,
00090                                               int version) const;
00091 
00092     virtual void                readValueFrom (IStream &is,
00093                                                int size,
00094                                                int version);
00095 
00096     virtual void                copyValueFrom (const Attribute &other);
00097 
00098 
00099   private:
00100 
00101     Array<char>                 _typeName;
00102     long                        _dataSize;
00103     Array<char>                 _data;
00104 };
00105 
00106 
00107 } // namespace Imf
00108 
00109 // Metrowerks compiler wants the .cpp file inlined, too
00110 #ifdef __MWERKS__
00111 #include <ImfOpaqueAttribute.cpp>
00112 #endif
00113 
00114 #endif