From 31288144ecd11d22d75778caa7b4404e3c2811c6 Mon Sep 17 00:00:00 2001
From: Nicolas Marsic <nicolas.marsic@gmail.com>
Date: Wed, 20 Jun 2012 13:35:24 +0000
Subject: [PATCH] FunctionSpace cpp

---
 FunctionSpace/CMakeLists.txt    |  2 ++
 FunctionSpace/FunctionSpace.cpp | 12 ++++++++++++
 FunctionSpace/FunctionSpace.h   | 28 ++++++++++++++++++++++++----
 3 files changed, 38 insertions(+), 4 deletions(-)
 create mode 100644 FunctionSpace/FunctionSpace.cpp

diff --git a/FunctionSpace/CMakeLists.txt b/FunctionSpace/CMakeLists.txt
index 5554606cc1..bc9f4a22cd 100644
--- a/FunctionSpace/CMakeLists.txt
+++ b/FunctionSpace/CMakeLists.txt
@@ -21,6 +21,8 @@ set(SRC
   LocalFunctionSpaceVector.cpp
   LocalFunctionSpace0Form.cpp
   LocalFunctionSpace1Form.cpp
+
+  FunctionSpace.cpp
 )
 
 file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h) 
diff --git a/FunctionSpace/FunctionSpace.cpp b/FunctionSpace/FunctionSpace.cpp
new file mode 100644
index 0000000000..ede8dada0e
--- /dev/null
+++ b/FunctionSpace/FunctionSpace.cpp
@@ -0,0 +1,12 @@
+#include "FunctionSpace.h"
+
+using namespace std;
+
+FunctionSpace::FunctionSpace(void){
+  ebLookUp = new map<Element*, Basis*, ElementComparator>;
+}
+
+FunctionSpace::~FunctionSpace(void){
+  delete ebLookUp;
+}
+
diff --git a/FunctionSpace/FunctionSpace.h b/FunctionSpace/FunctionSpace.h
index cc8ed83a26..cd5aaa4203 100644
--- a/FunctionSpace/FunctionSpace.h
+++ b/FunctionSpace/FunctionSpace.h
@@ -16,24 +16,44 @@
     --> inheritance: FunctionSpaceScalar & FunctionSapceVector @n
     "double or fullVector" interpolate(Element, pyhsical coordinate, coef) @n
     "double or fullVector" interpolate(Element, ref coordinate     , coef) @n
-    "double or fullVector" interpolate(physical coordinate, coef) --> use octree @n
-    
+    "double or fullVector" interpolate(physical coordinate, coef) --> use octree?? @n    
 */
 
 class FunctionSpace{
  private:
+
   class ElementComparator{
+  public:
     bool operator()(const Element* a, const Element* b) const;
   };
 
-  std::map<Element*, Basis*, ElementComparator>* ETBL; // Element To Basis Lookup
+  std::map<Element*, Basis*, ElementComparator>* ebLookUp; // Element to Basis Lookup
 
  public:
-  
+   FunctionSpace(void);
+  ~FunctionSpace(void);
+
   void associate(Element& element, Basis& basis);
   void associate(int physical, Basis& basis);
   
   Basis& getBasis(Element& element) const;
 };
 
+//////////////////////
+// Inline Functions //
+//////////////////////
+
+inline void FunctionSpace::associate(Element& element, Basis& basis){
+  ebLookUp->insert(std::pair<Element*, Basis*>(&element, &basis));
+}
+
+inline Basis& FunctionSpace::getBasis(Element& element) const{
+  return *(ebLookUp->find(&element)->second);
+}
+
+inline bool FunctionSpace::ElementComparator::operator()
+(const Element* a, const Element* b) const{
+  return a->getId() < b->getId();
+}
+
 #endif
-- 
GitLab