C++ Data Model draft implementation:
[scilab.git] / scilab / modules / graphic_objects / includes / DataModel.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2010-2010 - DIGITEO - Bruno JOFRET
4  *
5  *  This file must be used under the terms of the CeCILL.
6  *  This source file is licensed as described in the file COPYING, which
7  *  you should have received as part of this distribution.  The terms
8  *  are also available at
9  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 #ifndef DATA_MODEL_H
14 #define DATA_MODEL_H
15
16 #include <map>
17 #include <string>
18
19 #include "Data3D.hxx"
20
21 #include "NgonGeneralData.hxx"
22 #include "NgonGridData.hxx"
23 #include "NgonPolylineData.hxx"
24 #include "TriangleMeshData.hxx"
25
26 #include "graphicObjectProperties.h"
27
28 extern "C" {
29 #include "BOOL.h"
30
31 #include <stdio.h>
32 }
33
34 class DataModel
35 {
36 private :
37     DataModel()
38     {
39         m_dataMap = new std::map<std::string, Data3D*>();
40     }
41
42 public :
43     static DataModel *get()
44     {
45         if (m_me == NULL)
46         {
47             m_me = new DataModel();
48         }
49
50         return m_me;
51     }
52
53 public :
54     /**
55      * Sets a graphic object property
56      * As some set methods allocate memory, the FALSE return value also indicates
57      * a failed allocation for these methods, which overlaps with the non-existing
58      * property return value (also FALSE); returning an int, with -1 for a failed
59      * allocation would possibly solve this problem.
60      */
61     BOOL setGraphicObjectProperty(char *_pstID, char* _pstName, void* _dblValue, int numElements);
62
63     /** Returns a graphic object vector property */
64     void* getGraphicObjectProperty(char *_pstID, char* _pstName);
65
66     /**
67      * Returns a graphic object integer property
68      * Implemented in order to avoid returning the address of a
69      * static local variable across too many function calls (see the getProperty
70      * methods of the different Data classes when integer values are returned)
71      * Possibly redundant with getGraphicObjectProperty
72      */
73     int getGraphicObjectIntProperty(char *_pstID, char* _pstName);
74
75     /** Creates a data object */
76     char* createDataObject(char* _pstID, char* _sType);
77
78     /**
79      * Deletes a data object
80      * To be implemented
81      */
82     void deleteDataObject(char* _pstID);
83
84 private :
85     static DataModel *m_me;
86
87     std::map<std::string, Data3D*> *m_dataMap;
88 };
89
90 #endif