Loading bindings/C/c/adios2_c_attribute.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -134,6 +134,26 @@ adios2_error adios2_attribute_is_value(adios2_bool *result, } } adios2_error adios2_attribute_size(size_t *size, const adios2_attribute *attribute) { try { adios2::helper::CheckForNullptr(attribute, "in call to adios2_attribute_size"); const adios2::core::AttributeBase *attributeBase = reinterpret_cast<const adios2::core::AttributeBase *>(attribute); *size = attributeBase->m_IsSingleValue ? 1 : attributeBase->m_Elements; return adios2_error_none; } catch (...) { return static_cast<adios2_error>( adios2::helper::ExceptionToError("adios2_attribute_size")); } } adios2_error adios2_attribute_data(void *data, size_t *size, const adios2_attribute *attribute) { Loading bindings/C/c/adios2_c_attribute.h +10 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,16 @@ adios2_error adios2_attribute_type_string(char *type, size_t *size, adios2_error adios2_attribute_is_value(adios2_bool *result, const adios2_attribute *attribute); /** * Returns the number of elements (as in C++ STL size() function) if attribute * is a 1D array. If single value returns 1 * @param size output, number of elements in attribute * @param attribute handler * @return adios2_error 0: success, see enum adios2_error for errors */ adios2_error adios2_attribute_size(size_t *size, const adios2_attribute *attribute); /** * Retrieve attribute data pointer (read-only) * @param data output attribute values, must be pre-allocated Loading bindings/Fortran/CMakeLists.txt +5 −2 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ FortranCInterface_VERIFY(CXX QUIET) set(F2C ${CMAKE_CURRENT_SOURCE_DIR}/f2c/adios2_f2c_adios.cpp ${CMAKE_CURRENT_SOURCE_DIR}/f2c/adios2_f2c_attribute.cpp ${CMAKE_CURRENT_SOURCE_DIR}/f2c/adios2_f2c_io.cpp ${CMAKE_CURRENT_SOURCE_DIR}/f2c/adios2_f2c_variable.cpp ${CMAKE_CURRENT_SOURCE_DIR}/f2c/adios2_f2c_engine.cpp Loading @@ -23,6 +24,8 @@ set(MODULES ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_functions_allocate_mod.f90 ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_parameters_mod.f90 ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_adios_mod.f90 ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_attribute_mod.f90 ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_attribute_data_mod.f90 ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_io_mod.f90 ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_io_define_variable_mod.f90 ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_io_define_attribute_mod.f90 Loading bindings/Fortran/f2c/adios2_f2c_attribute.cpp 0 → 100644 +109 −0 Original line number Diff line number Diff line /* * Distributed under the OSI-approved Apache License, Version 2.0. See * accompanying file Copyright.txt for details. * * adios2_f2c_attribute.cpp * * Created on: Dec 10, 2018 * Author: William F Godoy godoywf@ornl.gov */ #include "adios2_f2c_common.h" #include "adios2/core/Attribute.h" #include <string.h> //strcpy #ifdef __cplusplus extern "C" { #endif void FC_GLOBAL(adios2_attribute_is_value_f2c, ADIOS2_ATTRIBUTE_IS_VALUE_F2C)( int *is_value, const adios2_attribute **attribute, int *ierr) { adios2_bool isValueC; *ierr = static_cast<int>(adios2_attribute_is_value(&isValueC, *attribute)); if (*ierr == static_cast<int>(adios2_error_none)) { *is_value = (isValueC == adios2_true) ? 1 : 0; } } void FC_GLOBAL(adios2_attribute_type_f2c, ADIOS2_ATTRIBUTE_TYPE_F2C)(int *type, const adios2_attribute **attribute, int *ierr) { *type = -1; adios2_type typeC; *ierr = static_cast<int>(adios2_attribute_type(&typeC, *attribute)); if (*ierr == static_cast<int>(adios2_error_none)) { *type = static_cast<int>(typeC); } } void FC_GLOBAL(adios2_attribute_length_f2c, ADIOS2_ATTRIBUTE_LENGTH_F2C)(int *length, const adios2_attribute **attribute, int *ierr) { *length = -1; size_t lengthC; *ierr = static_cast<int>(adios2_attribute_size(&lengthC, *attribute)); if (*ierr == static_cast<int>(adios2_error_none)) { *length = static_cast<int>(lengthC); } } void FC_GLOBAL(adios2_attribute_value_f2c, ADIOS2_ATTRIBUTE_VALUE_F2C)(void *data, const adios2_attribute **attribute, int *ierr) { size_t size = 0; *ierr = static_cast<int>(adios2_attribute_data(data, &size, *attribute)); } void FC_GLOBAL(adios2_attribute_data_f2c, ADIOS2_ATTRIBUTE_DATA_F2C)(void *data, int *size, const adios2_attribute **attribute, int *ierr) { try { int type; FC_GLOBAL(adios2_attribute_type_f2c, ADIOS2_ATTRIBUTE_TYPE_F2C) (&type, attribute, ierr); if (type == adios2_type_string) { const adios2::core::Attribute<std::string> *attributeCpp = reinterpret_cast<const adios2::core::Attribute<std::string> *>( *attribute); char *dataT = reinterpret_cast<char *>(data); for (auto e = 0; e < *size; ++e) { attributeCpp->m_DataArray[e].copy( &dataT[e * adios2_string_array_element_max_size], attributeCpp->m_DataArray[e].size()); } } else { size_t sizeC; *ierr = static_cast<int>( adios2_attribute_data(data, &sizeC, *attribute)); } } catch (...) { *ierr = adios2_error_exception; } } #ifdef __cplusplus } #endif bindings/Fortran/f2c/adios2_f2c_variable.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -294,7 +294,7 @@ void FC_GLOBAL(adios2_set_operation_parameter_f2c, } void FC_GLOBAL(adios2_variable_min_f2c, adios2_variable_MIN_F2C)(void *min, ADIOS2_VARIABLE_MIN_F2C)(void *min, const adios2_variable **variable, int *ierr) { Loading @@ -302,7 +302,7 @@ void FC_GLOBAL(adios2_variable_min_f2c, } void FC_GLOBAL(adios2_variable_max_f2c, adios2_variable_MAX_F2C)(void *max, ADIOS2_VARIABLE_MAX_F2C)(void *max, const adios2_variable **variable, int *ierr) { Loading Loading
bindings/C/c/adios2_c_attribute.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -134,6 +134,26 @@ adios2_error adios2_attribute_is_value(adios2_bool *result, } } adios2_error adios2_attribute_size(size_t *size, const adios2_attribute *attribute) { try { adios2::helper::CheckForNullptr(attribute, "in call to adios2_attribute_size"); const adios2::core::AttributeBase *attributeBase = reinterpret_cast<const adios2::core::AttributeBase *>(attribute); *size = attributeBase->m_IsSingleValue ? 1 : attributeBase->m_Elements; return adios2_error_none; } catch (...) { return static_cast<adios2_error>( adios2::helper::ExceptionToError("adios2_attribute_size")); } } adios2_error adios2_attribute_data(void *data, size_t *size, const adios2_attribute *attribute) { Loading
bindings/C/c/adios2_c_attribute.h +10 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,16 @@ adios2_error adios2_attribute_type_string(char *type, size_t *size, adios2_error adios2_attribute_is_value(adios2_bool *result, const adios2_attribute *attribute); /** * Returns the number of elements (as in C++ STL size() function) if attribute * is a 1D array. If single value returns 1 * @param size output, number of elements in attribute * @param attribute handler * @return adios2_error 0: success, see enum adios2_error for errors */ adios2_error adios2_attribute_size(size_t *size, const adios2_attribute *attribute); /** * Retrieve attribute data pointer (read-only) * @param data output attribute values, must be pre-allocated Loading
bindings/Fortran/CMakeLists.txt +5 −2 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ FortranCInterface_VERIFY(CXX QUIET) set(F2C ${CMAKE_CURRENT_SOURCE_DIR}/f2c/adios2_f2c_adios.cpp ${CMAKE_CURRENT_SOURCE_DIR}/f2c/adios2_f2c_attribute.cpp ${CMAKE_CURRENT_SOURCE_DIR}/f2c/adios2_f2c_io.cpp ${CMAKE_CURRENT_SOURCE_DIR}/f2c/adios2_f2c_variable.cpp ${CMAKE_CURRENT_SOURCE_DIR}/f2c/adios2_f2c_engine.cpp Loading @@ -23,6 +24,8 @@ set(MODULES ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_functions_allocate_mod.f90 ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_parameters_mod.f90 ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_adios_mod.f90 ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_attribute_mod.f90 ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_attribute_data_mod.f90 ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_io_mod.f90 ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_io_define_variable_mod.f90 ${CMAKE_CURRENT_SOURCE_DIR}/modules/adios2_io_define_attribute_mod.f90 Loading
bindings/Fortran/f2c/adios2_f2c_attribute.cpp 0 → 100644 +109 −0 Original line number Diff line number Diff line /* * Distributed under the OSI-approved Apache License, Version 2.0. See * accompanying file Copyright.txt for details. * * adios2_f2c_attribute.cpp * * Created on: Dec 10, 2018 * Author: William F Godoy godoywf@ornl.gov */ #include "adios2_f2c_common.h" #include "adios2/core/Attribute.h" #include <string.h> //strcpy #ifdef __cplusplus extern "C" { #endif void FC_GLOBAL(adios2_attribute_is_value_f2c, ADIOS2_ATTRIBUTE_IS_VALUE_F2C)( int *is_value, const adios2_attribute **attribute, int *ierr) { adios2_bool isValueC; *ierr = static_cast<int>(adios2_attribute_is_value(&isValueC, *attribute)); if (*ierr == static_cast<int>(adios2_error_none)) { *is_value = (isValueC == adios2_true) ? 1 : 0; } } void FC_GLOBAL(adios2_attribute_type_f2c, ADIOS2_ATTRIBUTE_TYPE_F2C)(int *type, const adios2_attribute **attribute, int *ierr) { *type = -1; adios2_type typeC; *ierr = static_cast<int>(adios2_attribute_type(&typeC, *attribute)); if (*ierr == static_cast<int>(adios2_error_none)) { *type = static_cast<int>(typeC); } } void FC_GLOBAL(adios2_attribute_length_f2c, ADIOS2_ATTRIBUTE_LENGTH_F2C)(int *length, const adios2_attribute **attribute, int *ierr) { *length = -1; size_t lengthC; *ierr = static_cast<int>(adios2_attribute_size(&lengthC, *attribute)); if (*ierr == static_cast<int>(adios2_error_none)) { *length = static_cast<int>(lengthC); } } void FC_GLOBAL(adios2_attribute_value_f2c, ADIOS2_ATTRIBUTE_VALUE_F2C)(void *data, const adios2_attribute **attribute, int *ierr) { size_t size = 0; *ierr = static_cast<int>(adios2_attribute_data(data, &size, *attribute)); } void FC_GLOBAL(adios2_attribute_data_f2c, ADIOS2_ATTRIBUTE_DATA_F2C)(void *data, int *size, const adios2_attribute **attribute, int *ierr) { try { int type; FC_GLOBAL(adios2_attribute_type_f2c, ADIOS2_ATTRIBUTE_TYPE_F2C) (&type, attribute, ierr); if (type == adios2_type_string) { const adios2::core::Attribute<std::string> *attributeCpp = reinterpret_cast<const adios2::core::Attribute<std::string> *>( *attribute); char *dataT = reinterpret_cast<char *>(data); for (auto e = 0; e < *size; ++e) { attributeCpp->m_DataArray[e].copy( &dataT[e * adios2_string_array_element_max_size], attributeCpp->m_DataArray[e].size()); } } else { size_t sizeC; *ierr = static_cast<int>( adios2_attribute_data(data, &sizeC, *attribute)); } } catch (...) { *ierr = adios2_error_exception; } } #ifdef __cplusplus } #endif
bindings/Fortran/f2c/adios2_f2c_variable.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -294,7 +294,7 @@ void FC_GLOBAL(adios2_set_operation_parameter_f2c, } void FC_GLOBAL(adios2_variable_min_f2c, adios2_variable_MIN_F2C)(void *min, ADIOS2_VARIABLE_MIN_F2C)(void *min, const adios2_variable **variable, int *ierr) { Loading @@ -302,7 +302,7 @@ void FC_GLOBAL(adios2_variable_min_f2c, } void FC_GLOBAL(adios2_variable_max_f2c, adios2_variable_MAX_F2C)(void *max, ADIOS2_VARIABLE_MAX_F2C)(void *max, const adios2_variable **variable, int *ierr) { Loading