ivl 679
|
00001 /* This file is part of the ivl C++ library <http://image.ntua.gr/ivl>. 00002 A C++ template library extending syntax towards mathematical notation. 00003 00004 Copyright (C) 2012 Yannis Avrithis <iavr@image.ntua.gr> 00005 Copyright (C) 2012 Kimon Kontosis <kimonas@image.ntua.gr> 00006 00007 ivl is free software; you can redistribute it and/or modify 00008 it under the terms of the GNU Lesser General Public License 00009 version 3 as published by the Free Software Foundation. 00010 00011 Alternatively, you can redistribute it and/or modify it under the terms 00012 of the GNU General Public License version 2 as published by the Free 00013 Software Foundation. 00014 00015 ivl is distributed in the hope that it will be useful, 00016 but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00018 See the GNU General Public License for more details. 00019 00020 You should have received a copy of the GNU General Public License 00021 and a copy of the GNU Lesser General Public License along 00022 with ivl. If not, see <http://www.gnu.org/licenses/>. */ 00023 00031 #ifndef IVL_DETAILS_ARRAY_HPP 00032 #define IVL_DETAILS_ARRAY_HPP 00033 00034 #include <iostream> 00035 #include <cstdlib> 00036 #include <iomanip> 00037 #include <limits> 00038 #include <complex> 00039 #include <cmath> 00040 #include <vector> 00041 #include <algorithm> 00042 #include <exception> 00043 #include <cstddef> 00044 #include <new> 00045 00046 00047 #include "core/platform_specific/push_macros.hpp" 00048 #include "core/platform_specific/msc_warnings.hpp" 00049 //#include "core/platform_specific/msc_stdint.hpp" 00050 //#include "core/platform_specific/default_stdint.hpp" 00051 #if _MSC_VER >= 1500 // above VC2005 00052 #include <stdint.h> // CMake will add the dep dir automatically for MSVC 00053 #elif _MSC_VER >= 1400 // VC2005 00054 #include "depends/stdint/stdint.h" 00055 #else 00056 #include <stdint.h> 00057 #endif 00058 00059 #include "core/common/fwd_decl.hpp" 00060 00061 #include "core/types/entity.hpp" 00062 #include "core/types/identifier.hpp" 00063 #include "core/types/logic.hpp" 00064 #include "core/types/set.hpp" 00065 #include "core/types/functional.hpp" 00066 #include "core/types/numeric.hpp" 00067 00068 #include "core/data/data_base.hpp" 00069 00070 #include "core/types/types.hpp" 00071 #include "core/types/detect.hpp" 00072 #include "core/types/evolution.hpp" 00073 00074 00075 // TODO: this is here until the issue for reference face is fixed. 00076 // also power is in here and has to be moved. // scalar 00077 #include "core/tool/tuple.hpp" // mess 00078 #include "core/types/scalar.hpp" 00079 // 00080 00081 00082 //#include "core/tool/same_place_reverse_iterator.hpp" 00083 #include "core/tool/util.hpp" 00084 #include "core/tool/little_arrayling.hpp" 00085 #include "core/tool/pointer_face.hpp" 00087 00088 #include "core/debugging/debugging.hpp" 00089 00090 00091 00093 00094 00095 #include "core/types/array_iterator.hpp" 00096 #include "core/data/data_array.hpp" 00097 #include "core/types/derive.hpp" 00098 #include "core/types/array.hpp" 00099 00100 00101 00102 00103 #include "core/data/conversions_array.hpp" 00104 00105 00106 00107 00108 // math core 00109 #include "core/math/cast.hpp" 00110 #include "core/math/constant.hpp" 00111 #include "core/math/unary_functions.hpp" 00112 #include "core/math/binary_functions.hpp" 00113 #include "core/math/unary_operators.hpp" 00114 #include "core/math/binary_operators.hpp" 00115 #include "core/math/trigonometric.hpp" 00116 // 00117 00118 00119 // scalar 00120 #include "core/types/scalar.hpp" 00121 // 00122 00123 00124 00125 //#include "core/safety_check/force.hpp" 00126 00127 #include "core/keyword_operators/force.hpp" 00128 #include "core/keyword_operators/rval.hpp" 00129 //#include "core/operation/lval.hpp" 00130 #include "core/keyword_operators/rvalue.hpp" 00131 #include "core/keyword_operators/lvalue.hpp" 00132 //#include "core/operation/by_ref.hpp" 00133 //#include "core/operation/clone.hpp" 00134 #include "core/keyword_operators/link.hpp" 00135 #include "core/keyword_operators/ret.hpp" 00136 00137 #include "core/conversions/attr.hpp" 00138 00139 00140 #include "core/ivl_func/ivl_func.hpp" 00141 00142 00143 00144 #include "core/loops/meta/loops_meta.hpp" 00145 #include "core/loops/loops.hpp" 00146 //note: here a function with the same name loops::loop is defined 00147 //and is called by generic array<> operator=, so, we either have to 00148 //forward declare or actually include the loops_nd file, before any 00149 //loop(..) call is used to ensure the matching for nd loops. 00150 //other option would be a forward declaration. 00151 #include "core/loops/meta/loops_nd_meta.hpp" 00152 #include "core/loops/meta/out_specialized.hpp" 00153 #include "core/loops/meta/in_specialized.hpp" 00154 #include "core/loops/loops_nd.hpp" 00155 #include "core/loops/loop_ops.hpp" 00156 00157 00158 00159 00160 00161 #include "array/impl/array_base.hpp" 00162 00163 #include "array/impl/iterator/extended_traits.hpp" 00164 #include "array/impl/iterator/iterator.hpp" 00165 #include "array/impl/iterator/past_end_capable_iterator.hpp" 00166 00167 00168 // member control is a utility that enables/disables 00169 // members in class specializations. consider renaming 00170 #include "core/data/member_control.hpp" 00171 00172 //#include "core/rvalue.hpp" 00173 //#include "core/lvalue.hpp" 00174 00175 00176 #include "array/impl/catarray.hpp" 00177 00178 00179 #include "array/impl/common/array_common_tools.hpp" 00180 #include "array/impl/specialization_details/elem_func/elem_func_tools.hpp" 00181 #include "array/impl/specialization_details/subarray/subarray_tools.hpp" 00182 #include "array/impl/specialization_details/catarray/catarray_tools.hpp" 00183 #include "array/impl/specialization_details/ref_iterator/ref_iterator_tools.hpp" 00184 #include "array/impl/specialization_details/fixed/fixed_storage.hpp" 00185 #include "array/impl/specialization_details/subarray/subarray_iterator.hpp" 00186 #include "array/impl/specialization_details/catarray/catarray_iterator.hpp" 00187 00188 00189 00190 #include "array/impl/repval.hpp" 00191 #include "array/impl/member_array.hpp" 00192 #include "array/impl/slice.hpp" 00193 #include "array/impl/mask_array.hpp" 00194 #include "array/impl/slice_array.hpp" 00195 #include "array/impl/indirect_array.hpp" 00196 #include "array/impl/subarray.hpp" 00197 #include "array/impl/all_array.hpp" 00198 #include "array/impl/elem_func.hpp" 00199 00200 00201 00202 00203 #include "core/loops/loop_on.hpp" 00204 #include "core/safety_check/safe_loop.hpp" 00205 00206 00207 00208 00209 // the common functions for all the array specializations 00210 #include "array/impl/common/fwd_decl.hpp" 00211 #include "array/impl/common/conversions_array_common.hpp" 00212 #include "array/impl/common/readwrite_array_common.hpp" 00213 #include "array/impl/common/dependable_array_common.hpp" 00214 00215 00217 #include "array/impl/elem_func.hpp" 00218 #include "array/impl/elem_func_ptr.hpp" 00220 00221 // the actual elem-op classes of various functions 00222 #include "core/math/array/unary_element_functions.hpp" 00223 #include "core/math/array/binary_element_functions.hpp" 00225 00226 // 00227 // the function-to-array *_elem keyword 00228 #include "core/keyword_operators/elem.hpp" 00229 00230 // 00231 #include "core/keyword_operators/elem_ptr.hpp" 00232 #include "core/types/scalar_fptr.hpp" 00233 // 00234 00235 // 00236 00237 #include "array/impl/common/array_common_base.hpp" 00238 00239 00240 00241 00242 // -------------------------------------------------------------- 00243 // the array class including all specializations 00244 // -------------------------------------------------------------- 00245 #include "array/impl/array.hpp" 00246 // -------------------------------------------------------------- 00247 00248 00249 00250 #include "core/conversions/array.hpp" 00251 00252 00253 00254 00255 // this unit defines the derived classes X_elem_func that 00256 // derive from a corresponding array 00257 #include "array/impl/elem_func.hpp" 00258 #include "array/impl/elem_func_ptr.hpp" 00259 00260 // elem functions were here: todo; delete this line. 00261 00262 00263 00264 00265 #include "array/impl/range.hpp" 00266 00267 #include "array/impl/fixed_array.hpp" 00268 #include "array/impl/ptr_interface.hpp" 00269 00270 //#include "array/slice_array.hpp" 00271 #include "array/impl/index_array.hpp" 00272 00273 00274 #include "array/impl/wrap_stl.hpp" 00275 00276 #include "array/impl/iter_array.hpp" 00277 00278 00279 // underscore 00280 #include "core/underscore/underscore.hpp" 00281 00282 00283 // TODO: coding style 00284 //--- functions --- 00285 00286 00287 // the actual elem-op classes of various functions 00288 #include "core/math/array/unary_element_functions.hpp" 00289 #include "core/math/array/binary_element_functions.hpp" 00290 00291 00292 00293 #include "array/functions/assign_operators.hpp" 00294 00295 // from functions but this is in the array implementation include file 00296 #include "array/functions/array_core_functions.hpp" 00297 #include "array/functions/array_operators.hpp" 00298 00299 00300 #include "core/platform_specific/pop_macros.hpp" 00301 00302 00303 #endif // IVL_DETAILS_ARRAY_HPP