image_size.hh

00001 // Copyright (C) 2001, 2002, 2003, 2004  EPITA Research and Development Laboratory
00002 //
00003 // This file is part of the Olena Library.  This library is free
00004 // software; you can redistribute it and/or modify it under the terms
00005 // of the GNU General Public License version 2 as published by the
00006 // Free Software Foundation.
00007 //
00008 // This library is distributed in the hope that it will be useful,
00009 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00010 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011 // General Public License for more details.
00012 //
00013 // You should have received a copy of the GNU General Public License
00014 // along with this library; see the file COPYING.  If not, write to
00015 // the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
00016 // MA 02111-1307, USA.
00017 //
00018 // As a special exception, you may use this file as part of a free
00019 // software library without restriction.  Specifically, if other files
00020 // instantiate templates or use macros or inline functions from this
00021 // file, or you compile this file and link it with other files to
00022 // produce an executable, this file does not by itself cause the
00023 // resulting executable to be covered by the GNU General Public
00024 // License.  This exception does not however invalidate any other
00025 // reasons why the executable file might be covered by the GNU General
00026 // Public License.
00027 
00028 #ifndef OLENA_CORE_ABSTRACT_IMAGE_SIZE_HH
00029 # define OLENA_CORE_ABSTRACT_IMAGE_SIZE_HH
00030 
00031 # include <mlc/type.hh>
00032 # include <mlc/contract.hh>
00033 # include <oln/core/coord.hh>
00034 # include <ntg/utils/debug.hh>
00035 # include <sstream>
00036 
00037 
00038 
00039 namespace oln {
00040 
00041   namespace abstract {
00042 
00043 
00044 
00045     template<class Exact>
00046     struct image_size; // fwd_decl
00047 
00048   } // end of abstract
00049 
00050   template<class Exact>
00051   struct image_size_traits;
00052 
00060   template<class Exact>
00061   struct image_size_traits<abstract::image_size<Exact> >
00062   {
00063   };
00064 
00065 
00066   namespace abstract {
00067 
00068 
00075     template<class Exact>
00076     struct image_size : public mlc_hierarchy::any< Exact >
00077     {
00078 
00079     public:
00080 
00081       enum { dim = image_size_traits<Exact>::dim };
00082 
00087       coord
00088       nth(unsigned n) const
00089       {
00090         assertion(n < dim);
00091         return coord_[n];
00092       }
00093 
00099       coord&
00100       nth(unsigned n)
00101       {
00102         assertion(n < dim);
00103         return coord_[n];
00104       }
00105 
00107       coord
00108       border() const
00109       {
00110         return border_;
00111       }
00112 
00114 
00115       coord&
00116       border()
00117       {
00118         return border_;
00119       }
00120 
00127       template< class S >
00128       bool
00129       operator==(const image_size<S>& size) const
00130       {
00131         for (unsigned i = 0; i < dim; ++i)
00132           if (coord_[i] != size.coord_[i])
00133             return false;
00134         return true;
00135       }
00136 
00142       template< class S >
00143       bool
00144       operator!=(const image_size<S>& size) const
00145       {
00146         for (unsigned i = 0; i < dim; ++i)
00147           if (coord_[i] != size.coord_[i])
00148             return true;
00149         return false;
00150       }
00151 
00152 
00153 
00154       static std::string
00155       name()
00156       {
00157         return std::string("image_size<") +
00158           Exact::name() + ">";
00159       }
00160 
00161       image_size()
00162       {}
00163 
00164     protected:
00165 
00172       coord border_;
00173 
00174     private:
00175 
00176 
00181       coord coord_[dim];
00182 
00183     };
00184 
00185   } // end of abstract
00186 
00187 } // end of oln
00188 
00189 
00190 #endif // ! OLENA_CORE_ABSTRACT_IMAGE_SIZE_HH

Generated on Thu Apr 15 20:13:12 2004 for Olena by doxygen 1.3.6-20040222