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_UTIL_TREE_FAST_TO_IMAGE_HH 00027 # define MLN_UTIL_TREE_FAST_TO_IMAGE_HH 00028 00037 # include <mln/core/concept/image.hh> 00038 # include <mln/util/tree_fast.hh> 00039 # include <mln/core/site_set/p_set.hh> 00040 # include <list> 00041 00042 namespace mln 00043 { 00044 00045 namespace util 00046 { 00047 00054 template <typename T, typename I> 00055 void 00056 tree_fast_to_image(tree_fast<T>& tree, Image<I>& output_); 00057 00058 # ifndef MLN_INCLUDE_ONLY 00059 00060 namespace impl 00061 { 00062 00063 template <typename T, typename I> 00064 inline 00065 void 00066 tree_fast_to_image(tree_fast<T>& tree, Image<I>& output_) 00067 { 00068 trace::entering("util::impl::tree_fast_to_image"); 00069 00070 I& output = exact(output_); 00071 std::list<unsigned> l; 00072 00073 l.push_back (tree.root_); 00074 while (! l.empty()) 00075 { 00076 unsigned current = l.front(); 00077 for (unsigned i = 0; i < tree.child_[current].size(); ++i) 00078 l.push_back(tree.child_[current][i]); 00079 00080 mln_piter(p_set<point2d>) p(tree.data_[current].points); 00081 00082 for_all(p) 00083 { 00084 output(p) = tree.data_[current].value; 00085 } 00086 l.pop_front(); 00087 } 00088 00089 trace::exiting("util::impl::tree_fast_to_image"); 00090 } 00091 00092 } // end of namespace mln::util::impl 00093 00094 00095 00096 template <typename T, typename I> 00097 inline 00098 void 00099 tree_fast_to_image(tree_fast<T>& tree, Image<I>& output_) 00100 { 00101 trace::entering("util::tree_fast_to_image"); 00102 00103 impl::tree_fast_to_image(tree, output_); 00104 00105 trace::exiting("util::tree_fast_to_image"); 00106 } 00107 00108 # endif // ! MLN_INCLUDE_ONLY 00109 00110 } // end of namespace mln::util 00111 00112 } // end of namespace mln 00113 00114 #endif // ! MLN_UTIL_TREE_FAST_TO_IMAGE_HH