ivl 679
ivl/details/array.hpp
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations