image.hh 4.06 KB
 Roland Levillain committed Apr 21, 2006 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ``````// Copyright (C) 2001, 2003, 2004, 2005, 2006 EPITA Research and // Development Laboratory // // This file is part of the Olena Library. This library is free // software; you can redistribute it and/or modify it under the terms // of the GNU General Public License version 2 as published by the // Free Software Foundation. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License `````` Roland Levillain committed Apr 21, 2006 15 16 17 ``````// along with this library; see the file COPYING. If not, write to // the Free Software Foundation, 51 Franklin Street, Fifth Floor, // Boston, MA 02111-1307, USA. `````` Roland Levillain committed Apr 21, 2006 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ``````// // As a special exception, you may use this file as part of a free // software library without restriction. Specifically, if other files // instantiate templates or use macros or inline functions from this // file, or you compile this file and link it with other files to // produce an executable, this file does not by itself cause the // resulting executable to be covered by the GNU General Public // License. This exception does not however invalidate any other // reasons why the executable file might be covered by the GNU General // Public License. #ifndef OLENA_CORE_ABSTRACT_IMAGE_HH # define OLENA_CORE_ABSTRACT_IMAGE_HH `````` Thierry Geraud committed Sep 07, 2006 32 33 ``````# include // # include `````` Roland Levillain committed Apr 21, 2006 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 `````` namespace oln { /*! \namespace oln::abstract ** \brief oln::abstract namespace. */ namespace abstract { /*! \class abstract::image ** ** The abstract::image class is the base class from whom derives ** every concrete image class. Basically, an image is a set of ** points and a set of values associated with those points. ** ** Parameter E is the exact type of image. */ template `````` Thierry Geraud committed Sep 07, 2006 56 57 58 `````` struct image : public virtual stc::any__simple, public virtual oln::type // , public internal::get_image_impl < image, E > `````` Roland Levillain committed Apr 21, 2006 59 60 `````` { `````` Thierry Geraud committed Sep 07, 2006 61 `````` public: `````` Roland Levillain committed Apr 21, 2006 62 `````` `````` Thierry Geraud committed Sep 07, 2006 63 `````` struct decl { `````` Roland Levillain committed Apr 21, 2006 64 `````` `````` Thierry Geraud committed Sep 07, 2006 65 66 `````` stc_virtual_typedef(topo); stc_virtual_typedef(grid); `````` Roland Levillain committed Apr 21, 2006 67 `````` `````` Thierry Geraud committed Sep 07, 2006 68 69 `````` stc_virtual_typedef(psite); stc_virtual_typedef(point); `````` Roland Levillain committed Apr 21, 2006 70 `````` `````` Thierry Geraud committed Sep 07, 2006 71 72 73 `````` stc_virtual_typedef(piter); stc_virtual_typedef(fwd_piter); stc_virtual_typedef(bkd_piter); `````` Roland Levillain committed Apr 21, 2006 74 `````` `````` Thierry Geraud committed Sep 07, 2006 75 76 `````` stc_virtual_typedef(value); stc_virtual_typedef(rvalue); `````` Roland Levillain committed Apr 21, 2006 77 `````` `````` Thierry Geraud committed Sep 07, 2006 78 `````` stc_virtual_typedef(concrete); `````` Roland Levillain committed Apr 21, 2006 79 `````` `````` Thierry Geraud committed Sep 07, 2006 80 81 82 83 `````` decl() { // FIXME: ... } }; `````` Roland Levillain committed Apr 21, 2006 84 85 `````` `````` Thierry Geraud committed Sep 07, 2006 86 `````` private: `````` Roland Levillain committed Apr 21, 2006 87 `````` `````` Thierry Geraud committed Sep 07, 2006 88 89 90 91 `````` /// Typedefs. typedef oln_type_of(E, topo) topo_t; typedef oln_type_of(E, psite) psite_t; typedef oln_type_of(E, rvalue) rvalue_t; `````` Roland Levillain committed Apr 21, 2006 92 93 `````` `````` Thierry Geraud committed Sep 07, 2006 94 `````` public: `````` Roland Levillain committed Apr 21, 2006 95 96 `````` /*------------------* `````` Thierry Geraud committed Sep 07, 2006 97 `````` ! abstract methods ! `````` Roland Levillain committed Apr 21, 2006 98 99 `````` *------------------*/ `````` Thierry Geraud committed Sep 07, 2006 100 101 102 `````` /*! \brief Return the topological information about the current ** image. Nota bene: this method is abstract-like.it is a ** pseudo-abstract method. `````` Roland Levillain committed Apr 21, 2006 103 `````` ** `````` Thierry Geraud committed Sep 07, 2006 104 105 106 `````` ** \return An object deriving from abstract::topo. Ex: if the ** image is an image2d, the returned object is a ** topo2d. `````` Roland Levillain committed Apr 21, 2006 107 108 `````` */ `````` Thierry Geraud committed Sep 07, 2006 109 110 111 112 `````` const topo_t& topo() const { return this->exact().impl_topo(); } `````` Roland Levillain committed Apr 21, 2006 113 114 115 `````` /*! \brief Gives access to the value stored at \a p in the `````` Thierry Geraud committed Sep 07, 2006 116 `````` ** current image. `````` Roland Levillain committed Apr 21, 2006 117 118 `````` */ `````` Thierry Geraud committed Sep 07, 2006 119 `````` rvalue_t operator()(const psite_t& p) const `````` Roland Levillain committed Apr 21, 2006 120 `````` { `````` Thierry Geraud committed Sep 07, 2006 121 `````` return this->exact().impl_op_read(p); `````` Roland Levillain committed Apr 21, 2006 122 123 124 `````` } `````` Thierry Geraud committed Sep 07, 2006 125 126 127 `````` /*! \brief Test if the point \a p belongs to the current image. ** Please note that a point of the outer boundary of an image ** does NOT belong to the image. `````` Roland Levillain committed Apr 21, 2006 128 `````` ** `````` Thierry Geraud committed Sep 07, 2006 129 `````` ** \return True if p belongs to the current image, false otherwise. `````` Roland Levillain committed Apr 21, 2006 130 `````` ** `````` Thierry Geraud committed Sep 07, 2006 131 `````` ** \see hold_large `````` Roland Levillain committed Apr 21, 2006 132 133 `````` */ `````` Thierry Geraud committed Sep 07, 2006 134 135 136 137 `````` bool has(const psite_t& p) const { return this->exact().impl_has(p); } `````` Roland Levillain committed Apr 21, 2006 138 139 140 141 142 143 144 `````` protected: /*! \brief Constructor (protected, empty). */ image() {} `````` Thierry Geraud committed Sep 07, 2006 145 `````` /*! \brief Destructor. `````` Roland Levillain committed Apr 21, 2006 146 `````` */ `````` Thierry Geraud committed Sep 07, 2006 147 `````` virtual ~image() { decl(); } `````` Roland Levillain committed Apr 21, 2006 148 149 150 151 152 153 154 155 156 `````` }; } // end of namespace oln::abstract } // end of namespace oln `````` Roland Levillain committed Sep 14, 2006 157 158 ``````# include `````` Roland Levillain committed Apr 21, 2006 159 160 `````` #endif // ! OLENA_CORE_ABSTRACT_IMAGE_HH``````