| 1 | /*
 | 
|---|
| 2 |  * LinkedCell_View.hpp
 | 
|---|
| 3 |  *
 | 
|---|
| 4 |  *  Created on: Nov 15, 2011
 | 
|---|
| 5 |  *      Author: heber
 | 
|---|
| 6 |  */
 | 
|---|
| 7 | 
 | 
|---|
| 8 | #ifndef LINKEDCELL_VIEW_HPP_
 | 
|---|
| 9 | #define LINKEDCELL_VIEW_HPP_
 | 
|---|
| 10 | 
 | 
|---|
| 11 | // include config.h
 | 
|---|
| 12 | #ifdef HAVE_CONFIG_H
 | 
|---|
| 13 | #include <config.h>
 | 
|---|
| 14 | #endif
 | 
|---|
| 15 | 
 | 
|---|
| 16 | #include <set>
 | 
|---|
| 17 | 
 | 
|---|
| 18 | #include "LinkedCell/types.hpp"
 | 
|---|
| 19 | 
 | 
|---|
| 20 | class LinkedCell_ControllerTest;
 | 
|---|
| 21 | class LinkedCell_ViewTest;
 | 
|---|
| 22 | class TesselPoint;
 | 
|---|
| 23 | class Vector;
 | 
|---|
| 24 | 
 | 
|---|
| 25 | namespace LinkedCell {
 | 
|---|
| 26 | 
 | 
|---|
| 27 |   class LinkedCell_Controller;
 | 
|---|
| 28 |   class LinkedCell_Model;
 | 
|---|
| 29 |   class LinkedCell_View_ModelWrapper;
 | 
|---|
| 30 | 
 | 
|---|
| 31 |   /** This is the view of the MVC ansatz for the LinkedCell structure.
 | 
|---|
| 32 |    *
 | 
|---|
| 33 |    * \sa linkedcell
 | 
|---|
| 34 |    *
 | 
|---|
| 35 |    * The view contains high-level functions for the user to use. He does not
 | 
|---|
| 36 |    * need to know anything about the inner workings.
 | 
|---|
| 37 |    *
 | 
|---|
| 38 |    */
 | 
|---|
| 39 |   class LinkedCell_View
 | 
|---|
| 40 |   {
 | 
|---|
| 41 |     //!> grant view unit test access to private parts
 | 
|---|
| 42 |     friend class ::LinkedCell_ViewTest;
 | 
|---|
| 43 |     //!> grant controller unit test access to private parts (needs to check on modelwrapper)
 | 
|---|
| 44 |     friend class ::LinkedCell_ControllerTest;
 | 
|---|
| 45 |   public:
 | 
|---|
| 46 |     LinkedCell_View(const LinkedCell_View &_view);
 | 
|---|
| 47 |     ~LinkedCell_View();
 | 
|---|
| 48 | 
 | 
|---|
| 49 |     LinkedList getAllNeighbors(const double radius, const Vector ¢er) const;
 | 
|---|
| 50 |     LinkedList getPointsInsideSphere(const double radius, const Vector ¢er) const;
 | 
|---|
| 51 |   private:
 | 
|---|
| 52 |     friend class LinkedCell_Controller;
 | 
|---|
| 53 |     // constructing views is allowed for the controller
 | 
|---|
| 54 |     explicit LinkedCell_View(const LinkedCell_Model &_LC);
 | 
|---|
| 55 | 
 | 
|---|
| 56 |     // don't allow any view assignments or default cstors
 | 
|---|
| 57 |     LinkedCell_View & operator=(const LinkedCell_View &_view);
 | 
|---|
| 58 |     LinkedCell_View & operator=(LinkedCell_View &_view);
 | 
|---|
| 59 |     LinkedCell_View();
 | 
|---|
| 60 |   private:
 | 
|---|
| 61 |     typedef std::set<LinkedCell_View *> ModelInstanceMap;
 | 
|---|
| 62 |     //!> static map to allow for RAII pattern
 | 
|---|
| 63 |     static ModelInstanceMap RAIIMap;
 | 
|---|
| 64 |     //!> internal reference to the underlying model
 | 
|---|
| 65 |     LinkedCell_View_ModelWrapper * const LC;
 | 
|---|
| 66 |   };
 | 
|---|
| 67 | 
 | 
|---|
| 68 | }
 | 
|---|
| 69 | 
 | 
|---|
| 70 | #endif /* LINKEDCELL_VIEW_HPP_ */
 | 
|---|