MCPcopy Create free account
hub / github.com/cinder/Cinder / copyData

Function copyData

src/cinder/GeomIo.cpp:198–260  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

196} // anonymous namespace
197
198void copyData( uint8_t srcDimensions, size_t srcStrideBytes, const float *srcData, size_t numElements, uint8_t dstDimensions, size_t dstStrideBytes, float *dstData )
199{
200 if( srcStrideBytes == 0 )
201 srcStrideBytes = srcDimensions * sizeof(float);
202 if( dstStrideBytes == 0 )
203 dstStrideBytes = dstDimensions * sizeof(float);
204
205 if( srcDimensions == 0 ) { // fill with zeros
206 for( size_t v = 0; v < numElements; ++v ) {
207 for( uint8_t d = 0; d < dstDimensions; ++d )
208 dstData[d] = 0;
209 dstData = (float*)((uint8_t*)dstData + dstStrideBytes);
210 }
211 }
212 else if( srcStrideBytes == srcDimensions * sizeof(float) ) // call equivalent method that doesn't support srcStrideBytes
213 copyData( srcDimensions, srcData, numElements, dstDimensions, dstStrideBytes, dstData );
214 // we can get away with a memcpy
215 else if( (srcDimensions == dstDimensions) && (dstStrideBytes == dstDimensions * sizeof(float)) && (srcStrideBytes == dstStrideBytes) ) {
216 memcpy( dstData, srcData, numElements * srcDimensions * sizeof(float) );
217 }
218 else {
219 switch( srcDimensions ) {
220 case 1:
221 switch( dstDimensions ) {
222 case 1: copyDataImpl<1,1>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
223 case 2: copyDataImpl<1,2>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
224 case 3: copyDataImpl<1,3>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
225 case 4: copyDataImpl<1,4>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
226 default: throw ExcIllegalDestDimensions();
227 }
228 break;
229 case 2:
230 switch( dstDimensions ) {
231 case 1: copyDataImpl<2,1>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
232 case 2: copyDataImpl<2,2>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
233 case 3: copyDataImpl<2,3>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
234 case 4: copyDataImpl<2,4>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
235 default: throw ExcIllegalDestDimensions();
236 }
237 break;
238 case 3:
239 switch( dstDimensions ) {
240 case 1: copyDataImpl<3,1>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
241 case 2: copyDataImpl<3,2>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
242 case 3: copyDataImpl<3,3>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
243 case 4: copyDataImpl<3,4>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
244 default: throw ExcIllegalDestDimensions();
245 }
246 break;
247 case 4:
248 switch( dstDimensions ) {
249 case 1: copyDataImpl<4,1>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
250 case 2: copyDataImpl<4,2>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
251 case 3: copyDataImpl<4,3>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
252 case 4: copyDataImpl<4,4>( srcData, srcStrideBytes, numElements, dstStrideBytes, dstData ); break;
253 default: throw ExcIllegalDestDimensions();
254 }
255 break;

Callers 6

copyAttribMethod · 0.85
processMethod · 0.85
copyAttribMethod · 0.85
appendAttribMethod · 0.85
copyAttribMethod · 0.85
copyAttribMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected