Locator.hpp

00001 
00002 //
00003 // $Id: Locator.hpp,v 1.1 2008/01/14 19:20:43 werner Exp $
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 } /* namespace Fiber */ 
00049 
00050 #endif /* __FIBEROP_LOCATOR_HPP */
00051