Home | History | Annotate | Download | only in IlmImf
      1 ///////////////////////////////////////////////////////////////////////////
      2 //
      3 // Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
      4 // Digital Ltd. LLC
      5 //
      6 // All rights reserved.
      7 //
      8 // Redistribution and use in source and binary forms, with or without
      9 // modification, are permitted provided that the following conditions are
     10 // met:
     11 // *       Redistributions of source code must retain the above copyright
     12 // notice, this list of conditions and the following disclaimer.
     13 // *       Redistributions in binary form must reproduce the above
     14 // copyright notice, this list of conditions and the following disclaimer
     15 // in the documentation and/or other materials provided with the
     16 // distribution.
     17 // *       Neither the name of Industrial Light & Magic nor the names of
     18 // its contributors may be used to endorse or promote products derived
     19 // from this software without specific prior written permission.
     20 //
     21 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     22 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     23 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     24 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     25 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     26 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     27 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     28 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     29 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     30 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     31 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     32 //
     33 ///////////////////////////////////////////////////////////////////////////
     34 
     35 
     36 #ifndef INCLUDED_IMF_TILE_OFFSETS_H
     37 #define INCLUDED_IMF_TILE_OFFSETS_H
     38 
     39 //-----------------------------------------------------------------------------
     40 //
     41 //	class TileOffsets
     42 //
     43 //-----------------------------------------------------------------------------
     44 
     45 #include <ImfTileDescription.h>
     46 #include <ImfInt64.h>
     47 #include <vector>
     48 
     49 namespace Imf {
     50 
     51 class IStream;
     52 class OStream;
     53 
     54 
     55 class TileOffsets
     56 {
     57   public:
     58 
     59     TileOffsets (LevelMode mode = ONE_LEVEL,
     60          int numXLevels = 0,
     61          int numYLevels = 0,
     62          const int *numXTiles = 0,
     63          const int *numYTiles = 0);
     64 
     65     // --------
     66     // File I/O
     67     // --------
     68 
     69     void		readFrom (IStream &is, bool &complete);
     70     Int64		writeTo (OStream &os) const;
     71 
     72 
     73     //-----------------------------------------------------------
     74     // Test if the tileOffsets array is empty (all entries are 0)
     75     //-----------------------------------------------------------
     76 
     77     bool		isEmpty () const;
     78 
     79 
     80     //-----------------------
     81     // Access to the elements
     82     //-----------------------
     83 
     84     Int64 &		operator () (int dx, int dy, int lx, int ly);
     85     Int64 &		operator () (int dx, int dy, int l);
     86     const Int64 &	operator () (int dx, int dy, int lx, int ly) const;
     87     const Int64 &	operator () (int dx, int dy, int l) const;
     88 
     89   private:
     90 
     91     void		findTiles (IStream &is);
     92     void		reconstructFromFile (IStream &is);
     93     bool		readTile (IStream &is);
     94     bool		anyOffsetsAreInvalid () const;
     95     bool		isValidTile (int dx, int dy, int lx, int ly) const;
     96 
     97     LevelMode		_mode;
     98     int			_numXLevels;
     99     int			_numYLevels;
    100 
    101     std::vector<std::vector<std::vector <Int64> > > _offsets;
    102 };
    103 
    104 
    105 } // namespace Imf
    106 
    107 #endif
    108