/[escript]/trunk/escript/src/DataC.h
ViewVC logotype

Contents of /trunk/escript/src/DataC.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2548 - (show annotations)
Mon Jul 20 06:20:06 2009 UTC (10 years, 7 months ago) by jfenwick
File MIME type: text/plain
File size: 7256 byte(s)
Updating copyright notices
1
2 /*******************************************************
3 *
4 * Copyright (c) 2003-2009 by University of Queensland
5 * Earth Systems Science Computational Center (ESSCC)
6 * http://www.uq.edu.au/esscc
7 *
8 * Primary Business: Queensland, Australia
9 * Licensed under the Open Software License version 3.0
10 * http://www.opensource.org/licenses/osl-3.0.php
11 *
12 *******************************************************/
13
14
15 #if !defined escript_DataC_20040611_H
16 #define escript_DataC_20040611_H
17 #include "system_dep.h"
18
19 /**
20 \brief
21 Provide a wrapper around a Data object so Data may be accessed from C.
22
23 Description:
24 Provide a wrapper around a Data object so Data may be accessed from C.
25
26 */
27 struct escriptDataC {
28 void* m_dataPtr;
29 };
30
31 typedef struct escriptDataC escriptDataC;
32
33 /**
34 \brief
35 Return the function space type code.
36 \param data Input - C wrapper for Data.
37 */
38 ESCRIPT_DLL_API int getFunctionSpaceType(escriptDataC* data);
39
40 /**
41 \brief
42 sets the int variable _fs_ the function space type of _data_ if the data are not empty.
43 \param _fs_ Input/Output - variable to be updated.
44 \param _data_ Input - C wrapper for Data.
45 */
46 #define updateFunctionSpaceType(_fs_,_data_) _fs_=(isEmpty(_data_) ? _fs_ : getFunctionSpaceType(_data_))
47
48 /**
49 \brief
50 is true if the function space type of _data_ is equal to _fs_ or is empty
51 \param _fs_ Input - function space type to checked against
52 \param _data_ Input - C wrapper for Data.
53 */
54 #define functionSpaceTypeEqual(_fs_,_data_) ( (isEmpty(_data_) || _fs_==getFunctionSpaceType(_data_)) ) ? 1 : 0
55
56 /**
57 \brief
58 Returns the true if the data are empty or data is NULL.
59 \param data Input - C wrapper for Data.
60 */
61 ESCRIPT_DLL_API int isEmpty(escriptDataC* data);
62
63 /**
64 \brief
65 Return true if the input shape matches the data point shape for data
66 \param data Input - C wrapper for Data.
67 \param rank Input - number of dimensions.
68 \param dimensions Input -
69 */
70 ESCRIPT_DLL_API int isDataPointShapeEqual(escriptDataC* data, int rank, int* dimensions);
71 /**
72 \brief
73 Return true if the number of data points per sample and the number
74 of samples equal the input values. In the case that data is empty or NULL,
75 true is returned.
76 \param data Input - C wrapper for Data.
77 \param numDataPointsPerSample Input - number of data points per sample
78 \param numSamples Input - number of samples
79 */
80 ESCRIPT_DLL_API int numSamplesEqual(escriptDataC* data, int numDataPointsPerSample,
81 int numSamples);
82
83 /**
84 \brief
85 Returns the number of data points per sample
86 \param data Input - C wrapper for Data.
87 */
88 ESCRIPT_DLL_API int getNumDataPointsPerSample(escriptDataC* data);
89
90 /**
91 \brief
92 Returns the rank of the point data for the data.
93 \param data Input - C wrapper for Data.
94 */
95 ESCRIPT_DLL_API int getDataPointRank(escriptDataC* data);
96
97 /**
98 \brief
99 Returns the value of the i-th component of the shape of the point data.
100 \param data Input - C wrapper for Data.
101 \param i Input - index of shape component.
102 */
103 ESCRIPT_DLL_API int getDataPointShape(escriptDataC* data,int i);
104
105 /**
106 \brief
107 Return the number of doubles needed for each data point.
108 \param data Input - C wrapper for Data.
109 */
110 ESCRIPT_DLL_API int getDataPointSize(escriptDataC* data);
111
112 /*
113 \brief
114 Return the number of doubles stored for the Data object.
115 Argument data may be NULL, in which case 0 is returnd.
116 \param data Input - C wrapper for Data.
117
118 This function has been removed because it does not make sense for LazyData
119 */
120 /*ESCRIPT_DLL_API int getLength(escriptDataC* data);*/
121
122 /**
123 \brief
124 Return true if data can be treated as expanded.
125
126 Argument data may be NULL, in which case false is returnd.
127 \param data Input - C wrapper for Data.
128 \return true if data is expanded or the data is lazy but would resolve to expanded. False otherwise.
129 */
130 ESCRIPT_DLL_API int isExpanded(escriptDataC* data);
131
132 /**
133 \brief
134 Return a pointer to the data for the given sample number.
135 if data is empty NULL is returned.
136 data may be NULL, in which case NULL is returnd.
137 \param data Input - C wrapper for Data.
138 \param sampleNo Input - The sample number.
139 \param buffer - storage to be used when computing the value of the sample.
140
141 Buffers can be created and freed using the allocSampleBuffer and freeSampleBuffer calls.
142 */
143 ESCRIPT_DLL_API double __const * getSampleDataRO(escriptDataC* data, int sampleNo, void* buffer);
144 /* Placement of __const might be important. See .cpp */
145
146
147 ESCRIPT_DLL_API double* getSampleDataRW(escriptDataC* data, int sampleNo);
148
149
150 /* \brief
151 Return a pointer to the data for the given sample number.
152 Fast version of getSampledata: does no error checking.
153 \param data Input - C wrapper for Data.
154 \param sampleNo Input - The sample number.
155 */
156 /*ESCRIPT_DLL_API double* getSampleDataFast(escriptDataC* data, int sampleNo);*/
157
158 /**
159 \brief
160 Return a pointer to the data for the given sample number.
161 Fast version of getSampledataRO: does no error checking.
162 \param data Input - C wrapper for Data.
163 \param sampleNo Input - The sample number.
164 \param buffer - storage to be used when computing the value of the sample.
165
166 Buffers can be created and freed using the allocSampleBuffer and freeSampleBuffer calls.
167 */
168 ESCRIPT_DLL_API double __const* getSampleDataROFast(escriptDataC* data, int sampleNo, void* buffer);
169
170 /**
171 \brief
172 Return a pointer to the data for the given sample number.
173 Fast version of getSampledataRW: does no error checking.
174 \param data Input - C wrapper for Data.
175 \param sampleNo Input - The sample number.
176 */
177 ESCRIPT_DLL_API double* getSampleDataRWFast(escriptDataC* data, int sampleNo);
178
179
180 /**
181 \brief
182 Return getSampleDataRWFast(escriptDataC* data, 0) if there are samples.
183 if not, returns NULL.
184 \warning This function calls requireWrite if there are samples so do not use in parallel sections.
185 \warning Please do not use this in new code.
186 \param data Input - C wrapper for Data.
187 */
188 ESCRIPT_DLL_API double* getDataRW(escriptDataC* data);
189
190
191 /**
192 \brief Create a buffer for use by getSample
193 Allocates a DataVector large enough for DataLazy::resolveSample to operate on for the current Data.
194 Do not use this buffer for other DataC instances (unless you are sure they will be the same size).
195
196 In multi-threaded sections, this needs to be called for each thread.
197
198 \return A DataVector* if Data is not-NULL and lazy, NULL otherwise.
199 \warning This pointer must be deallocated using freeSampleBuffer to avoid cross library memory issues.
200 \param data Input - C wrapper for Data.
201 */
202 ESCRIPT_DLL_API void* allocSampleBuffer(escriptDataC* data);
203
204 /**
205 \brief Free a buffer allocated with allocSampleBuffer.
206 \param buffer Input - pointer to the buffer to deallocate.
207 */
208 ESCRIPT_DLL_API void freeSampleBuffer(void* buffer);
209
210 /**
211 \brief Ensure that this object is ready for writing.
212 It will be resolved and copied if it is currently shared.
213 Use only in single threaded sections of code.
214 Do not create new Data objects based on this one between this call and
215 writing to the object.
216 */
217 ESCRIPT_DLL_API void requireWrite(escriptDataC* data);
218
219 #endif

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.26