+++ /dev/null
-///////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
-// Digital Ltd. LLC
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Industrial Light & Magic nor the names of
-// its contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-///////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef INCLUDED_IMATHINTERVAL_H
-#define INCLUDED_IMATHINTERVAL_H
-
-
-//-------------------------------------------------------------------
-//
-// class Imath::Interval<class T>
-// --------------------------------
-//
-// An Interval has a min and a max and some miscellaneous
-// functions. It is basically a Box<T> that allows T to be
-// a scalar.
-//
-//-------------------------------------------------------------------
-
-#include "ImathVec.h"
-
-namespace Imath {
-
-
-template <class T>
-class Interval
-{
- public:
-
- //-------------------------
- // Data Members are public
- //-------------------------
-
- T min;
- T max;
-
- //-----------------------------------------------------
- // Constructors - an "empty" Interval is created by default
- //-----------------------------------------------------
-
- Interval();
- Interval(const T& point);
- Interval(const T& minT, const T& maxT);
-
- //--------------------------------
- // Operators: we get != from STL
- //--------------------------------
-
- bool operator == (const Interval<T> &src) const;
-
- //------------------
- // Interval manipulation
- //------------------
-
- void makeEmpty();
- void extendBy(const T& point);
- void extendBy(const Interval<T>& interval);
-
- //---------------------------------------------------
- // Query functions - these compute results each time
- //---------------------------------------------------
-
- T size() const;
- T center() const;
- bool intersects(const T &point) const;
- bool intersects(const Interval<T> &interval) const;
-
- //----------------
- // Classification
- //----------------
-
- bool hasVolume() const;
- bool isEmpty() const;
-};
-
-
-//--------------------
-// Convenient typedefs
-//--------------------
-
-
-typedef Interval <float> Intervalf;
-typedef Interval <double> Intervald;
-typedef Interval <short> Intervals;
-typedef Interval <int> Intervali;
-
-//----------------
-// Implementation
-//----------------
-
-
-template <class T>
-inline Interval<T>::Interval()
-{
- makeEmpty();
-}
-
-template <class T>
-inline Interval<T>::Interval(const T& point)
-{
- min = point;
- max = point;
-}
-
-template <class T>
-inline Interval<T>::Interval(const T& minV, const T& maxV)
-{
- min = minV;
- max = maxV;
-}
-
-template <class T>
-inline bool
-Interval<T>::operator == (const Interval<T> &src) const
-{
- return (min == src.min && max == src.max);
-}
-
-template <class T>
-inline void
-Interval<T>::makeEmpty()
-{
- min = limits<T>::max();
- max = limits<T>::min();
-}
-
-template <class T>
-inline void
-Interval<T>::extendBy(const T& point)
-{
- if ( point < min )
- min = point;
-
- if ( point > max )
- max = point;
-}
-
-template <class T>
-inline void
-Interval<T>::extendBy(const Interval<T>& interval)
-{
- if ( interval.min < min )
- min = interval.min;
-
- if ( interval.max > max )
- max = interval.max;
-}
-
-template <class T>
-inline bool
-Interval<T>::intersects(const T& point) const
-{
- return point >= min && point <= max;
-}
-
-template <class T>
-inline bool
-Interval<T>::intersects(const Interval<T>& interval) const
-{
- return interval.max >= min && interval.min <= max;
-}
-
-template <class T>
-inline T
-Interval<T>::size() const
-{
- return max-min;
-}
-
-template <class T>
-inline T
-Interval<T>::center() const
-{
- return (max+min)/2;
-}
-
-template <class T>
-inline bool
-Interval<T>::isEmpty() const
-{
- return max < min;
-}
-
-template <class T>
-inline bool Interval<T>::hasVolume() const
-{
- return max > min;
-}
-
-} // namespace Imath
-
-#endif