00001
00002
00003
00004
00006 #ifndef __FIBEROP_LOCATOR_HPP
00007 #define __FIBEROP_LOCATOR_HPP
00008
00009 #include "gridopDllApi.h"
00010
00011 #include <field/MemArray.hpp>
00012 #include <field/DynamicSize.hpp>
00013 #include <field/DirectProductArray.hpp>
00014
00015 namespace Fiber
00016 {
00017
00018 class gridop_API Locator : MemCore::Interface<Locator>
00019 {
00020 public:
00021 virtual ~Locator();
00022 };
00023
00024 template <int N>
00025 class DimensionalLocator : Locator
00026 {
00027 public:
00028 enum { Dims = N };
00029
00030 typedef MultiIndex<N> MIndex_t;
00031
00032 template <class Type>
00033 class TypedLocator
00034 {
00035 public:
00036
00037 static bool get(const RefPtr<MemArrayBase<N> >&M, FixedArray<double,N>&coords)
00038 {
00039 if (RefPtr<DirectProductMemArray<FixedArray<Type, N> > > D = M)
00040 {
00041 return D->locate(coords);
00042 }
00043 return false;
00044 }
00045 };
00046 };
00047
00048 }
00049
00050 #endif
00051