Blame IlmImf/ImfFrameBuffer.cpp

Packit 0d464f
///////////////////////////////////////////////////////////////////////////
Packit 0d464f
//
Packit 0d464f
// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
Packit 0d464f
// Digital Ltd. LLC
Packit 0d464f
// 
Packit 0d464f
// All rights reserved.
Packit 0d464f
// 
Packit 0d464f
// Redistribution and use in source and binary forms, with or without
Packit 0d464f
// modification, are permitted provided that the following conditions are
Packit 0d464f
// met:
Packit 0d464f
// *       Redistributions of source code must retain the above copyright
Packit 0d464f
// notice, this list of conditions and the following disclaimer.
Packit 0d464f
// *       Redistributions in binary form must reproduce the above
Packit 0d464f
// copyright notice, this list of conditions and the following disclaimer
Packit 0d464f
// in the documentation and/or other materials provided with the
Packit 0d464f
// distribution.
Packit 0d464f
// *       Neither the name of Industrial Light & Magic nor the names of
Packit 0d464f
// its contributors may be used to endorse or promote products derived
Packit 0d464f
// from this software without specific prior written permission. 
Packit 0d464f
// 
Packit 0d464f
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Packit 0d464f
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Packit 0d464f
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
Packit 0d464f
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
Packit 0d464f
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
Packit 0d464f
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
Packit 0d464f
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
Packit 0d464f
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
Packit 0d464f
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Packit 0d464f
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Packit 0d464f
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit 0d464f
//
Packit 0d464f
///////////////////////////////////////////////////////////////////////////
Packit 0d464f
Packit 0d464f
Packit 0d464f
Packit 0d464f
//-----------------------------------------------------------------------------
Packit 0d464f
//
Packit 0d464f
//      class Slice
Packit 0d464f
//      class FrameBuffer
Packit 0d464f
//
Packit 0d464f
//-----------------------------------------------------------------------------
Packit 0d464f
Packit 0d464f
#include <ImfFrameBuffer.h>
Packit 0d464f
#include "Iex.h"
Packit 0d464f
Packit 0d464f
Packit 0d464f
using namespace std;
Packit 0d464f
Packit 0d464f
#include "ImfNamespace.h"
Packit 0d464f
Packit 0d464f
OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER
Packit 0d464f
Packit 0d464f
Slice::Slice (PixelType t,
Packit 0d464f
              char *b,
Packit 0d464f
              size_t xst,
Packit 0d464f
              size_t yst,
Packit 0d464f
              int xsm,
Packit 0d464f
              int ysm,
Packit 0d464f
              double fv,
Packit 0d464f
              bool xtc,
Packit 0d464f
              bool ytc)
Packit 0d464f
:
Packit 0d464f
    type (t),
Packit 0d464f
    base (b),
Packit 0d464f
    xStride (xst),
Packit 0d464f
    yStride (yst),
Packit 0d464f
    xSampling (xsm),
Packit 0d464f
    ySampling (ysm),
Packit 0d464f
    fillValue (fv),
Packit 0d464f
    xTileCoords (xtc),
Packit 0d464f
    yTileCoords (ytc)
Packit 0d464f
{
Packit 0d464f
    // empty
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
void
Packit 0d464f
FrameBuffer::insert (const char name[], const Slice &slice)
Packit 0d464f
{
Packit 0d464f
    if (name[0] == 0)
Packit 0d464f
    {
Packit 0d464f
        THROW (IEX_NAMESPACE::ArgExc,
Packit 0d464f
               "Frame buffer slice name cannot be an empty string.");
Packit 0d464f
    }
Packit 0d464f
Packit 0d464f
    _map[name] = slice;
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
void
Packit 0d464f
FrameBuffer::insert (const string &name, const Slice &slice)
Packit 0d464f
{
Packit 0d464f
    insert (name.c_str(), slice);
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
Slice &
Packit 0d464f
FrameBuffer::operator [] (const char name[])
Packit 0d464f
{
Packit 0d464f
    SliceMap::iterator i = _map.find (name);
Packit 0d464f
Packit 0d464f
    if (i == _map.end())
Packit 0d464f
    {
Packit 0d464f
        THROW (IEX_NAMESPACE::ArgExc,
Packit 0d464f
               "Cannot find frame buffer slice \"" << name << "\".");
Packit 0d464f
    }
Packit 0d464f
Packit 0d464f
    return i->second;
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
const Slice &
Packit 0d464f
FrameBuffer::operator [] (const char name[]) const
Packit 0d464f
{
Packit 0d464f
    SliceMap::const_iterator i = _map.find (name);
Packit 0d464f
Packit 0d464f
    if (i == _map.end())
Packit 0d464f
    {
Packit 0d464f
        THROW (IEX_NAMESPACE::ArgExc,
Packit 0d464f
               "Cannot find frame buffer slice \"" << name << "\".");
Packit 0d464f
    }
Packit 0d464f
Packit 0d464f
    return i->second;
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
Slice &
Packit 0d464f
FrameBuffer::operator [] (const string &name)
Packit 0d464f
{
Packit 0d464f
    return this->operator[] (name.c_str());
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
const Slice &
Packit 0d464f
FrameBuffer::operator [] (const string &name) const
Packit 0d464f
{
Packit 0d464f
    return this->operator[] (name.c_str());
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
Slice *
Packit 0d464f
FrameBuffer::findSlice (const char name[])
Packit 0d464f
{
Packit 0d464f
    SliceMap::iterator i = _map.find (name);
Packit 0d464f
    return (i == _map.end())? 0: &i->second;
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
const Slice *
Packit 0d464f
FrameBuffer::findSlice (const char name[]) const
Packit 0d464f
{
Packit 0d464f
    SliceMap::const_iterator i = _map.find (name);
Packit 0d464f
    return (i == _map.end())? 0: &i->second;
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
Slice *
Packit 0d464f
FrameBuffer::findSlice (const string &name)
Packit 0d464f
{
Packit 0d464f
    return findSlice (name.c_str());
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
const Slice *
Packit 0d464f
FrameBuffer::findSlice (const string &name) const
Packit 0d464f
{
Packit 0d464f
    return findSlice (name.c_str());
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
FrameBuffer::Iterator
Packit 0d464f
FrameBuffer::begin ()
Packit 0d464f
{
Packit 0d464f
    return _map.begin();
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
FrameBuffer::ConstIterator
Packit 0d464f
FrameBuffer::begin () const
Packit 0d464f
{
Packit 0d464f
    return _map.begin();
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
FrameBuffer::Iterator
Packit 0d464f
FrameBuffer::end ()
Packit 0d464f
{
Packit 0d464f
    return _map.end();
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
FrameBuffer::ConstIterator
Packit 0d464f
FrameBuffer::end () const
Packit 0d464f
{
Packit 0d464f
    return _map.end();
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
FrameBuffer::Iterator
Packit 0d464f
FrameBuffer::find (const char name[])
Packit 0d464f
{
Packit 0d464f
    return _map.find (name);
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
FrameBuffer::ConstIterator
Packit 0d464f
FrameBuffer::find (const char name[]) const
Packit 0d464f
{
Packit 0d464f
    return _map.find (name);
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
FrameBuffer::Iterator
Packit 0d464f
FrameBuffer::find (const string &name)
Packit 0d464f
{
Packit 0d464f
    return find (name.c_str());
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
FrameBuffer::ConstIterator
Packit 0d464f
FrameBuffer::find (const string &name) const
Packit 0d464f
{
Packit 0d464f
    return find (name.c_str());
Packit 0d464f
}
Packit 0d464f
Packit 0d464f
Packit 0d464f
OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT