commore  1.0.6-SNAPSHOT
All Classes Namespaces Functions Variables Typedefs Enumerations Pages
C_Compatibility.h
1 //
2 // Copyright (c) 2009 CANTOR
3 //
4 
5 #ifndef CMR_C_COMPATIBILITY_INCLUDED
6 #define CMR_C_COMPATIBILITY_INCLUDED
7 
8 #include <stdio.h>
9 
10 #include "Commore.h"
11 #include "Symbol.h"
12 #include "AString.h"
13 #include "String.h"
14 #include "Time.h"
15 #include "Blob.h"
16 #include "StringBuffer.h"
17 #include "List.h"
18 #include "Array.h"
19 #include "Tuple.h"
20 
21 #ifdef WIN32
22 // on Windows, compatibility is maximum with __stdcall: support also VB, ...
23 #define CMRC_API __stdcall
24 #else
25 #define CMRC_API
26 #endif
27 
28 extern "C" {
29 
30  // ======================================================================
31  // STANDARDS CODE COMMORE
32  // ======================================================================
33 
34  const long CMR_C_OK = commore::CMR_OK;
35  const long CMR_C_NOOP = commore::CMR_NOOP;
36 
37  const long CMR_C_GENERIC_ERROR = commore::CMR_GENERIC_ERROR;
38  const long CMR_C_NOT_FOUND = commore::CMR_NOT_FOUND;
39  const long CMR_C_NOT_IMPLEMENTED = commore::CMR_NOT_IMPLEMENTED;
40 
41  const long CMR_C_ALREADY_EXIST = commore::CMR_ALREADY_EXIST;
42  const long CMR_C_END_OF_DATA = commore::CMR_END_OF_DATA;
43  const long CMR_C_INVALID_ANSWER = commore::CMR_INVALID_ANSWER;
44 
45 
46 
47 
48 
49  // ======================================================================
50  // CMR_C types
51  // ======================================================================
52 
53  // List & Iterator Type
54  typedef void* CMR_C_LIST_BOOL;
55  typedef void* CMR_C_ITERATOR_BOOL;
56 
57  typedef void* CMR_C_LIST_INT;
58  typedef void* CMR_C_ITERATOR_INT;
59 
60  typedef void* CMR_C_LIST_LONG;
61  typedef void* CMR_C_ITERATOR_LONG;
62 
63  typedef void* CMR_C_LIST_FLOAT;
64  typedef void* CMR_C_ITERATOR_FLOAT;
65 
66  typedef void* CMR_C_LIST_DOUBLE;
67  typedef void* CMR_C_ITERATOR_DOUBLE;
68 
69  typedef void* CMR_C_LIST_ASTRING; // char*
70  typedef void* CMR_C_ITERATOR_ASTRING;
71 
72  typedef void* CMR_C_LIST_STRING; // wchar_t*
73  typedef void* CMR_C_ITERATOR_STRING;
74 
75  typedef void* CMR_C_LIST_BLOB;
76  typedef void* CMR_C_ITERATOR_BLOB;
77 
78  typedef void* CMR_C_LIST_TIMEDATE;
79  typedef void* CMR_C_ITERATOR_TIMEDATE;
80 
81  typedef void* CMR_C_LIST_TIMEPERIOD;
82  typedef void* CMR_C_ITERATOR_TIMEPERIOD;
83 
84  // Array Type
85  typedef void* CMR_C_ARRAY_INT;
86  typedef void* CMR_C_ARRAY_LONG;
87  typedef void* CMR_C_ARRAY_FLOAT;
88  typedef void* CMR_C_ARRAY_DOUBLE;
89 
90  // Complex Type
91  typedef void* CMR_C_BLOB;
92  typedef void* CMR_C_TIMEDATE;
93  typedef void* CMR_C_TIMEPERIOD;
94  typedef void* CMR_C_TUPLE;
95 
96 
97 
98  // ======================================================================
99  // Macros
100  // ======================================================================
101 #define LIST_FUNC(listName, iteratorName, T) \
102  CMREXD CMR_C_##listName CMRC_API CMRC_##listName##_create(); \
103  CMREXD void CMRC_API CMRC_##listName##_delete(CMR_C_##listName l); \
104  CMREXD void CMRC_API CMRC_##listName##_clear(CMR_C_##listName l); \
105  CMREXD void CMRC_API CMRC_##listName##_add(CMR_C_##listName l, T v); \
106  CMREXD CMR_C_##iteratorName CMRC_API CMRC_##listName##_begin(CMR_C_##listName l); \
107  CMREXD void CMRC_API CMRC_##iteratorName##_delete(CMR_C_##iteratorName it); \
108  CMREXD T CMRC_API CMRC_##iteratorName##_get(CMR_C_##iteratorName it); \
109  CMREXD bool CMRC_API CMRC_##iteratorName##_next(CMR_C_##iteratorName it); \
110  CMREXD bool CMRC_API CMRC_##iteratorName##_more(CMR_C_##iteratorName it); \
111 
112 #define FCT_ARRAY(ArrayName, T) \
113  CMREXD CMR_C_##ArrayName CMRC_API CMRC_##ArrayName##_create(); \
114  CMREXD void CMRC_API CMRC_##ArrayName##_delete(CMR_C_##ArrayName l); \
115  CMREXD T CMRC_API CMRC_##ArrayName##_get(CMR_C_##ArrayName l, int index, T v); \
116  CMREXD void CMRC_API CMRC_##ArrayName##_set(CMR_C_##ArrayName l, int index, T v);\
117  CMREXD size_t CMRC_API CMRC_##ArrayName##_size(CMR_C_##ArrayName l, T v);\
118  CMREXD void CMRC_API CMRC_##ArrayName##_add(CMR_C_##ArrayName l, T v);
119 
120  // ======================================================================
121  // Functions
122  // ======================================================================
123 
124  // --------------------- Function to manipulate a list
125  LIST_FUNC(LIST_BOOL, ITERATOR_BOOL, bool);
126  LIST_FUNC(LIST_INT, ITERATOR_INT, int);
127  LIST_FUNC(LIST_LONG, ITERATOR_LONG, long);
128  LIST_FUNC(LIST_FLOAT, ITERATOR_FLOAT, float);
129  LIST_FUNC(LIST_DOUBLE, ITERATOR_DOUBLE, double);
130  LIST_FUNC(LIST_ASTRING, ITERATOR_ASTRING, const char*);
131  LIST_FUNC(LIST_STRING, ITERATOR_STRING, const wchar_t*);
132  LIST_FUNC(LIST_BLOB, ITERATOR_BLOB, CMR_C_BLOB);
133  LIST_FUNC(LIST_TIMEDATE, ITERATOR_TIMEDATE, CMR_C_TIMEDATE);
134  LIST_FUNC(LIST_TIMEPERIOD, ITERATOR_TIMEPERIOD, CMR_C_TIMEPERIOD);
135 
136  // --------------------- Function to manipulate arraies
137  FCT_ARRAY(ARRAY_INT, commore::Int)
138  FCT_ARRAY(ARRAY_LONG, commore::Long)
139  FCT_ARRAY(ARRAY_FLOAT, commore::Float)
140  FCT_ARRAY(ARRAY_DOUBLE, commore::Double)
141 
142  // --------------------- Function to manipulate a blob
143  CMREXD CMR_C_BLOB CMRC_API CMRC_BLOB_create(char* content, size_t size, size_t allocated_size);
144  CMREXD void CMRC_API CMRC_BLOB_delete(CMR_C_BLOB blob);
145  CMREXD char* CMRC_API CMRC_BLOB_set(CMR_C_BLOB blob, const char* content, size_t size, size_t allocated_size);
146  CMREXD const char* CMRC_API CMRC_BLOB_get_content(CMR_C_BLOB blob);
147  CMREXD size_t CMRC_API CMRC_BLOB_get_size(CMR_C_BLOB blob);
148  CMREXD void CMRC_API CMRC_BLOB_clear(CMR_C_BLOB blob);
149 
150  // --------------------- Function to manipulate a timedate
151  CMREXD CMR_C_TIMEDATE CMRC_API CMRC_TIMEDATE_create(int year, int month, int day, int hour, int min, int second, int mums);
152  CMREXD void CMRC_API CMRC_TIMEDATE_delete(CMR_C_TIMEDATE timeDate);
153  CMREXD CMR_C_TIMEDATE CMRC_API CMRC_TIMEDATE_now();
154  CMREXD CMR_C_TIMEPERIOD CMRC_API CMRC_TIMEDATE_get_time(CMR_C_TIMEDATE timeDate);
155  CMREXD int CMRC_API CMRC_TIMEDATE_get_year(CMR_C_TIMEDATE timeDate);
156  CMREXD int CMRC_API CMRC_TIMEDATE_get_month(CMR_C_TIMEDATE timeDate);
157  CMREXD int CMRC_API CMRC_TIMEDATE_get_day(CMR_C_TIMEDATE timeDate);
158  CMREXD int CMRC_API CMRC_TIMEDATE_get_hour(CMR_C_TIMEDATE timeDate);
159  CMREXD int CMRC_API CMRC_TIMEDATE_get_minute(CMR_C_TIMEDATE timeDate);
160  CMREXD int CMRC_API CMRC_TIMEDATE_get_second(CMR_C_TIMEDATE timeDate);
161  CMREXD int CMRC_API CMRC_TIMEDATE_get_millisecond(CMR_C_TIMEDATE timeDate);
162  CMREXD int CMRC_API CMRC_TIMEDATE_get_microsecond(CMR_C_TIMEDATE timeDate);
163 
164  // --------------------- Function to manipulate a timeperiod
165  CMREXD CMR_C_TIMEPERIOD CMRC_API CMRC_TIMEPERIOD_create(long seconds);
166  CMREXD void CMRC_API CMRC_TIMEPERIOD_delete(CMR_C_TIMEPERIOD timePeriod);
167  CMREXD long CMRC_API CMRC_TIMEPERIOD_to_days(CMR_C_TIMEPERIOD timePeriod);
168  CMREXD long CMRC_API CMRC_TIMEPERIOD_to_hours(CMR_C_TIMEPERIOD timePeriod);
169  CMREXD long CMRC_API CMRC_TIMEPERIOD_to_minutes(CMR_C_TIMEPERIOD timePeriod);
170  CMREXD long CMRC_API CMRC_TIMEPERIOD_to_seconds(CMR_C_TIMEPERIOD timePeriod);
171  CMREXD long CMRC_API CMRC_TIMEPERIOD_days(CMR_C_TIMEPERIOD timePeriod);
172  CMREXD long CMRC_API CMRC_TIMEPERIOD_hours(CMR_C_TIMEPERIOD timePeriod);
173  CMREXD long CMRC_API CMRC_TIMEPERIOD_minutes(CMR_C_TIMEPERIOD timePeriod);
174  CMREXD long CMRC_API CMRC_TIMEPERIOD_seconds(CMR_C_TIMEPERIOD timePeriod);
175  CMREXD long CMRC_API CMRC_TIMEPERIOD_microseconds(CMR_C_TIMEPERIOD timePeriod);
176  CMREXD long CMRC_API CMRC_TIMEPERIOD_milliseconds(CMR_C_TIMEPERIOD timePeriod);
177 
178  // --------------------- Function to manipulate a Tuple
179  CMREXD int CMRC_API CMRC_TUPLE_copy(CMR_C_TUPLE src, CMR_C_TUPLE dst);
180  CMREXD int CMRC_API CMRC_TUPLE_splice(CMR_C_TUPLE src, CMR_C_TUPLE dst);
181 
182 } // extern "C"
183 
184 #endif