Milena (Olena)
User documentation 2.0a Id
|
00001 // Copyright (C) 2007, 2008, 2009 EPITA Research and Development Laboratory (LRDE) 00002 // 00003 // This file is part of Olena. 00004 // 00005 // Olena is free software: you can redistribute it and/or modify it under 00006 // the terms of the GNU General Public License as published by the Free 00007 // Software Foundation, version 2 of the License. 00008 // 00009 // Olena is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 // General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU General Public License 00015 // along with Olena. If not, see <http://www.gnu.org/licenses/>. 00016 // 00017 // As a special exception, you may use this file as part of a free 00018 // software project without restriction. Specifically, if other files 00019 // instantiate templates or use macros or inline functions from this 00020 // file, or you compile this file and link it with other files to produce 00021 // an executable, this file does not by itself cause the resulting 00022 // executable to be covered by the GNU General Public License. This 00023 // exception does not however invalidate any other reasons why the 00024 // executable file might be covered by the GNU General Public License. 00025 00026 #ifndef MLN_CONVERT_TO_P_ARRAY_HH 00027 # define MLN_CONVERT_TO_P_ARRAY_HH 00028 00034 00035 # include <mln/core/site_set/p_array.hh> 00036 # include <mln/core/concept/image.hh> 00037 # include <mln/core/concept/window.hh> 00038 00039 00040 namespace mln 00041 { 00042 00043 namespace convert 00044 { 00045 00047 template <typename S> 00048 p_array<mln_psite(S)> to_p_array(const Site_Set<S>& pset); 00049 00050 00053 template <typename W> 00054 p_array<mln_psite(W)> to_p_array(const Window<W>& win, 00055 const mln_psite(W)& p); 00056 00058 template <typename I> 00059 p_array<mln_psite(I)> 00060 to_p_array(const Image<I>& img); 00061 00062 00063 00064 # ifndef MLN_INCLUDE_ONLY 00065 00066 template <typename S> 00067 inline 00068 p_array<mln_psite(S)> to_p_array(const Site_Set<S>& pset_) 00069 { 00070 const S& pset = exact(pset_); 00071 p_array<mln_psite(S)> v; 00072 // v.reserve(pset.nsites()); 00073 // FIXME: Why mln_fwd_piter and not mln_piter? 00074 mln_fwd_piter(S) p(pset); 00075 for_all(p) 00076 v.append(p); 00077 return v; 00078 } 00079 00080 template <typename W> 00081 inline 00082 p_array<mln_psite(W)> to_p_array(const Window<W>& win_, 00083 const mln_psite(W)& p) 00084 { 00085 const W& win = exact(win_); 00086 p_array<mln_psite(W)> v; 00087 v.reserve(win.size()); 00088 mln_qiter(W) q(win, p); 00089 for_all(q) 00090 v.append(q); 00091 return v; 00092 } 00093 00094 //FIXME: to remove, already added to from_image_to_site_set.hh. 00095 template <typename I> 00096 inline 00097 p_array<mln_psite(I)> 00098 to_p_array(const Image<I>& img_) 00099 { 00100 const I& img = exact(img_); 00101 00102 p_array<mln_psite(I)> a; 00103 00104 mln_piter(I) p(img.domain()); 00105 for_all(p) 00106 if (img(p)) 00107 a.append(p); 00108 00109 return a; 00110 } 00111 00112 # endif // ! MLN_INCLUDE_ONLY 00113 00114 } // end of namespace mln::convert 00115 00116 } // end of namespace mln 00117 00118 00119 #endif // ! MLN_CONVERT_TO_P_ARRAY_HH