source: XMLIO_V2/dev/common/src/xmlio/node/grid.hpp @ 219

Last change on this file since 219 was 219, checked in by hozdoba, 13 years ago

Préparation nouvelle arborescence

File size: 4.6 KB
Line 
1#ifndef __XMLIO_CGrid__
2#define __XMLIO_CGrid__
3
4/// xmlioserver headers ///
5#include "xmlioserver_spl.hpp"
6#include "group_factory.hpp"
7
8#include "declare_group.hpp"
9#include "domain.hpp"
10#include "axis.hpp"
11
12namespace xmlioserver {
13namespace tree {
14   
15   /// ////////////////////// Déclarations ////////////////////// ///
16
17   class CGridGroup;
18   class CGridAttributes;
19   class CGrid;
20
21   ///--------------------------------------------------------------
22
23   // Declare/Define CGridAttribute
24   BEGIN_DECLARE_ATTRIBUTE_MAP(CGrid)
25#  include "grid_attribute.conf"
26   END_DECLARE_ATTRIBUTE_MAP(CGrid)
27
28   ///--------------------------------------------------------------
29
30   class CGrid
31      : public CObjectTemplate<CGrid>
32      , public CGridAttributes
33   {
34         /// typedef ///
35         typedef CObjectTemplate<CGrid>   SuperClass;
36         typedef CGridAttributes SuperClassAttribute;
37
38      public :
39
40         typedef CGridAttributes RelAttributes;
41         typedef CGridGroup      RelGroup;
42
43         /// Constructeurs ///
44         CGrid(void);
45         explicit CGrid(const StdString & id);
46         CGrid(const CGrid & grid);       // Not implemented yet.
47         CGrid(const CGrid * const grid); // Not implemented yet.
48
49         /// Traitements ///
50         void solveReference(void);
51
52         virtual void toBinary  (StdOStream & os) const;
53         virtual void fromBinary(StdIStream & is);
54
55         /// Tests ///
56         bool hasAxis(void) const;
57
58      public :
59
60         /// Accesseurs ///
61         const std::deque<ARRAY(int, 1)> & getStoreIndex(void) const;
62         const std::deque<ARRAY(int, 1)> & getOutIIndex(void)  const;
63         const std::deque<ARRAY(int, 1)> & getOutJIndex(void)  const;
64         const std::deque<ARRAY(int, 1)> & getOutLIndex(void)  const;
65
66         const boost::shared_ptr<CAxis>   getRelAxis  (void) const;
67         const boost::shared_ptr<CDomain> getRelDomain(void) const;
68
69         StdSize getDimension(void) const;
70         StdSize getSize(void) const;
71         std::vector<StdSize> getShape(void) const;
72
73         /// Entrées-sorties de champs ///
74         template <StdSize n>
75            void inputField(const ARRAY(double, n) field, ARRAY(double, 1) stored) const;
76           
77         void inputFieldServer(const std::deque<ARRAY(double, 1)> storedClient,
78                                                ARRAY(double, 1)  storedServer) const;
79
80         template <StdSize n>
81            void outputField(const ARRAY(double, 1) stored,  ARRAY(double, n) field) const;
82
83         /// Destructeur ///
84         virtual ~CGrid(void);
85
86      public :
87
88         /// Accesseurs statiques ///
89         static StdString GetName(void);
90         static StdString GetDefName(void);
91         
92         static ENodeType GetType(void);
93
94         /// Instanciateurs Statiques ///
95         static boost::shared_ptr<CGrid>
96            CreateGrid(boost::shared_ptr<CDomain> domain);
97         static boost::shared_ptr<CGrid>
98            CreateGrid(boost::shared_ptr<CDomain> domain, boost::shared_ptr<CAxis> axis);
99
100      protected :
101
102         /// Entrées-sorties de champs (interne) ///
103         void storeField_arr(const double * const data, ARRAY(double, 1) stored) const;
104
105         /// Traitements protégés ///
106         void computeIndexServer(void);
107         void computeIndex(void);
108         void solveDomainRef(void);
109         void solveAxisRef(void);
110
111      public:
112
113         /// Propriétés privées ///
114         bool withAxis ;
115         bool isChecked;
116
117         boost::shared_ptr<CAxis>   axis ;
118         boost::shared_ptr<CDomain> domain ;
119
120         std::deque<ARRAY(int, 1)> storeIndex ;
121         std::deque<ARRAY(int, 1)> out_i_index ;
122         std::deque<ARRAY(int, 1)> out_j_index ;
123         std::deque<ARRAY(int, 1)> out_l_index ;
124
125   }; // class CGrid
126
127   ///--------------------------------------------------------------
128
129   template <StdSize n>
130      void CGrid::inputField(const  ARRAY(double, n) field, ARRAY(double, 1) stored) const
131   {
132      if (this->getSize() != field->num_elements())
133         ERROR("CGrid::inputField(const  ARRAY(double, n) field, ARRAY(double, 1) stored)",
134                << "[ Taille des données attendue = " << this->getSize()       << ", "
135                << "Taille des données reçue = "      << field->num_elements() << " ] "
136                << "Le tableau de données n'a pas la bonne taille !") ;
137      this->storeField_arr(field.data(), stored) ;
138   }
139
140   ///--------------------------------------------------------------
141
142   // Declare/Define CGridGroup and CGridDefinition
143   DECLARE_GROUP(CGrid);
144
145   ///--------------------------------------------------------------
146
147} // namespace tree
148} // namespace xmlioserver
149
150#endif // __XMLIO_CGrid__
Note: See TracBrowser for help on using the repository browser.