From dd8ef18181c0cdf094403712143a4c1e1d8e90a1 Mon Sep 17 00:00:00 2001 From: Eduardo Menges Mattje Date: Tue, 10 Sep 2024 15:46:24 -0300 Subject: [PATCH] Added getter for transactions --- src/GeniusSDK.cpp | 38 ++++++++++++++++++++++++++++++++++++-- src/GeniusSDK.h | 19 ++++++++++++++++++- 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/src/GeniusSDK.cpp b/src/GeniusSDK.cpp index c3d038d..bbad50c 100644 --- a/src/GeniusSDK.cpp +++ b/src/GeniusSDK.cpp @@ -34,7 +34,9 @@ class JsonError : public boost::exception std::string message; }; -static outcome::result ReadDevConfigFromJSON( const std::string &base_path ) +namespace +{ + outcome::result ReadDevConfigFromJSON( const std::string &base_path ) { std::ifstream file( base_path + "dev_config.json" ); if ( !file.is_open() ) @@ -48,7 +50,7 @@ static outcome::result ReadDevConfigFromJSON( const std rapidjson::Document document; rapidjson::ParseResult parseResult = document.Parse( jsonStr.c_str() ); - if ( !parseResult ) + if ( parseResult == nullptr ) { return outcome::failure( JsonError( "Parse error " ) ); } @@ -79,7 +81,24 @@ static outcome::result ReadDevConfigFromJSON( const std return outcome::success( config_from_file ); } + GeniusMatrix matrix_from_vector_of_vector( const std::vector> &vec ) + { + uint64_t size = vec.size(); + + GeniusMatrix matrix = { size, reinterpret_cast( malloc( size * sizeof( GeniusArray ) ) ) }; + + for ( uint64_t i = 0; i < size; i++ ) + { + matrix.ptr[i] = GeniusArray{ vec[i].size(), + reinterpret_cast( malloc( vec[i].size() * sizeof( uint8_t ) ) ) }; + memcpy( matrix.ptr[i].ptr, vec[i].data(), vec[i].size() * sizeof( uint8_t ) ); + } + + return matrix; + } + std::shared_ptr GeniusNodeInstance; +} const char *GeniusSDKInit( const char *base_path ) { @@ -113,3 +132,18 @@ uint64_t GeniusSDKGetBalance() { return GeniusNodeInstance->GetBalance(); } + +GeniusMatrix GeniusSDKGetTransactions() +{ + return matrix_from_vector_of_vector( GeniusNodeInstance->GetTransactions() ); +} + +void GeniusSDKFreeTransactions( GeniusMatrix matrix ) +{ + for ( uint64_t i = 0; i < matrix.size; ++i ) + { + free( matrix.ptr[i].ptr ); + } + free( matrix.ptr ); +} + diff --git a/src/GeniusSDK.h b/src/GeniusSDK.h index a6bbbab..ec7c681 100644 --- a/src/GeniusSDK.h +++ b/src/GeniusSDK.h @@ -15,6 +15,9 @@ extern "C" \ { #define GNUS_EXPORT_END } +#else +#define GNUS_EXPORT_BEGIN +#define GNUS_EXPORT_END #endif #endif @@ -26,13 +29,27 @@ GNUS_EXPORT_BEGIN +typedef struct +{ + uint64_t size; + uint8_t *ptr; +} GeniusArray; ///< Struct to interop C++ vectors with C + +typedef struct +{ + uint64_t size; + GeniusArray *ptr; +} GeniusMatrix; ///< Struct to interop a matrix of C++ vectors in C + typedef char ImagePath_t[1024]; ///< ID/Path of the image to be processed typedef uint64_t PayAmount_t; ///< Amount to be paid for the processing GNUS_VISIBILITY_DEFAULT const char *GeniusSDKInit( const char *base_path ); GNUS_VISIBILITY_DEFAULT void GeniusSDKProcess( const ImagePath_t path, PayAmount_t amount ); GNUS_VISIBILITY_DEFAULT uint64_t GeniusSDKGetBalance(); +GNUS_VISIBILITY_DEFAULT GeniusMatrix GeniusSDKGetTransactions(); +GNUS_VISIBILITY_DEFAULT void GeniusSDKFreeTransactions( GeniusMatrix matrix ); GNUS_EXPORT_END -#endif //GENIUSSDK_H +#endif