1 /*****************************************************************************/
2 /*                                    XDMF                                   */
3 /*                       eXtensible Data Model and Format                    */
4 /*                                                                           */
5 /*  Id : XdmfDSMItemFactory.hpp                                              */
6 /*                                                                           */
7 /*  Author:                                                                  */
8 /*     Kenneth Leiter                                                        */
9 /*     kenneth.leiter@arl.army.mil                                           */
10 /*     US Army Research Laboratory                                           */
11 /*     Aberdeen Proving Ground, MD                                           */
12 /*                                                                           */
13 /*     Copyright @ 2011 US Army Research Laboratory                          */
14 /*     All Rights Reserved                                                   */
15 /*     See Copyright.txt for details                                         */
16 /*                                                                           */
17 /*     This software is distributed WITHOUT ANY WARRANTY; without            */
18 /*     even the implied warranty of MERCHANTABILITY or FITNESS               */
19 /*     FOR A PARTICULAR PURPOSE.  See the above copyright notice             */
20 /*     for more information.                                                 */
21 /*                                                                           */
22 /*****************************************************************************/
23 
24 #ifndef XDMFDSMITEMFACTORY_HPP_
25 #define XDMFDSMITEMFACTORY_HPP_
26 
27 // C Compatible Includes
28 #include "Xdmf.hpp"
29 #include "XdmfCoreItemFactory.hpp"
30 #include "XdmfDSMBuffer.hpp"
31 
32 #ifdef __cplusplus
33 
34 // Forward Declarations
35 class XdmfItem;
36 
37 // Includes
38 
39 /**
40  * @brief Factory for constructing XdmfItems from their ItemTag and
41  * ItemProperties.
42  */
43 class XDMFDSM_EXPORT XdmfDSMItemFactory : public XdmfCoreItemFactory {
44 
45 public:
46 
47   /**
48    * Create a new XdmfItemFactory.
49    *
50    * Example of use:
51    *
52    * C++
53    *
54    * @dontinclude ExampleXdmfItemFactory.cpp
55    * @skipline //#initialization
56    * @until //#initialization
57    *
58    * Python
59    *
60    * @dontinclude XdmfExampleItemFactory.py
61    * @skipline #//initialization
62    * @until #//initialization
63    *
64    * @return    Constructed XdmfItemFactory.
65    */
66   static shared_ptr<XdmfDSMItemFactory> New();
67 
68   virtual ~XdmfDSMItemFactory();
69 
70   virtual shared_ptr<XdmfItem>
71   createItem(const std::string & itemTag,
72              const std::map<std::string, std::string> & itemProperties,
73              const std::vector<shared_ptr<XdmfItem> > & childItems) const;
74 
75   virtual std::vector<shared_ptr<XdmfHeavyDataController> >
76   generateHeavyDataControllers(const std::map<std::string, std::string> & itemProperties,
77                                const std::vector<unsigned int> & passedDimensions,
78                                shared_ptr<const XdmfArrayType> passedArrayType,
79                                const std::string & passedFormat) const;
80 
81 
82   virtual shared_ptr<XdmfHeavyDataWriter>
83   generateHeavyDataWriter(std::string typeName, std::string path) const;
84 
85   XdmfDSMBuffer *
86   getDSMBuffer();
87 
88   virtual bool isArrayTag(char * tag) const;
89 
90   void
91   setDSMBuffer(XdmfDSMBuffer * newBuffer);
92 
93   virtual XdmfItem *
94   DuplicatePointer(shared_ptr<XdmfItem> original) const;
95 
96 protected:
97 
98   XdmfDSMItemFactory();
99 
100 private:
101 
102   XdmfDSMItemFactory(const XdmfDSMItemFactory &);  // Not implemented.
103   void operator=(const XdmfDSMItemFactory &);  // Not implemented.
104 
105   XdmfDSMBuffer * mDSMBuffer;
106 };
107 
108 #ifdef _WIN32
109 XDMF_TEMPLATE template class XDMF_EXPORT shared_ptr<XdmfDSMItemFactory>;
110 #endif
111 
112 #endif
113 
114 #endif /* XDMFDSMITEMFACTORY_HPP_ */
115