@@ -178,68 +178,54 @@ namespace {
178178 }
179179}
180180
181- void FesapiHdfProxy::writeArrayNd (const std::string & groupName,
182- const std::string & name,
181+ void FesapiHdfProxy::writeArrayNd (const std::string& groupName,
182+ const std::string& name,
183183 COMMON_NS::AbstractObject::numericalDatatypeEnum datatype,
184- const void * values,
185- const uint64_t * numValuesInEachDimension,
184+ const void * values,
185+ const uint64_t * numValuesInEachDimension,
186186 unsigned int numDimensions)
187187{
188- if (!isOpened ())
189- open ();
190-
191- // URI AND PATH
192- std::string uri{ buildEtp12Uri () };
193-
194- std::string pathInResource{ (groupName.back () == ' /' ?
195- groupName : groupName + ' /' ) + name };
196-
197- // Create Dimensions and Total Count
198- size_t totalCount{ 1 };
199- std::vector<int64_t > dimensions{};
200-
201- for (size_t i = 0 ; i < numDimensions; ++i) {
202- dimensions.push_back (numValuesInEachDimension[i]);
203- totalCount *= numValuesInEachDimension[i];
204- }
205-
206- // Determine Value Size (bytes) and Any Array Type
207- size_t valueSize{ 1 };
208-
209- switch (datatype) {
210- case COMMON_NS::AbstractObject::numericalDatatypeEnum::DOUBLE:
211- valueSize = sizeof (double );
212- break ;
213- case COMMON_NS::AbstractObject::numericalDatatypeEnum::FLOAT:
214- valueSize = sizeof (float );
215- break ;
216- case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT64:
217- case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT64:
218- valueSize = sizeof (int64_t );
219- break ;
220- case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT32:
221- case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT32:
222- valueSize = sizeof (int32_t );
223- break ;
224- case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT16:
225- case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT16:
226- valueSize = sizeof (short );
227- break ;
228- case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT8:
229- case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT8:
230- valueSize = sizeof (char );
231- break ;
232- default :
233- throw std::logic_error (
234- " You need to give a COMMON_NS::AbstractObject::numericalDatatypeEnum as the datatype" );
235- }
188+ if (!isOpened ()) open ();
189+
190+ const size_t totalCount = std::accumulate (numValuesInEachDimension, numValuesInEachDimension + numDimensions, size_t { 1 }, std::multiplies<uint64_t >());
191+ const size_t valueSize = [&datatype] {
192+ switch (datatype) {
193+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::DOUBLE:
194+ return sizeof (double );
195+ break ;
196+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::FLOAT:
197+ return sizeof (float );
198+ break ;
199+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT64:
200+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT64:
201+ return sizeof (int64_t );
202+ break ;
203+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT32:
204+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT32:
205+ return sizeof (int32_t );
206+ break ;
207+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT16:
208+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT16:
209+ return sizeof (short );
210+ break ;
211+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT8:
212+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT8:
213+ return sizeof (char );
214+ break ;
215+ default :
216+ throw std::logic_error (
217+ " You need to give a COMMON_NS::AbstractObject::numericalDatatypeEnum as the datatype" );
218+ }
219+ }();
236220
237221 if (totalCount * valueSize <= maxArraySize_) {
238222 // PUT DATA ARRAYS
239223 auto pda = std::make_shared<Energistics::Etp::v12::Protocol::DataArray::PutDataArrays>();
240- pda->dataArrays [" 0" ].uid .uri = uri;
241- pda->dataArrays [" 0" ].uid .pathInResource = pathInResource;
242- pda->dataArrays [" 0" ].array .dimensions = dimensions;
224+ pda->dataArrays [" 0" ].uid .uri = buildEtp12Uri ();
225+ pda->dataArrays [" 0" ].uid .pathInResource = (groupName.back () == ' /' ? groupName : groupName + ' /' ) + name;
226+ pda->dataArrays [" 0" ].array .dimensions .resize (numDimensions);
227+ std::transform (numValuesInEachDimension, numValuesInEachDimension + numDimensions, pda->dataArrays [" 0" ].array .dimensions .begin (),
228+ [](uint64_t val) { return static_cast <int64_t >(val); });
243229
244230 // Create AVRO Array
245231 pda->dataArrays [" 0" ].array .data = convertVoidArrayIntoAvroAnyArray (datatype, values, totalCount);
@@ -270,48 +256,43 @@ void FesapiHdfProxy::createArrayNd(
270256 const uint64_t * numValuesInEachDimension,
271257 unsigned int numDimensions)
272258{
273- std::string pathInResource{ (groupName.back () == ' /' ?
274- groupName : groupName + ' /' ) + datasetName };
275-
276- std::vector<int64_t > dimensions{};
277- for (size_t i = 0 ; i < numDimensions; ++i) {
278- dimensions.push_back (numValuesInEachDimension[i]);
279- }
280- Energistics::Etp::v12::Datatypes::AnyArrayType anyArrayType;
281-
282- switch (datatype) {
283- case COMMON_NS::AbstractObject::numericalDatatypeEnum::DOUBLE:
284- anyArrayType = Energistics::Etp::v12::Datatypes::AnyArrayType::arrayOfDouble;
285- break ;
286- case COMMON_NS::AbstractObject::numericalDatatypeEnum::FLOAT:
287- anyArrayType = Energistics::Etp::v12::Datatypes::AnyArrayType::arrayOfFloat;
288- break ;
289- case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT64:
290- case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT64:
291- anyArrayType = Energistics::Etp::v12::Datatypes::AnyArrayType::arrayOfLong;
292- break ;
293- case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT32:
294- case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT32:
295- anyArrayType = Energistics::Etp::v12::Datatypes::AnyArrayType::arrayOfInt;
296- break ;
297- case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT16:
298- case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT16:
299- anyArrayType = Energistics::Etp::v12::Datatypes::AnyArrayType::arrayOfInt;
300- break ;
301- case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT8:
302- case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT8:
303- anyArrayType = Energistics::Etp::v12::Datatypes::AnyArrayType::bytes;
304- break ;
305- default :
306- throw std::logic_error (
307- " You need to give a COMMON_NS::AbstractObject::numericalDatatypeEnum as the datatype" );
308- }
259+ const Energistics::Etp::v12::Datatypes::AnyArrayType anyArrayType = [&datatype] {
260+ switch (datatype) {
261+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::DOUBLE:
262+ return Energistics::Etp::v12::Datatypes::AnyArrayType::arrayOfDouble;
263+ break ;
264+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::FLOAT:
265+ return Energistics::Etp::v12::Datatypes::AnyArrayType::arrayOfFloat;
266+ break ;
267+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT64:
268+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT64:
269+ return Energistics::Etp::v12::Datatypes::AnyArrayType::arrayOfLong;
270+ break ;
271+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT32:
272+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT32:
273+ return Energistics::Etp::v12::Datatypes::AnyArrayType::arrayOfInt;
274+ break ;
275+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT16:
276+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT16:
277+ return Energistics::Etp::v12::Datatypes::AnyArrayType::arrayOfInt;
278+ break ;
279+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT8:
280+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT8:
281+ return Energistics::Etp::v12::Datatypes::AnyArrayType::bytes;
282+ break ;
283+ default :
284+ throw std::logic_error (
285+ " You need to give a COMMON_NS::AbstractObject::numericalDatatypeEnum as the datatype" );
286+ }
287+ }();
309288
310289 // PUT UNINITIALIZED DATA ARRAYS
311290 auto puda = std::make_shared<Energistics::Etp::v12::Protocol::DataArray::PutUninitializedDataArrays>();
312291 puda->dataArrays [" 0" ].uid .uri = buildEtp12Uri ();
313- puda->dataArrays [" 0" ].uid .pathInResource = pathInResource;
314- puda->dataArrays [" 0" ].metadata .dimensions = dimensions;
292+ puda->dataArrays [" 0" ].uid .pathInResource = (groupName.back () == ' /' ? groupName : groupName + ' /' ) + datasetName;
293+ puda->dataArrays [" 0" ].metadata .dimensions .resize (numDimensions);
294+ std::transform (numValuesInEachDimension, numValuesInEachDimension + numDimensions, puda->dataArrays [" 0" ].metadata .dimensions .begin (),
295+ [](uint64_t val) { return static_cast <int64_t >(val); });
315296 puda->dataArrays [" 0" ].metadata .transportArrayType = anyArrayType;
316297
317298 // Send Uninitialized Data Arrays
@@ -358,62 +339,53 @@ std::set<int64_t> FesapiHdfProxy::async_writeArrayNdSlab(
358339 const uint64_t * offsetInEachDimension,
359340 unsigned int numDimensions)
360341{
361- if (!isOpened ())
362- open ();
363-
364- // URI AND PATH
365- const std::string uri{ buildEtp12Uri () };
366-
367- const std::string pathInResource{ (groupName.back () == ' /' ?
368- groupName : groupName + ' /' ) + datasetName };
342+ if (!isOpened ()) open ();
369343
370344 // Create Total Count
371- const size_t totalCount = std::accumulate (numValuesInEachDimension, numValuesInEachDimension + numDimensions, 1 , std::multiplies<size_t >());
372-
373- // Determine Value Size (bytes) and Any Array Type
374- size_t valueSize{ 1 };
375-
376- switch (datatype) {
377- case COMMON_NS::AbstractObject::numericalDatatypeEnum::DOUBLE:
378- valueSize = sizeof (double );
379- break ;
380- case COMMON_NS::AbstractObject::numericalDatatypeEnum::FLOAT:
381- valueSize = sizeof (float );
382- break ;
383- case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT64:
384- case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT64:
385- valueSize = sizeof (int64_t );
386- break ;
387- case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT32:
388- case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT32:
389- valueSize = sizeof (int32_t );
390- break ;
391- case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT16:
392- case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT16:
393- valueSize = sizeof (int16_t );
394- break ;
395- case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT8:
396- case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT8:
397- valueSize = sizeof (int8_t );
398- break ;
399- default :
400- throw std::logic_error (
401- " You need to give a COMMON_NS::AbstractObject::numericalDatatypeEnum as the datatype" );
402- }
345+ const size_t totalCount = std::accumulate (numValuesInEachDimension, numValuesInEachDimension + numDimensions, 1ull , std::multiplies<size_t >());
346+ const size_t valueSize = [&datatype] {
347+ switch (datatype) {
348+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::DOUBLE:
349+ return sizeof (double );
350+ break ;
351+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::FLOAT:
352+ return sizeof (float );
353+ break ;
354+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT64:
355+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT64:
356+ return sizeof (int64_t );
357+ break ;
358+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT32:
359+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT32:
360+ return sizeof (int32_t );
361+ break ;
362+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT16:
363+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT16:
364+ return sizeof (short );
365+ break ;
366+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::INT8:
367+ case COMMON_NS::AbstractObject::numericalDatatypeEnum::UINT8:
368+ return sizeof (char );
369+ break ;
370+ default :
371+ throw std::logic_error (
372+ " You need to give a COMMON_NS::AbstractObject::numericalDatatypeEnum as the datatype" );
373+ }
374+ }();
403375
404376 std::set<int64_t > sentMessageIds;
405377 if (totalCount * valueSize <= maxArraySize_) {
406378 std::vector<int64_t > counts;
407379 std::vector<int64_t > starts;
408380 for (size_t i = 0 ; i < numDimensions; ++i) {
409- counts.push_back (numValuesInEachDimension[i]);
410- starts.push_back (offsetInEachDimension[i]);
381+ counts.push_back (static_cast < int64_t >( numValuesInEachDimension[i]) );
382+ starts.push_back (static_cast < int64_t >( offsetInEachDimension[i]) );
411383 }
412384
413385 // PUT DATA SUBARRAYS
414386 auto pdsa = std::make_shared<Energistics::Etp::v12::Protocol::DataArray::PutDataSubarrays>();
415- pdsa->dataSubarrays [" 0" ].uid .uri = uri ;
416- pdsa->dataSubarrays [" 0" ].uid .pathInResource = pathInResource ;
387+ pdsa->dataSubarrays [" 0" ].uid .uri = buildEtp12Uri () ;
388+ pdsa->dataSubarrays [" 0" ].uid .pathInResource = (groupName. back () == ' / ' ? groupName : groupName + ' / ' ) + datasetName ;
417389 pdsa->dataSubarrays [" 0" ].starts = starts;
418390 pdsa->dataSubarrays [" 0" ].counts = counts;
419391
@@ -443,7 +415,7 @@ std::set<int64_t> FesapiHdfProxy::async_writeArrayNdSlab(
443415 starts.get (), numDimensions);
444416 sentMessageIds.insert (intermediateResult.begin (), intermediateResult.end ());
445417
446- writtenTotalCount = std::accumulate (counts.get (), counts.get () + numDimensions, 1 , std::multiplies<size_t >());
418+ writtenTotalCount = std::accumulate (counts.get (), counts.get () + numDimensions, 1ull , std::multiplies<size_t >());
447419
448420 starts[dimIdx] += counts[dimIdx];
449421 counts[dimIdx] = previousCount - counts[dimIdx];
0 commit comments