diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 93390ab..fe8468c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,8 +28,8 @@ jobs: num-parse-method: FastFloat - os: windows-latest num-parse-method: FromChars - - os: windows-latest - num-parse-method: strtod +# - os: windows-latest +# num-parse-method: strtod steps: - name: Checkout code @@ -43,23 +43,23 @@ jobs: # For linux, we will perform developer checks, so we need boost - name: Set up dependencies if: runner.os == 'Linux' - run: sudo apt-get update && sudo apt-get install -y build-essential libboost-all-dev + run: sudo apt-get update && sudo apt-get install -y build-essential libboost-all-dev gfortran zlib1g-dev - name: Create build directory run: mkdir build - name: Configure CMake on Windows if: runner.os == 'Windows' - run: cmake -S ${{ github.workspace }} -B build -DSpecUtils_BUILD_UNIT_TESTS=ON -DSpecUtils_BUILD_REGRESSION_TEST=ON -DSpecUtils_ENABLE_EQUALITY_CHECKS=ON -DPERFORM_DEVELOPER_CHECKS=OFF -DSpecUtils_ENABLE_D3_CHART=ON -DSpecUtils_D3_SUPPORT_FILE_STATIC=ON -DSpecUtils_ENABLE_URI_SPECTRA=OFF -DCMAKE_BUILD_TYPE=Release -DSpecUtils_FLT_PARSE_METHOD=${{ matrix.num-parse-method }} -DSpecUtils_FETCH_FAST_FLOAT=ON + run: cmake -S ${{ github.workspace }} -B build -DSpecUtils_BUILD_UNIT_TESTS=ON -DSpecUtils_BUILD_REGRESSION_TEST=ON -DSpecUtils_ENABLE_EQUALITY_CHECKS=ON -DPERFORM_DEVELOPER_CHECKS=OFF -DSpecUtils_ENABLE_D3_CHART=ON -DSpecUtils_D3_SUPPORT_FILE_STATIC=ON -DSpecUtils_ENABLE_URI_SPECTRA=OFF -DCMAKE_BUILD_TYPE=Release -DSpecUtils_FLT_PARSE_METHOD=${{ matrix.num-parse-method }} -DSpecUtils_FETCH_FAST_FLOAT=ON -DSpecUtils_C_BINDINGS=OFF -DCMAKE_INSTALL_PREFIX=install_prefix # On linux we will perform developer checks and compile as debug to catch asserts - name: Configure CMake on Linux if: runner.os == 'Linux' - run: cmake -S ${{ github.workspace }} -B build -DSpecUtils_BUILD_UNIT_TESTS=ON -DSpecUtils_BUILD_REGRESSION_TEST=ON -DSpecUtils_ENABLE_EQUALITY_CHECKS=ON -DPERFORM_DEVELOPER_CHECKS=ON -DSpecUtils_ENABLE_D3_CHART=ON -DSpecUtils_D3_SUPPORT_FILE_STATIC=ON -DSpecUtils_ENABLE_URI_SPECTRA=ON -DCMAKE_BUILD_TYPE=Release -DSpecUtils_FLT_PARSE_METHOD=${{ matrix.num-parse-method }} -DSpecUtils_FETCH_FAST_FLOAT=ON + run: cmake -S ${{ github.workspace }} -B build -DSpecUtils_BUILD_UNIT_TESTS=ON -DSpecUtils_BUILD_REGRESSION_TEST=ON -DSpecUtils_ENABLE_EQUALITY_CHECKS=ON -DPERFORM_DEVELOPER_CHECKS=ON -DSpecUtils_ENABLE_D3_CHART=ON -DSpecUtils_D3_SUPPORT_FILE_STATIC=ON -DSpecUtils_ENABLE_URI_SPECTRA=OFF -DCMAKE_BUILD_TYPE=Release -DSpecUtils_FLT_PARSE_METHOD=${{ matrix.num-parse-method }} -DSpecUtils_FETCH_FAST_FLOAT=ON -DSpecUtils_C_BINDINGS=ON -DSpecUtils_FORTRAN_SWIG=ON -DCMAKE_INSTALL_PREFIX=install_prefix - name: Configure CMake on macOS if: runner.os == 'macOS' - run: cmake -S ${{ github.workspace }} -B build -DSpecUtils_BUILD_UNIT_TESTS=ON -DSpecUtils_BUILD_REGRESSION_TEST=ON -DSpecUtils_ENABLE_EQUALITY_CHECKS=ON -DPERFORM_DEVELOPER_CHECKS=OFF -DSpecUtils_ENABLE_D3_CHART=ON -DSpecUtils_D3_SUPPORT_FILE_STATIC=ON -DSpecUtils_ENABLE_URI_SPECTRA=ON -DCMAKE_BUILD_TYPE=Release -DSpecUtils_FLT_PARSE_METHOD=${{ matrix.num-parse-method }} -DSpecUtils_FETCH_FAST_FLOAT=ON + run: cmake -S ${{ github.workspace }} -B build -DSpecUtils_BUILD_UNIT_TESTS=ON -DSpecUtils_BUILD_REGRESSION_TEST=ON -DSpecUtils_ENABLE_EQUALITY_CHECKS=ON -DPERFORM_DEVELOPER_CHECKS=OFF -DSpecUtils_ENABLE_D3_CHART=ON -DSpecUtils_D3_SUPPORT_FILE_STATIC=ON -DSpecUtils_ENABLE_URI_SPECTRA=ON -DCMAKE_BUILD_TYPE=Release -DSpecUtils_FLT_PARSE_METHOD=${{ matrix.num-parse-method }} -DSpecUtils_FETCH_FAST_FLOAT=ON -DSpecUtils_C_BINDINGS=ON -DCMAKE_INSTALL_PREFIX=install_prefix - name: Build macOS and Windows if: runner.os != 'Linux' @@ -67,7 +67,81 @@ jobs: - name: Build Linux if: runner.os == 'Linux' - run: cmake --build build --config Debug + run: cmake --build build --config Release -j $(nproc) - name: Run tests - run: ctest --test-dir build -C Release + run: ctest --rerun-failed --output-on-failure --test-dir build -C Release + + - name: Package Lib + if: runner.os == 'Windows' + run: | + cmake -S ${{ github.workspace }} -B build_static_lib_shared_runtime -DSpecUtils_BUILD_UNIT_TESTS=OFF -DSpecUtils_BUILD_REGRESSION_TEST=OFF -DSpecUtils_ENABLE_EQUALITY_CHECKS=OFF -DPERFORM_DEVELOPER_CHECKS=OFF -DSpecUtils_ENABLE_D3_CHART=ON -DSpecUtils_D3_SUPPORT_FILE_STATIC=ON -DSpecUtils_ENABLE_URI_SPECTRA=OFF -DCMAKE_BUILD_TYPE=Release -DSpecUtils_FLT_PARSE_METHOD=${{ matrix.num-parse-method }} -DSpecUtils_FETCH_FAST_FLOAT=ON -DCMAKE_INSTALL_PREFIX=install_prefix_static_lib_shared_runtime -DSpecUtils_USE_MSVC_MultiThreadDLL=ON -DSpecUtils_SHARED_LIB=OFF + cmake --build build_static_lib_shared_runtime --config Release --target package + echo "Files present after package build_static_lib_shared_runtime" + ls + ls build_static_lib_shared_runtime + ls build_static_lib_shared_runtime/Release + ls build_static_lib_shared_runtime/x64/Release + # + cmake -S ${{ github.workspace }} -B build_shared_lib_shared_runtime -DSpecUtils_BUILD_UNIT_TESTS=OFF -DSpecUtils_BUILD_REGRESSION_TEST=OFF -DSpecUtils_ENABLE_EQUALITY_CHECKS=OFF -DPERFORM_DEVELOPER_CHECKS=OFF -DSpecUtils_ENABLE_D3_CHART=ON -DSpecUtils_D3_SUPPORT_FILE_STATIC=ON -DSpecUtils_ENABLE_URI_SPECTRA=OFF -DCMAKE_BUILD_TYPE=Release -DSpecUtils_FLT_PARSE_METHOD=${{ matrix.num-parse-method }} -DSpecUtils_FETCH_FAST_FLOAT=ON -DCMAKE_INSTALL_PREFIX=install_prefix_build_shared_lib_shared_runtime -DSpecUtils_USE_MSVC_MultiThreadDLL=ON -DSpecUtils_SHARED_LIB=ON + cmake --build build_shared_lib_shared_runtime --config Release --target package + echo "Files present after package build_shared_lib_shared_runtime" + ls + ls build_shared_lib_shared_runtime + ls build_shared_lib_shared_runtime/Release + ls build_shared_lib_shared_runtime/x64/Release + # + cmake -S ${{ github.workspace }} -B build_shared_lib_static_runtime -DSpecUtils_BUILD_UNIT_TESTS=OFF -DSpecUtils_BUILD_REGRESSION_TEST=OFF -DSpecUtils_ENABLE_EQUALITY_CHECKS=OFF -DPERFORM_DEVELOPER_CHECKS=OFF -DSpecUtils_ENABLE_D3_CHART=ON -DSpecUtils_D3_SUPPORT_FILE_STATIC=ON -DSpecUtils_ENABLE_URI_SPECTRA=OFF -DCMAKE_BUILD_TYPE=Release -DSpecUtils_FLT_PARSE_METHOD=${{ matrix.num-parse-method }} -DSpecUtils_FETCH_FAST_FLOAT=ON -DCMAKE_INSTALL_PREFIX=install_prefix_build_shared_lib_static_runtime -DSpecUtils_USE_MSVC_MultiThreadDLL=OFF -DSpecUtils_SHARED_LIB=ON + cmake --build build_shared_lib_static_runtime --config Release --target package + echo "Files present after package build_shared_lib_static_runtime" + ls + ls build_shared_lib_static_runtime + ls build_shared_lib_static_runtime/Release + ls build_shared_lib_static_runtime/x64/Release + # + cmake -S ${{ github.workspace }} -B build_static_lib_static_runtime -DSpecUtils_BUILD_UNIT_TESTS=OFF -DSpecUtils_BUILD_REGRESSION_TEST=OFF -DSpecUtils_ENABLE_EQUALITY_CHECKS=OFF -DPERFORM_DEVELOPER_CHECKS=OFF -DSpecUtils_ENABLE_D3_CHART=ON -DSpecUtils_D3_SUPPORT_FILE_STATIC=ON -DSpecUtils_ENABLE_URI_SPECTRA=OFF -DCMAKE_BUILD_TYPE=Release -DSpecUtils_FLT_PARSE_METHOD=${{ matrix.num-parse-method }} -DSpecUtils_FETCH_FAST_FLOAT=ON -DCMAKE_INSTALL_PREFIX=install_prefix_build_static_lib_static_runtime -DSpecUtils_USE_MSVC_MultiThreadDLL=OFF -DSpecUtils_SHARED_LIB=OFF + cmake --build build_static_lib_static_runtime --config Release --target package + echo "Files present after package build_static_lib_static_runtime" + ls + ls build_static_lib_static_runtime + ls build_static_lib_static_runtime/Release + ls build_static_lib_static_runtime/x64/Release + + +# Update the bleeding-edge tag to be current commit + - name: Run latest-tag + uses: EndBug/latest-tag@v1.6.1 + if: matrix.os == 'Windows' + with: + ref: bleeding-edge + description: Latest successful automated build + + - name: Upload windows build to GitHub Artifact + uses: actions/upload-artifact@v4 + if: runner.os == 'Windows' + with: + name: SpecUtils_${{ runner.os }}_latest + path: '.\build_*\*.zip' + + - name: Create Release + uses: ncipollo/release-action@v1.13.0 + if: runner.os == 'Windows' + with: + artifacts: '.\build_*\*.zip' + draft: false + prerelease: true + body: "An automated, and untested build of the latest code pushed to the repository." + allowUpdates: true + generateReleaseNotes: false + name: "Bleeding Edge Build" + removeArtifacts: true + replacesArtifacts: true + tag: 'bleeding-edge' + commit: ${{ github.sha }} + makeLatest: true +# Delete all the zip files we created + - name: "Cleanup and finish" + if: runner.os == 'Windows' + run: | + Get-ChildItem '.\build_*\*.zip' | foreach { Remove-Item -Path $_.FullName } + echo "Job status is ${{ job.status }}." diff --git a/CMakeLists.txt b/CMakeLists.txt index 349f3cd..d916bc8 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,11 @@ if(${CMAKE_VERSION} VERSION_LESS 3.12) cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) endif() -project( SpecUtils VERSION 1.0.0 ) +project( SpecUtils VERSION 2025.1.0 ) +enable_testing() # Enable here to allow running `ctest` from top-most build dir + +# Add this line to specify the architectures for MacOS +set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "Build architectures for MacOS" FORCE) option( SpecUtils_ENABLE_D3_CHART "Enables exporting of the D3 chart format" ON ) option( SpecUtils_D3_SUPPORT_FILE_STATIC "Compiles the JS and CSS files into memory, rather than reading files on disk; disable to allow changing JS/CSS without having to recompile" ON ) @@ -20,6 +24,9 @@ option( SpecUtils_BUILD_FUZZING_TESTS "Builds fuzzing tests, requires clang" OFF option( SpecUtils_BUILD_REGRESSION_TEST "Creates executable to perform interactive regression test" OFF ) option( SpecUtils_BUILD_EXAMPLE "Builds example SpecUtil applications" OFF ) option( SpecUtils_JAVA_SWIG "Creates swig/java bindings to the c++ code" OFF ) +option( SpecUtils_FORTRAN_SWIG "Enables build/test of swig/FORTRAN bindings" OFF ) +option( SpecUtils_FORTRAN_SWIG_GEN "When this is on, cmake will attemp to generate swig fortran bindings. + Requires swig-fortran: https://github.com/swig-fortran/swig" OFF ) option( SpecUtils_C_BINDINGS "Creates C bindings to the c++ code" OFF ) option( SpecUtils_INJA_TEMPLATES "Creates inja template interface" OFF ) option( SpecUtils_USE_SIMD "Use SIMD operations; i386/x64 only right now, and very alpha, and extremely minimally used" OFF ) @@ -256,6 +263,19 @@ endif( SpecUtils_SHARED_LIB ) add_library( SpecUtils ${SpecUtils_LIB_TYPE} ${sources} ${headers} ${OTHER_SUPPORT_FILES} ) set_target_properties( SpecUtils PROPERTIES PREFIX "lib" OUTPUT_NAME "SpecUtils" ) + +# Include the GenerateExportHeader module +include(GenerateExportHeader) +generate_export_header(SpecUtils + BASE_NAME SpecUtils + EXPORT_FILE_NAME ${CMAKE_BINARY_DIR}/SpecUtilsExport.h +) + +if( NOT SpecUtils_SHARED_LIB ) + target_compile_definitions( SpecUtils PRIVATE SPECUTILS_STATIC_DEFINE ) +endif() + + set( SpecUtils_USE_FAST_FLOAT OFF ) # Uses https://github.com/fastfloat/fast_float . If fast_float.h isnt found, will be fetched set( SpecUtils_USE_FROM_CHARS OFF ) # Supported by MSVC >= 2019, and gcc >= 12. Not supported by Apple clang. In MSVC, about 50% slower than boost::spirit set( SpecUtils_USE_BOOST_SPIRIT OFF ) # Uses boost::spirit, and fasted method (maybe a hair faster than fastfloat) @@ -308,7 +328,7 @@ if( SpecUtils_USE_FAST_FLOAT ) FetchContent_GetProperties( fast_float ) FetchContent_MakeAvailable( fast_float ) - target_include_directories( SpecUtils PUBLIC ${fast_float_SOURCE_DIR} ) + target_include_directories( SpecUtils PRIVATE ${fast_float_SOURCE_DIR} ) endif( SpecUtils_FETCH_FAST_FLOAT ) endif( NOT FAST_FLOAT_FILE_PATH ) endif( SpecUtils_USE_FAST_FLOAT ) @@ -383,6 +403,9 @@ if( SpecUtils_JAVA_SWIG ) target_link_libraries( SpecUtils PUBLIC ${JAVA_LIBRARIES} ) endif( SpecUtils_JAVA_SWIG ) +if( SpecUtils_FORTRAN_SWIG ) + add_subdirectory(bindings/swig/fortran) +endif( SpecUtils_FORTRAN_SWIG ) if( MINGW ) target_link_libraries( SpecUtils PUBLIC -static-libgcc -static libshlwapi.a libpthread.a libstdc++.a libwinpthread.a libmsvcrt.a ) @@ -393,8 +416,8 @@ elseif( WIN32 ) target_link_libraries( SpecUtils PUBLIC "Shlwapi.lib" ) endif( MINGW ) -target_include_directories( SpecUtils PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} - PRIVATE ${THIRD_PARTY_DIR} ) +target_include_directories( SpecUtils PUBLIC $ $ + PRIVATE ${THIRD_PARTY_DIR} ${PYTHON_INCLUDE_DIRS} ) if( SpecUtils_BUILD_REGRESSION_TEST ) if( NOT SpecUtils_ENABLE_EQUALITY_CHECKS ) @@ -406,8 +429,7 @@ endif( SpecUtils_BUILD_REGRESSION_TEST ) if( SpecUtils_BUILD_UNIT_TESTS ) - enable_testing() # Enable here to allow running `ctest` from top-most build dir - + include (CTest) add_subdirectory( unit_tests ) endif( SpecUtils_BUILD_UNIT_TESTS ) @@ -416,9 +438,81 @@ if( SpecUtils_BUILD_FUZZING_TESTS ) add_subdirectory( fuzz_test ) endif( SpecUtils_BUILD_FUZZING_TESTS ) +set_property( TARGET SpecUtils PROPERTY POSITION_INDEPENDENT_CODE ON ) + +set( SpecUtils_config_OUT ${CMAKE_CURRENT_BINARY_DIR}/SpecUtils_config.h ) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/SpecUtils/SpecUtils_config.h.in - ${CMAKE_CURRENT_BINARY_DIR}/SpecUtils_config.h + ${SpecUtils_config_OUT} ) +LIST(APPEND headers ${SpecUtils_config_OUT}) + +get_directory_property(hasParent PARENT_DIRECTORY) +if( NOT hasParent ) + # Specify installation rules + include(GNUInstallDirs) + + + # Install the library + install(TARGETS SpecUtils + EXPORT SpecUtilsTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # For shared libraries on UNIX-like systems + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # For static libraries and import libraries on Windows + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # For DLLs + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + ) + + # Install the headers + install(FILES ${headers} ${CMAKE_BINARY_DIR}/SpecUtilsExport.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/SpecUtils) + + # Create and install the CMake package configuration files + include(CMakePackageConfigHelpers) + + write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/SpecUtilsConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion + ) + + configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/SpecUtilsConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/SpecUtilsConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/SpecUtils + ) + + install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/SpecUtilsConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/SpecUtilsConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/SpecUtils + ) + + install(EXPORT SpecUtilsTargets + FILE SpecUtilsTargets.cmake + NAMESPACE SpecUtils:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/SpecUtils + ) + + set(CPACK_PACKAGE_NAME "SpecUtils") + + + if( SpecUtils_SHARED_LIB ) + set( SpecUtils_PACKAGE_POSTFIX "SharedLib" ) + else( SpecUtils_SHARED_LIB ) + set( SpecUtils_PACKAGE_POSTFIX "StaticLib" ) + endif( SpecUtils_SHARED_LIB ) + + if( DEFINED ${PROJECT_NAME}_USE_MSVC_MultiThreadDLL ) + if( ${PROJECT_NAME}_USE_MSVC_MultiThreadDLL ) + set( SpecUtils_PACKAGE_POSTFIX "${SpecUtils_PACKAGE_POSTFIX}-SharedRuntime" ) + else() + set( SpecUtils_PACKAGE_POSTFIX "${SpecUtils_PACKAGE_POSTFIX}-StaticRuntime" ) + endif() + endif() + # Lets just use the MAJOR.MINOR version of the compiler in the name. + string(REGEX MATCH "^[0-9]+\\.[0-9]+" COMPILER_VERSION_SHORT "${CMAKE_CXX_COMPILER_VERSION}") + set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${PROJECT_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}-${COMPILER_VERSION_SHORT}-${SpecUtils_PACKAGE_POSTFIX}") + set(CPACK_GENERATOR "ZIP") + include(CPack) +endif( NOT hasParent ) \ No newline at end of file diff --git a/SpecUtils/DateTime.h b/SpecUtils/DateTime.h index 4511a22..ea13c21 100644 --- a/SpecUtils/DateTime.h +++ b/SpecUtils/DateTime.h @@ -64,7 +64,7 @@ namespace SpecUtils Returns empty string if input is not valid. Ex. "19-Sep-2014 14:12:01.62" */ - std::string to_vax_string( const time_point_t &t ); + std::string to_vax_string( time_point_t t ); /** \brief Describes how to attempt to parse date/times when it is ambigous, and you might have some prior information based on the source. diff --git a/SpecUtils/EnergyCalibration.h b/SpecUtils/EnergyCalibration.h index 87e0fbd..0957533 100644 --- a/SpecUtils/EnergyCalibration.h +++ b/SpecUtils/EnergyCalibration.h @@ -41,6 +41,9 @@ */ namespace SpecUtils { + + using DevPair = std::pair; + using DeviationPairs = std::vector; /** The energy (or FWHM) calibration type that the calibration coefficients should be interpreted as. @@ -288,8 +291,7 @@ namespace SpecUtils \sa set_polynomial, EnergyCalCheckType::Normal */ static const float sm_polynomial_offset_limit; - - protected: + /** Checks the channel energies is acceptable (e.g., enough channels, and monotonically increasing values). @@ -297,6 +299,10 @@ namespace SpecUtils */ void check_lower_energies( const size_t nchannels, const std::vector &energies ); + DeviationPairs & mutable_deviation_pairs() + { + return m_deviation_pairs; + } EnergyCalType m_type; std::vector m_coefficients; std::vector> m_deviation_pairs; diff --git a/SpecUtils/ParseUtils.h b/SpecUtils/ParseUtils.h index e10af40..1dfaef8 100644 --- a/SpecUtils/ParseUtils.h +++ b/SpecUtils/ParseUtils.h @@ -31,6 +31,8 @@ #include #include +#include "SpecUtils/StringAlgo.h" + /** Some functions and definitions that help to parse and write spectrum files, but maybe dont fit in other sections of code. */ @@ -290,6 +292,7 @@ Integral float_to_integral( float d ) static constexpr Integral max_int_val = std::numeric_limits::max(); return std::signbit(d) ? min_int_val : max_int_val; }//float_to_integral + }//namespace SpecUtils #endif //SpecUtils_ParseUtils_h diff --git a/SpecUtils/PcfExtensions.h b/SpecUtils/PcfExtensions.h new file mode 100644 index 0000000..4219e9c --- /dev/null +++ b/SpecUtils/PcfExtensions.h @@ -0,0 +1,232 @@ +#pragma once +#include +#include +#include +#include + +#include +#include +#include + +namespace SpecUtils +{ + + class MeasurementExt : public SpecUtils::Measurement + { + public: + MeasurementExt() : Measurement() + { + + } + + void set_description(const std::string &description) + { + auto &remarks = remarks_; + + // If there is already a description, remove it first. + auto it = remarks.begin(); + for (; it != remarks.end();) + { + if (SpecUtils::istarts_with(*it, "Description:")) + it = remarks.erase(it); + it++; + } + remarks.push_back("Description: " + description); + } + + void set_source(const std::string &source) + { + auto &remarks = remarks_; + + // If there is already a source, remove it first. + auto it = remarks.begin(); + for (; it != remarks.end();) + { + if (SpecUtils::istarts_with(*it, "source:")) + it = remarks.erase(it); + it++; + } + remarks.push_back("Source: " + source); + } + + std::string get_description() const + { + auto retVal = std::string(); + auto descrOffset = 12U; + for (auto str : remarks_) + { + if (SpecUtils::istarts_with(str, "Description:")) + { + retVal = str.substr(descrOffset); + trim(retVal); + break; + } + } + return retVal; + } + + std::string get_source() const + { + auto retVal = std::string(); + auto sourceStringOffset = 8U; + for (auto str : remarks_) + { + if (SpecUtils::istarts_with(str, "Source:")) + { + retVal = str.substr(sourceStringOffset); + trim(retVal); + break; + } + } + return retVal; + } + + /// @brief return zero-based panel number based on detector name + int panel() + { + if (panel_ < 0) + update_detector_name_params(); + return panel_; + } + + /// @brief return zero-based column number based on detector name + int column() + { + if (column_ < 0) + update_detector_name_params(); + return column_; + } + + /// @brief return zero-based mca number based on detector name + int mca() + { + if (mca_ < 1) + update_detector_name_params(); + return mca_; + } + + /// @brief Overload for testing + void set_ecal( const std::shared_ptr &cal ) + { + energy_calibration_ = cal; + } + + protected: + int panel_ = -1; + int column_ = -1; + int mca_ = -1; + + void update_detector_name_params() + { + auto detName = detector_name(); + SpecUtils::pcf_det_name_to_dev_pair_index(detName, column_, panel_, mca_); + } + }; + + class EnergyCalibrationExt : public SpecUtils::EnergyCalibration + { + public: + EnergyCalibrationExt() : SpecUtils::EnergyCalibration() + { + m_type = EnergyCalType::FullRangeFraction; + } + + SpecUtils::DeviationPairs &get_dev_pairs() + { + return m_deviation_pairs; + } + + void set_dev_pairs(SpecUtils::DeviationPairs & devPairs) + { + m_deviation_pairs = devPairs; + } + + FloatVec & get_coeffs() + { + return m_coefficients; + } + + }; + + class PcfFile : public SpecUtils::SpecFile + { + public: + PcfFile() : SpecFile() + { + + } + void read(const std::string &fname) + { + auto success = load_pcf_file(fname); + if (!success) + { + throw std::runtime_error("I couldn't open \"" + fname + "\""); + } + } + void add_measurement_ext(std::shared_ptr m) + { + this->add_measurement(m); + } + + std::shared_ptr get_measurement_at(int index) + { + auto m = measurements_.at(index); + return std::dynamic_pointer_cast(m); + } + + virtual std::shared_ptr make_measurement() + { + return std::make_shared(); + } + }; + + template + inline void set_panel(int panel, StringVec &remarks) + { + // If there is already a description, remove it first. + auto it = remarks.begin(); + for (; it != remarks.end();) + { + if (SpecUtils::istarts_with(*it, "panel:")) + it = remarks.erase(it); + it++; + } + std::ostringstream sstrm; + sstrm << "panel: " << panel; + remarks.push_back(sstrm.str()); + } + + template + inline void set_column(int column, StringVec &remarks) + { + // If there is already a description, remove it first. + auto it = remarks.begin(); + for (; it != remarks.end();) + { + if (SpecUtils::istarts_with(*it, "column:")) + it = remarks.erase(it); + it++; + } + std::ostringstream sstrm; + sstrm << "column: " << column; + remarks.push_back(sstrm.str()); + } + + template + inline int get_panel(const StringVec &vec) + { + auto retVal = std::string(); + auto offset = 6U; + for (auto str : vec) + { + if (SpecUtils::istarts_with(str, "panel:")) + { + retVal = str.substr(offset); + trim(retVal); + break; + } + } + return std::stoi(retVal); + } + +} // namespace SpecUtils diff --git a/SpecUtils/SpecFile.h b/SpecUtils/SpecFile.h index a72996e..1e0c470 100644 --- a/SpecUtils/SpecFile.h +++ b/SpecUtils/SpecFile.h @@ -512,17 +512,14 @@ double gamma_integral( const std::shared_ptr &hist, // InterSpec is using to represent detector response functions on disk. const std::string &detectorTypeToString( const DetectorType type ); - - - - - - +using FloatVec = std::vector; +using FloatVecPtr = std::shared_ptr; class Measurement { public: Measurement(); + virtual ~Measurement() {} // Virtual destructor to enable RTTI //operator=: operates as expected for most member variables. Smart pointer // to const objects (channel data and channel energies) are shallow copied. @@ -537,9 +534,19 @@ class Measurement //live_time(): returned in units of seconds. Will be 0 if not known. float live_time() const; + + void set_live_time(float time) + { + live_time_ = time; + } //real_time(): returned in units of seconds. Will be 0 if not known. float real_time() const; + + void set_real_time(float time) + { + real_time_ = time; + } //contained_neutron(): returns whether or not the measurement is thought to // contain the possibility to detect neutrons (e.g. if a neutron detector was @@ -619,6 +626,25 @@ class Measurement */ char pcf_tag() const; + /** Returns the source description. + + This is free-form text to describe the source, and may be used in an application specific manor. + For example, GADRAS-DRF will use strings such as: "Am241,10uC", "Am241,10uC{an=26,ad=10}", + "60CO_123456" (where 123456 is the Co60 source serial number), or + "PotassiumInSoil,1.80 Ci{24.9,2.2}+ThoriumInSoil,7.63 Ci{24.9,2.2}+UraniumInSoil,2.76 Ci{24.9,2.2}" + + This field corresponds roughly to the information that would be put into a N42 RadItemInformation element, or a PCF + spectrum source list. + */ + const std::string &source_description() const; + + /** Returns the measurement description. + + This is a free-form text field, primarily meant to correspond to PCF records spectrum description field. + */ + const std::string &measurement_description() const; + + //position_time(): returns the (local, or detector) time of the GPS fix, if // known. Returns time_point_t{} otherwise. const time_point_t position_time() const; @@ -627,6 +653,9 @@ class Measurement // May be empty string for single detector systems, or otherwise. // ex: Aa1, Ba1, etc. const std::string &detector_name() const; + + /// @brief PCFs store the detector name in the title so add the abiltity set update the detector name + void update_detector_name_from_title(); //detector_number(): returns the detector number of the detector within the // detection system. Will have a 1 to 1 coorespondence with detector_name(). @@ -651,6 +680,11 @@ class Measurement // that pertain to this record specifically. See also // SpecFile::remarks(). const std::vector &remarks() const; + + std::vector &mutable_remarks() + { + return remarks_; + } /** Warnings from parsing that apply to this measurement. */ @@ -693,6 +727,11 @@ class Measurement /** Returns the energy calibration. Will not be null. */ std::shared_ptr energy_calibration() const; + + std::shared_ptr mutable_energy_calibration() + { + return energy_calibration_; + } //channel_energies(): returns a vector containing the starting (lower) energy // of the gamma channels, calculated using the energy calibration @@ -797,7 +836,17 @@ class Measurement */ void set_gamma_counts( std::shared_ptr> counts, const float livetime, const float realtime ); - + + void set_gamma_counts( std::shared_ptr> counts ); + + /// @brief Make a copy of a spectrum + /// @param spectrum 'naked' vector of counts + void set_gamma_counts(const FloatVec& spectrum) + { + auto counts = std::make_shared(spectrum); + + set_gamma_counts(counts); + } /** Sets the neutron counts, and also updates #Measurement::neutron_counts_sum_ and #Measurement::contained_neutron_ . @@ -813,13 +862,29 @@ class Measurement If `neutron_live_time` is less than or equal to zero, the gamma real time will be used. */ - void set_neutron_counts( const std::vector &counts, const float neutron_live_time ); + void set_neutron_counts( const std::vector &counts, const float neutron_live_time=-1.0F ); //To set real and live times, see SpecFile::set_live_time(...) /** Sets the application specific "tag" character, used by the PCF file format. */ void set_pcf_tag( const char tag_char ); + /** Sets the source description for this measurement. + + This is a free-form text field, but a convention that may be used is that of GADRAS-DRF, such as + "Am241,10uC", "Am241,10uC{an=26,ad=10}", "60CO_123456" (where 123456 is the Co60 source serial number), etc + + This field corresponds roughly to the information that would be put into a N42 RadItemInformation element, or a PCF + spectrum source list. + */ + void set_source_description( const std::string &description ); + + /** Set the measurements description. + + This is a free-form text field, primarily meant to correspond to PCF records spectrum description field. + */ + void set_measurement_description( const std::string &description ); + /** returns the number of channels in #gamma_counts_. Note: energy calibration could still be invalid and not have channel energies defined, even when this returns a non-zero value. @@ -941,6 +1006,21 @@ class Measurement uint32_t derived_data_properties() const; + /** For data from a RPM the detector name provides the location of this detector within the portal; the function returns + the panel number. + + @returns The panel number, as interpreted from the detector name. Will return -1 if the name does not conform to + the N42-2006 convention of e.g., "Aa1", "Bc4", etc. If a valid name, will return a value of 0, 1, 2, or 3. + + This is a convenience function for calling `pcf_det_name_to_dev_pair_index(...)` + */ + int rpm_panel_number() const; + + /** Similar to `rpm_panel_number()`, but returns panel number (-1 on invalid detector name, or otherwise values [0,7]. */ + int rpm_column_number() const; + + /** Similar to `rpm_panel_number()`, but returns mca number (-1 on invalid detector name, or otherwise values [0,7]. */ + int rpm_mca_number() const; //Functions to write this Measurement object out to external formats @@ -1013,6 +1093,12 @@ class Measurement from a file. */ void set_energy_calibration( const std::shared_ptr &cal ); + + /// @brief Used for testing + void set_ecal( const std::shared_ptr &cal ) + { + energy_calibration_ = cal; + } @@ -1153,6 +1239,23 @@ class Measurement */ char pcf_tag_; + /** Free-form text description of the source, for example "Am241,10uC", "Am241,10uC{an=26,ad=10}", + "60CO_123456" (where 123456 is the Co60 source serial number), etc. + + This field corresponds roughly to the information that would be put into a N42 RadItemInformation element, or a PCF + spectrum source list. + + TODO: Update to use a structure similar to RadItemInformation + */ + std::string source_description_; + + /** Corresponds to a PCF records spectrum description field. + */ + std::string measurement_description_; + + //void set_description(const std::string &description) + // void set_source(const std::string &source) + /** The #LocationState indicates the position, speed, and/or orientation of the instrument, detector, or item being measured. At the moment, only one of these quantities are recorded, primarily to reduce complexity since the author hasnt encountered any files that actually @@ -1176,7 +1279,7 @@ class Measurement std::shared_ptr location_; friend class ::SpecMeas; - friend class SpecFile; + friend class SpecFile; // bruh... friend struct N42DecodeHelper2006; friend struct N42DecodeHelper2012; friend struct GrossCountNodeDecodeWorker; @@ -1489,7 +1592,7 @@ class SpecFile // number available if that detector does not already have that one or else // its assigned to be one larger sample number - this by no means captures // all use cases, but good enough for now. - void add_measurement( std::shared_ptr meas, const bool doCleanup ); + void add_measurement( std::shared_ptr meas, const bool doCleanup=true ); //remove_measurement(...): removes the measurement from this SpecFile // object and if 'doCleanup' is specified, then all sums will be @@ -2355,7 +2458,7 @@ class SpecFile //measurement(...): converts a const Measurement ptr to a non-const Measurement // ptr, as well as checking that the Measurement actually belong to this // SpecFile object. Returns empty pointer on error. - std::shared_ptr measurement( std::shared_ptr meas ); + std::shared_ptr unconstify_measurement( std::shared_ptr meas ); //find_detector_names(): looks through measurements_ to find all detector // names. @@ -2439,7 +2542,7 @@ class SpecFile void set_n42_2006_measurement_location_information( const rapidxml::xml_node *measured_item_info_node, std::vector> measurements_applicable ); - + /** If this SpecFile is calibrated by lower channel energy, then this function will write a record (and it should be the first record) to the output with title "Energy" and channel counts equal to the energies of the @@ -2673,6 +2776,12 @@ class SpecFile protected: /** This mutex protects all member variables. ... keep documenting locking model the retest with fb infer add mutext to Measurement, and a CMake option to turn-off thread safety (and also defaults to off) ... will need to convert return by refernces to return by value for thread safe functions. */ mutable std::recursive_mutex mutex_; + + /// @brief Allow subclasses to customize measurement class + virtual std::shared_ptr make_measurement() + { + return std::make_shared(); + } public: @@ -2894,5 +3003,7 @@ struct MultimediaData #endif };//struct MultimediaData + /** Temporary include function for fortran tests to pass. */ + int pcf_det_name_to_dev_pair_index(std::string name, int &col, int &panel, int &mca); }//namespace SpecUtils #endif //SpecUtils_SpecFile_h diff --git a/SpecUtils/SpecUtils_config.h.in b/SpecUtils/SpecUtils_config.h.in index 53322dd..aa040b8 100644 --- a/SpecUtils/SpecUtils_config.h.in +++ b/SpecUtils/SpecUtils_config.h.in @@ -73,4 +73,6 @@ void log_developer_error( const char *location, const char *error ); #endif +//#include "SpecUtilsExport.h" + #endif // InterSpec_config_h diff --git a/SpecUtils/StringAlgo.h b/SpecUtils/StringAlgo.h index 1beb4d6..5bd3bc8 100644 --- a/SpecUtils/StringAlgo.h +++ b/SpecUtils/StringAlgo.h @@ -431,6 +431,8 @@ namespace SpecUtils unsigned int levenshtein_distance( const std::string &source, const std::string &target, const size_t max_str_len = 128 ); + + }//namespace SpecUtils diff --git a/SpecUtilsConfig.cmake.in b/SpecUtilsConfig.cmake.in new file mode 100644 index 0000000..6e6cf2e --- /dev/null +++ b/SpecUtilsConfig.cmake.in @@ -0,0 +1,11 @@ +@PACKAGE_INIT@ + +include(CMakeFindDependencyMacro) + +# Add any dependencies here, e.g., +# find_dependency(SomeOtherLibrary) + +include("${CMAKE_CURRENT_LIST_DIR}/SpecUtilsTargets.cmake") + +set(SpecUtils_INCLUDE_DIRS "@PACKAGE_INCLUDE_INSTALL_DIR@") +set(SpecUtils_LIBRARIES SpecUtils) \ No newline at end of file diff --git a/bindings/c/SpecUtils_c.cpp b/bindings/c/SpecUtils_c.cpp index 5fc809c..854a901 100644 --- a/bindings/c/SpecUtils_c.cpp +++ b/bindings/c/SpecUtils_c.cpp @@ -1352,7 +1352,24 @@ bool SpecUtils_SpecFile_set_measurement_source_type( SpecUtils_SpecFile *instanc return false; const SpecUtils::SourceType st = SpecUtils::SourceType( static_cast(type) ); + + switch( st ) + { + case SpecUtils::SourceType::IntrinsicActivity: + case SpecUtils::SourceType::Calibration: + case SpecUtils::SourceType::Background: + case SpecUtils::SourceType::Foreground: + case SpecUtils::SourceType::Unknown: + break; + + default: + assert( 0 ); + return false; + }//switch( st ) + specfile->set_source_type( st, m ); + + return true; } @@ -1369,8 +1386,17 @@ bool SpecUtils_SpecFile_set_measurement_position( SpecUtils_SpecFile *instance, SpecUtils::time_point_t tp{}; tp += chrono::microseconds( microseconds_since_unix_epoch ); + + try + { + specfile->set_position( longitude, latitude, tp, m ); + }catch( std::exception & ) + { + assert( 0 ); + return false; + } - specfile->set_position( longitude, latitude, tp, m ); + return m->has_gps_info(); } @@ -1518,20 +1544,8 @@ const char *SpecUtils_Measurement_description( const SpecUtils_Measurement * con if( !m ) return ""; - const vector &remarks = m->remarks(); - - for( size_t i = 0; i < remarks.size(); ++i ) - { - if( SpecUtils::istarts_with(remarks[i], "Description:") ) - { - const char *answer = remarks[i].c_str() + 12; - while( *answer && ((*answer) == ' ') ) - ++answer; - return answer; - } - }// - - return ""; + const std::string &desc = m->measurement_description(); + return desc.c_str(); } @@ -1540,34 +1554,8 @@ void SpecUtils_Measurement_set_description( SpecUtils_Measurement *instance, { auto m = reinterpret_cast( instance ); assert( m ); - if( !m ) - return; - - // We will erase existing description if empty string is passed in. - // Otherwise we will update description. - string description( description_cstr ? description_cstr : "" ); - if( !description.empty() ) - description = "Description: " + description; - - vector remarks = m->remarks(); - - // If there is already a description, over-write it - for( size_t i = 0; i < remarks.size(); ++i ) - { - if( SpecUtils::istarts_with(remarks[i], "Description:") ) - { - if( description.empty() ) - remarks.erase( begin(remarks) + i ); - else - remarks[i] = description; - - m->set_remarks( remarks ); - return; - } - }// - - remarks.push_back( description ); - m->set_remarks( remarks ); + if( m ) + m->set_measurement_description( description_cstr ? description_cstr : "" ); } @@ -1578,20 +1566,8 @@ const char *SpecUtils_Measurement_source_string( const SpecUtils_Measurement * c if( !m ) return ""; - const vector &remarks = m->remarks(); - - for( size_t i = 0; i < remarks.size(); ++i ) - { - if( SpecUtils::istarts_with(remarks[i], "Source:") ) - { - const char *answer = remarks[i].c_str() + 7; - while( *answer && ((*answer) == ' ') ) - ++answer; - return answer; - } - }// - - return ""; + const std::string &src = m->source_description(); + return src.c_str(); } @@ -1600,34 +1576,8 @@ void SpecUtils_Measurement_set_source_string( SpecUtils_Measurement *instance, { auto m = reinterpret_cast( instance ); assert( m ); - if( !m ) - return; - - // We will erase existing description if empty string is passed in. - // Otherwise we will update description. - string src_string( source_string_cstr ? source_string_cstr : "" ); - if( !src_string.empty() ) - src_string = "Source: " + src_string; - - vector remarks = m->remarks(); - - // If there is already a source string, over-write it - for( size_t i = 0; i < remarks.size(); ++i ) - { - if( SpecUtils::istarts_with(remarks[i], "Source:") ) - { - if( src_string.empty() ) - remarks.erase( begin(remarks) + i ); - else - remarks[i] = src_string; - - m->set_remarks( remarks ); - return; - } - }// - - remarks.push_back( src_string ); - m->set_remarks( remarks ); + if( m ) + m->set_source_description( source_string_cstr ? source_string_cstr : "" ); } diff --git a/bindings/c/SpecUtils_c.h b/bindings/c/SpecUtils_c.h index e2805d7..27752b6 100644 --- a/bindings/c/SpecUtils_c.h +++ b/bindings/c/SpecUtils_c.h @@ -660,7 +660,7 @@ SpecUtils_SpecFile_set_measurement_source_type( SpecUtils_SpecFile *instance, @param microseconds_since_unix_epoch The time of the GPS reading. Use a value of 0 to indicate not relevant. - Returns if successful (i.e., if measurement was owned by the `SpecUtils_SpecFile`). + Returns if successful (i.e., if measurement was owned by the `SpecUtils_SpecFile`), and if values are valid lat/long. */ DLLEXPORT bool CALLINGCONVENTION SpecUtils_SpecFile_set_measurement_position( SpecUtils_SpecFile *instance, diff --git a/bindings/swig/CMakeLists.txt b/bindings/swig/CMakeLists.txt new file mode 100644 index 0000000..e8109af --- /dev/null +++ b/bindings/swig/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(fortran) \ No newline at end of file diff --git a/bindings/swig/fortran/CMakeLists.txt b/bindings/swig/fortran/CMakeLists.txt new file mode 100644 index 0000000..995b3fe --- /dev/null +++ b/bindings/swig/fortran/CMakeLists.txt @@ -0,0 +1,42 @@ +cmake_minimum_required (VERSION 3.25) +project (specutils-swig-fortran Fortran CXX C) + +set(SWIG_INTERFACE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/SpecUtilsFortran.i) +set(SWIG_FORTRAN_WRAPPER ${CMAKE_CURRENT_SOURCE_DIR}/SpecUtilsWrap.f90) +set(SWIG_CPP_WRAPPER ${CMAKE_CURRENT_SOURCE_DIR}/SpecUtilsFortran_wrap.cxx) + +if (SpecUtils_FORTRAN_SWIG_GEN) + add_custom_command( + OUTPUT ${SWIG_CPP_WRAPPER} ${SWIG_FORTRAN_WRAPPER} + COMMAND ${CMAKE_COMMAND} -E echo "Generating SWIG wrapper..." + COMMAND swig -I../../../ -fortran -c++ -outdir ${CMAKE_CURRENT_SOURCE_DIR} -o ${SWIG_CPP_WRAPPER} ${SWIG_INTERFACE_FILE} + DEPENDS ${SWIG_INTERFACE_FILE} + ${CMAKE_SOURCE_DIR}/SpecUtils/EnergyCalibration.h + ${CMAKE_SOURCE_DIR}/SpecUtils/SpecFile.h + ${CMAKE_SOURCE_DIR}/SpecUtils/FileSystem.h + COMMENT "Generating SWIG **Fortran** wrapper code" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ) +endif() + +add_library(specutils_fortran_wrap ${SWIG_CPP_WRAPPER} ) +set_property(TARGET specutils_fortran_wrap PROPERTY POSITION_INDEPENDENT_CODE ON ) +add_library(specutils_fortran SHARED ${SWIG_FORTRAN_WRAPPER} ) +target_link_libraries(specutils_fortran_wrap PUBLIC SpecUtils) +target_compile_options(specutils_fortran PUBLIC -ffree-line-length-none -ffixed-line-length-150) +target_link_libraries(specutils_fortran PRIVATE specutils_fortran_wrap) + +if( SpecUtils_BUILD_UNIT_TESTS ) + add_library(test_drive testdrive.F90) + add_executable(test_specutils_fortran test_specutils_fortran.f90 ) + target_link_libraries(test_specutils_fortran test_drive specutils_fortran ) + add_test(NAME test_specutils_fortran COMMAND test_specutils_fortran) +endif() + + + +# Install the library +install(TARGETS specutils_fortran + EXPORT SpecUtilsTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # For shared libraries on UNIX-like systems +) diff --git a/bindings/swig/fortran/SpecUtilsFortran.i b/bindings/swig/fortran/SpecUtilsFortran.i new file mode 100644 index 0000000..c2a5fab --- /dev/null +++ b/bindings/swig/fortran/SpecUtilsFortran.i @@ -0,0 +1,154 @@ +%module SpecUtilsWrap + +%{ +#include +#include +#include +#include +#include +#include +%} + + +%include "stl.i" +//%include "std_vector.i" + +namespace std { + %template(FloatVector) vector; + %template(MeasurementVector) vector; + +} + +%include "std_shared_ptr.i" +%shared_ptr(vector) +%shared_ptr(SpecUtils::Measurement) +%shared_ptr(SpecUtils::MeasurementExt) +%shared_ptr(SpecUtils::EnergyCalibration) +%shared_ptr(SpecUtils::EnergyCalibrationExt) +//%shared_ptr(std::vector) // this caused me problems -hugh + +%include "std_string.i" +%apply std::string { std::string& } +%include "wchar.i" + +%ignore combine_gamma_channels; +%ignore truncate_gamma_channels; +%ignore descriptionText; +%ignore operator=; +%ignore set_gamma_counts; + +%include + +%apply int { size_t } + +%apply SWIGTYPE ARRAY[ANY][ANY][ANY][ANY][ANY] { float[ANY][ANY][ANY][ANY][ANY] }; + +%ignore SpecUtils::SpecFile::set_energy_calibration; + +%include "SpecUtils/SpecFile.h" + +%extend SpecUtils::Measurement +{ + /// Return the count at a given index. + /// @param index is 1-based + float gamma_count_at(int index) + { + return $self->gamma_counts()->at(index-1); + } + + size_t get_num_channels() + { + return $self->gamma_counts()->size(); + } + + std::string get_start_time_string() + { + auto timeStr = SpecUtils::to_vax_string( $self->start_time() ); + return timeStr; + } + + void set_start_time_from_string(std::string time_str) + { + auto tp = SpecUtils::time_from_string(time_str); + $self->set_start_time(tp); + } + + void set_neutron_count(float count) + { + SpecUtils::FloatVec ncounts{count}; + $self->set_neutron_counts(ncounts, 0.0F); + } + + float get_neutron_count() + { + auto count = 0.0F; + if (!$self->neutron_counts().empty()) + count = $self->neutron_counts().front(); + + return count; + } + + %apply (SWIGTYPE *DATA, size_t SIZE) { (const float* spectrum, size_t num_channels) }; + void set_spectrum(const float *spectrum, size_t num_channels) + { + SpecUtils::FloatVec counts; + for (size_t i = 0; i < num_channels; i++) + { + counts.push_back(spectrum[i]); + } + + $self->set_gamma_counts(counts); + } + + %apply (SWIGTYPE *DATA, size_t SIZE) { (float* spectrum, size_t num_channels) }; + void get_spectrum(float *spectrum, size_t num_channels) + { + auto & counts = *$self->gamma_counts(); + for (size_t i = 0 ; i < num_channels ; i++) + { + spectrum[i] = counts.at(i); + } + } + +} + +%extend SpecUtils::SpecFile +{ + /// Return the measurement at a given index. + /// @param index is 1-based + std::shared_ptr measurement_at(int index) + { + auto newIndex = static_cast(index-1); + return $self->measurement(newIndex); + } + + int get_max_channel_count() + { + auto maxCount = 0; + auto numMeasurements = $self->num_measurements(); + + for(int i = 0; i < numMeasurements; i++) + { + auto m = $self->measurement(i); + auto numChannels = static_cast(m->num_gamma_channels()); + maxCount = std::max(maxCount, numChannels); + } + + return maxCount; + } +} + +%include "std_pair.i" + +%template(DevPair) std::pair; +%template(DeviationPairs) std::vector>; + +%ignore set_lower_channel_energy; +%ignore energy_cal_from_CALp_file; + +%include "SpecUtils/EnergyCalibration.h" + +%ignore make_canonical_path; + +%include "SpecUtils/FileSystem.h" + diff --git a/bindings/swig/fortran/SpecUtilsFortran_wrap.cxx b/bindings/swig/fortran/SpecUtilsFortran_wrap.cxx new file mode 100644 index 0000000..da8e005 --- /dev/null +++ b/bindings/swig/fortran/SpecUtilsFortran_wrap.cxx @@ -0,0 +1,8168 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.2.0 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +/* ----------------------------------------------------------------------------- + * This section contains generic SWIG labels for method/variable + * declarations/attributes, and other compiler dependent labels. + * ----------------------------------------------------------------------------- */ + +/* template workaround for compilers that cannot correctly implement the C++ standard */ +#ifndef SWIGTEMPLATEDISAMBIGUATOR +# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) +# define SWIGTEMPLATEDISAMBIGUATOR template +# elif defined(__HP_aCC) +/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ +/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ +# define SWIGTEMPLATEDISAMBIGUATOR template +# else +# define SWIGTEMPLATEDISAMBIGUATOR +# endif +#endif + +/* inline attribute */ +#ifndef SWIGINLINE +# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) +# define SWIGINLINE inline +# else +# define SWIGINLINE +# endif +#endif + +/* attribute recognised by some compilers to avoid 'unused' warnings */ +#ifndef SWIGUNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +# elif defined(__ICC) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +#endif + +#ifndef SWIG_MSC_UNSUPPRESS_4505 +# if defined(_MSC_VER) +# pragma warning(disable : 4505) /* unreferenced local function has been removed */ +# endif +#endif + +#ifndef SWIGUNUSEDPARM +# ifdef __cplusplus +# define SWIGUNUSEDPARM(p) +# else +# define SWIGUNUSEDPARM(p) p SWIGUNUSED +# endif +#endif + +/* internal SWIG method */ +#ifndef SWIGINTERN +# define SWIGINTERN static SWIGUNUSED +#endif + +/* internal inline SWIG method */ +#ifndef SWIGINTERNINLINE +# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE +#endif + +/* exporting methods */ +#if defined(__GNUC__) +# if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +# ifndef GCC_HASCLASSVISIBILITY +# define GCC_HASCLASSVISIBILITY +# endif +# endif +#endif + +#ifndef SWIGEXPORT +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# if defined(STATIC_LINKED) +# define SWIGEXPORT +# else +# define SWIGEXPORT __declspec(dllexport) +# endif +# else +# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) +# define SWIGEXPORT __attribute__ ((visibility("default"))) +# else +# define SWIGEXPORT +# endif +# endif +#endif + +/* calling conventions for Windows */ +#ifndef SWIGSTDCALL +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# define SWIGSTDCALL __stdcall +# else +# define SWIGSTDCALL +# endif +#endif + +/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ +#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) +# define _CRT_SECURE_NO_DEPRECATE +#endif + +/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ +#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) +# define _SCL_SECURE_NO_DEPRECATE +#endif + +/* Deal with Apple's deprecated 'AssertMacros.h' from Carbon-framework */ +#if defined(__APPLE__) && !defined(__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES) +# define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0 +#endif + +/* Intel's compiler complains if a variable which was never initialised is + * cast to void, which is a common idiom which we use to indicate that we + * are aware a variable isn't used. So we just silence that warning. + * See: https://github.com/swig/swig/issues/192 for more discussion. + */ +#ifdef __INTEL_COMPILER +# pragma warning disable 592 +#endif + +#if __cplusplus >=201103L +# define SWIG_NULLPTR nullptr +#else +# define SWIG_NULLPTR NULL +#endif + + +/* C99 and C++11 should provide snprintf, but define SWIG_NO_SNPRINTF + * if you're missing it. + */ +#if ((defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) || \ + (defined __cplusplus && __cplusplus >= 201103L) || \ + defined SWIG_HAVE_SNPRINTF) && \ + !defined SWIG_NO_SNPRINTF +# define SWIG_snprintf(O,S,F,A) snprintf(O,S,F,A) +# define SWIG_snprintf2(O,S,F,A,B) snprintf(O,S,F,A,B) +#else +/* Fallback versions ignore the buffer size, but most of our uses either have a + * fixed maximum possible size or dynamically allocate a buffer that's large + * enough. + */ +# define SWIG_snprintf(O,S,F,A) sprintf(O,F,A) +# define SWIG_snprintf2(O,S,F,A,B) sprintf(O,F,A,B) +#endif + + + +#ifndef SWIGEXTERN +# ifdef __cplusplus +# define SWIGEXTERN extern +# else +# define SWIGEXTERN +# endif +#endif + + +#define SWIG_exception_impl(DECL, CODE, MSG, RETURNNULL) \ + { throw std::logic_error("In " DECL ": " MSG); } + + +enum SwigMemFlags { + SWIG_MEM_OWN = 0x01, + SWIG_MEM_RVALUE = 0x02, +}; + + +#define SWIG_check_nonnull(PTR, TYPENAME, FNAME, FUNCNAME, RETURNNULL) \ + if (!(PTR)) { \ + SWIG_exception_impl(FUNCNAME, SWIG_NullReferenceError, \ + "Cannot pass null " TYPENAME " (class " FNAME ") " \ + "as a reference", RETURNNULL); \ + } + + +#define SWIG_check_range(INDEX, SIZE, FUNCNAME, RETURNNULL) \ + if (!(INDEX < SIZE)) { \ + SWIG_exception_impl(FUNCNAME, SWIG_IndexError, \ + "index out of range", RETURNNULL); \ + } + + +namespace swig { +enum AssignmentType { + ASSIGNMENT_DEFAULT, + ASSIGNMENT_NODESTRUCT, + ASSIGNMENT_SMARTPTR +}; +} + + +#define SWIG_check_sp_nonnull(PTR, TYPENAME, FNAME, FUNCNAME, RETURNNULL) \ + if (!(PTR)) { \ + SWIG_exception_impl(FUNCNAME, SWIG_NullReferenceError, \ + "Cannot pass null " TYPENAME " (class " FNAME ") " \ + "as a reference", RETURNNULL); \ + } + +#define SWIG_sp_mem_flags 0 + + + +#define SWIG_VERSION 0x040200 +#define SWIGFORTRAN +#define SWIGPOLICY_std_vector_Sl__Sp_float_SP__Sg_ swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_std_vector_Sl__Sp_SpecUtils_Measurement_SP__Sg_ swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_std_shared_ptr_Sl__Sp_vector_Sl__Sp_SpecUtils_Measurement_SP__Sg__SP__Sg_ swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_std_shared_ptr_Sl__Sp_q_Sp_const_SP__Sf_vector_Sl__Sp_SpecUtils_Measurement_SP__Sg__SP__Sg_ swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_std_shared_ptr_Sl__Sp_SpecUtils_Measurement_SP__Sg_ swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_std_shared_ptr_Sl__Sp_q_Sp_const_SP__Sf_SpecUtils_Measurement_SP__Sg_ swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_std_shared_ptr_Sl__Sp_SpecUtils_MeasurementExt_SP__Sg_ swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_std_shared_ptr_Sl__Sp_q_Sp_const_SP__Sf_SpecUtils_MeasurementExt_SP__Sg_ swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_std_shared_ptr_Sl__Sp_SpecUtils_EnergyCalibration_SP__Sg_ swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_std_shared_ptr_Sl__Sp_q_Sp_const_SP__Sf_SpecUtils_EnergyCalibration_SP__Sg_ swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_std_shared_ptr_Sl__Sp_SpecUtils_EnergyCalibrationExt_SP__Sg_ swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_std_shared_ptr_Sl__Sp_q_Sp_const_SP__Sf_SpecUtils_EnergyCalibrationExt_SP__Sg_ swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_SpecUtils_Measurement swig::ASSIGNMENT_SMARTPTR +#define SWIGPOLICY_SpecUtils_SpecFile swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_SpecUtils_DetectorAnalysisResult swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_SpecUtils_DetectorAnalysis swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_SpecUtils_MultimediaData swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_std_pair_Sl__Sp_float_Sc_float_SP__Sg_ swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_std_vector_Sl__Sp_std_pair_Sl__Sp_float_Sc_float_SP__Sg__SP__Sg_ swig::ASSIGNMENT_DEFAULT +#define SWIGPOLICY_SpecUtils_EnergyCalibration swig::ASSIGNMENT_SMARTPTR + +#ifdef __cplusplus +#include +/* SwigValueWrapper is described in swig.swg */ +template class SwigValueWrapper { + struct SwigSmartPointer { + T *ptr; + SwigSmartPointer(T *p) : ptr(p) { } + ~SwigSmartPointer() { delete ptr; } + SwigSmartPointer& operator=(SwigSmartPointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; } + void reset(T *p) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = p; } + } pointer; + SwigValueWrapper& operator=(const SwigValueWrapper& rhs); + SwigValueWrapper(const SwigValueWrapper& rhs); +public: + SwigValueWrapper() : pointer(0) { } + SwigValueWrapper& operator=(const T& t) { SwigSmartPointer tmp(new T(t)); pointer = tmp; return *this; } +#if __cplusplus >=201103L + SwigValueWrapper& operator=(T&& t) { SwigSmartPointer tmp(new T(std::move(t))); pointer = tmp; return *this; } + operator T&&() const { return std::move(*pointer.ptr); } +#else + operator T&() const { return *pointer.ptr; } +#endif + T *operator&() const { return pointer.ptr; } + static void reset(SwigValueWrapper& t, T *p) { t.pointer.reset(p); } +}; + +/* + * SwigValueInit() is a generic initialisation solution as the following approach: + * + * T c_result = T(); + * + * doesn't compile for all types for example: + * + * unsigned int c_result = unsigned int(); + */ +template T SwigValueInit() { + return T(); +} + +#if __cplusplus >=201103L +# define SWIG_STD_MOVE(OBJ) std::move(OBJ) +#else +# define SWIG_STD_MOVE(OBJ) OBJ +#endif + +#endif + + +#include + + +/* Support for the `contract` feature. + * + * Note that RETURNNULL is first because it's inserted via a 'Replaceall' in + * the fortran.cxx file. + */ +#define SWIG_contract_assert(RETURNNULL, EXPR, MSG) \ + if (!(EXPR)) { SWIG_exception_impl("$decl", SWIG_ValueError, MSG, RETURNNULL); } + + +#define SWIG_as_voidptr(a) const_cast< void * >(static_cast< const void * >(a)) +#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),reinterpret_cast< void** >(a)) + + +#include +#include +#include +#include +#include +#include + + +#include + + +#include + + +#include + + +#include + + +struct SwigClassWrapper { + void* cptr; + int cmemflags; +}; + + +SWIGINTERN SwigClassWrapper SwigClassWrapper_uninitialized() { + SwigClassWrapper result; + result.cptr = NULL; + result.cmemflags = 0; + return result; +} + +SWIGINTERN void std_vector_Sl_float_Sg__set(std::vector< float > *self,std::vector< float >::size_type index,float const &v){ + SWIG_check_range(index, self->size(), + "std::vector<""float" ">::set", + return); + (*self)[index] = v; + } +SWIGINTERN float const &std_vector_Sl_float_Sg__get(std::vector< float > *self,std::vector< float >::size_type index){ + SWIG_check_range(index, self->size(), + "std::vector<""float" ">::get", + return self->front()); + return (*self)[index]; + } +SWIGINTERN void std_vector_Sl_float_Sg__insert(std::vector< float > *self,std::vector< float >::size_type index,float const &v){ + SWIG_check_range(index, self->size() + 1, + "std::vector<""float" ">::insert", + return); + self->insert(self->begin() + index, v); + } +SWIGINTERN void std_vector_Sl_float_Sg__erase__SWIG_0(std::vector< float > *self,std::vector< float >::size_type index){ + SWIG_check_range(index, self->size(), + "std::vector<""float" ">::remove", + return); + self->erase(self->begin() + index); + } +SWIGINTERN void std_vector_Sl_float_Sg__erase__SWIG_1(std::vector< float > *self,std::vector< float >::size_type start_index,std::vector< float >::size_type stop_index){ + SWIG_check_range(start_index, stop_index + 1, + "std::vector<""float" ">::remove_range", + return); + SWIG_check_range(stop_index, self->size() + 1, + "std::vector<""float" ">::remove_range", + return); + self->erase(self->begin() + start_index, self->begin() + stop_index); + } +SWIGINTERN float &std_vector_Sl_float_Sg__front_ref(std::vector< float > *self){ + return (*self).front(); + } +SWIGINTERN float &std_vector_Sl_float_Sg__back_ref(std::vector< float > *self){ + return (*self).back(); + } +SWIGINTERN float &std_vector_Sl_float_Sg__get_ref(std::vector< float > *self,std::vector< float >::size_type index){ + SWIG_check_range(index, self->size(), + "std::vector<""float" ">::get_ref", + return self->front()); + return (*self)[index]; + } + +namespace swig { + +template +struct DestructorPolicy { + static SwigClassWrapper destroy(SwigClassWrapper self) { + delete static_cast(self.cptr); + return SwigClassWrapper_uninitialized(); + } +}; +template +struct DestructorPolicy { + static SwigClassWrapper destroy(SwigClassWrapper) { + SWIG_exception_impl("assignment", SWIG_TypeError, "Invalid assignment: class type has private destructor", return SwigClassWrapper_uninitialized()); + } +}; +} + + +namespace swig { + +SWIGINTERN SwigClassWrapper capture(SwigClassWrapper other) { + other.cmemflags &= ~SWIG_MEM_RVALUE; + return other; +} + +template +struct AssignmentPolicy { + static SwigClassWrapper destroy(SwigClassWrapper self) { + return DestructorPolicy::destroy(self); + } + static SwigClassWrapper alias(SwigClassWrapper other) { + SwigClassWrapper self = other; + self.cmemflags &= ~SWIG_MEM_OWN; + return self; + } + static SwigClassWrapper move_alias(SwigClassWrapper self, SwigClassWrapper other) { + if (self.cmemflags & SWIG_MEM_OWN) { + destroy(self); + } + return capture(other); + } + static SwigClassWrapper copy_alias(SwigClassWrapper self, SwigClassWrapper other) { + if (self.cmemflags & SWIG_MEM_OWN) { + destroy(self); + } + return capture(other); + } +}; + +template +struct AssignmentPolicy { + static SwigClassWrapper destroy(SwigClassWrapper self) { + return DestructorPolicy::destroy(self); + } + static SwigClassWrapper alias(SwigClassWrapper other) { + SwigClassWrapper self; + self.cptr = new T(*static_cast(other.cptr)); + self.cmemflags = other.cmemflags | SWIG_MEM_OWN; + return self; + } + static SwigClassWrapper move_alias(SwigClassWrapper self, SwigClassWrapper other) { + self = copy_alias(self, other); + self.cmemflags = other.cmemflags & ~SWIG_MEM_RVALUE; + destroy(other); + return self; + } + static SwigClassWrapper copy_alias(SwigClassWrapper self, SwigClassWrapper other) { + // LHS and RHS should both 'own' their shared pointers + T *pself = static_cast(self.cptr); + T *pother = static_cast(other.cptr); + *pself = *pother; + return self; + } +}; + +} // end namespace swig + +template +SWIGINTERN void SWIG_assign(SwigClassWrapper* self, SwigClassWrapper other) { + typedef swig::AssignmentPolicy Policy_t; + + if (self->cptr == NULL) { + /* LHS is unassigned */ + if (other.cmemflags & SWIG_MEM_RVALUE) { + /* Capture pointer from RHS, clear 'moving' flag */ + *self = swig::capture(other); + } else { + /* Aliasing another class; clear ownership or copy smart pointer */ + *self = Policy_t::alias(other); + } + } else if (other.cptr == NULL) { + /* Replace LHS with a null pointer */ + *self = Policy_t::destroy(*self); + } else if (self->cptr == other.cptr) { + /* Self-assignment: ignore */ + } else if (other.cmemflags & SWIG_MEM_RVALUE) { + /* Transferred ownership from a variable that's about to be lost. + * Move-assign and delete the transient data */ + *self = Policy_t::move_alias(*self, other); + } else { + /* RHS shouldn't be deleted, alias to LHS */ + *self = Policy_t::copy_alias(*self, other); + } +} + +template +SWIGINTERN void SWIG_free_rvalue(SwigClassWrapper other) { + typedef swig::AssignmentPolicy Policy_t; + if (other.cmemflags & SWIG_MEM_RVALUE + && other.cmemflags & SWIG_MEM_OWN) { + /* We own *and* are being passed an expiring value */ + Policy_t::destroy(other); + } +} + + +SWIGINTERN void std_vector_Sl_SpecUtils_Measurement_Sg__set(std::vector< SpecUtils::Measurement > *self,std::vector< SpecUtils::Measurement >::size_type index,SpecUtils::Measurement const &v){ + SWIG_check_range(index, self->size(), + "std::vector<""SpecUtils::Measurement" ">::set", + return); + (*self)[index] = v; + } +SWIGINTERN SpecUtils::Measurement const &std_vector_Sl_SpecUtils_Measurement_Sg__get(std::vector< SpecUtils::Measurement > *self,std::vector< SpecUtils::Measurement >::size_type index){ + SWIG_check_range(index, self->size(), + "std::vector<""SpecUtils::Measurement" ">::get", + return self->front()); + return (*self)[index]; + } +SWIGINTERN void std_vector_Sl_SpecUtils_Measurement_Sg__insert(std::vector< SpecUtils::Measurement > *self,std::vector< SpecUtils::Measurement >::size_type index,SpecUtils::Measurement const &v){ + SWIG_check_range(index, self->size() + 1, + "std::vector<""SpecUtils::Measurement" ">::insert", + return); + self->insert(self->begin() + index, v); + } +SWIGINTERN void std_vector_Sl_SpecUtils_Measurement_Sg__erase__SWIG_0(std::vector< SpecUtils::Measurement > *self,std::vector< SpecUtils::Measurement >::size_type index){ + SWIG_check_range(index, self->size(), + "std::vector<""SpecUtils::Measurement" ">::remove", + return); + self->erase(self->begin() + index); + } +SWIGINTERN void std_vector_Sl_SpecUtils_Measurement_Sg__erase__SWIG_1(std::vector< SpecUtils::Measurement > *self,std::vector< SpecUtils::Measurement >::size_type start_index,std::vector< SpecUtils::Measurement >::size_type stop_index){ + SWIG_check_range(start_index, stop_index + 1, + "std::vector<""SpecUtils::Measurement" ">::remove_range", + return); + SWIG_check_range(stop_index, self->size() + 1, + "std::vector<""SpecUtils::Measurement" ">::remove_range", + return); + self->erase(self->begin() + start_index, self->begin() + stop_index); + } +SWIGINTERN SpecUtils::Measurement &std_vector_Sl_SpecUtils_Measurement_Sg__front_ref(std::vector< SpecUtils::Measurement > *self){ + return (*self).front(); + } +SWIGINTERN SpecUtils::Measurement &std_vector_Sl_SpecUtils_Measurement_Sg__back_ref(std::vector< SpecUtils::Measurement > *self){ + return (*self).back(); + } +SWIGINTERN SpecUtils::Measurement &std_vector_Sl_SpecUtils_Measurement_Sg__get_ref(std::vector< SpecUtils::Measurement > *self,std::vector< SpecUtils::Measurement >::size_type index){ + SWIG_check_range(index, self->size(), + "std::vector<""SpecUtils::Measurement" ">::get_ref", + return self->front()); + return (*self)[index]; + } + +#include + + +#include +#ifdef _MSC_VER +# ifndef strtoull +# define strtoull _strtoui64 +# endif +# ifndef strtoll +# define strtoll _strtoi64 +# endif +#endif + + +struct SwigArrayWrapper { + void* data; + size_t size; +}; + + +SWIGINTERN SwigArrayWrapper SwigArrayWrapper_uninitialized() { + SwigArrayWrapper result; + result.data = NULL; + result.size = 0; + return result; +} + + +#include + + +struct SWIG_null_deleter { + void operator() (void const *) const { + } +}; +#define SWIG_NO_NULL_DELETER_0 , SWIG_null_deleter() +#define SWIG_NO_NULL_DELETER_1 +#define SWIG_NO_NULL_DELETER_SWIG_POINTER_NEW +#define SWIG_NO_NULL_DELETER_SWIG_POINTER_OWN + +SWIGINTERN float SpecUtils_Measurement_gamma_count_at(SpecUtils::Measurement *self,int index){ + return self->gamma_counts()->at(index-1); + } +SWIGINTERN size_t SpecUtils_Measurement_get_num_channels(SpecUtils::Measurement *self){ + return self->gamma_counts()->size(); + } +SWIGINTERN std::string SpecUtils_Measurement_get_start_time_string(SpecUtils::Measurement *self){ + auto timeStr = SpecUtils::to_vax_string( self->start_time() ); + return timeStr; + } +SWIGINTERN void SpecUtils_Measurement_set_start_time_from_string(SpecUtils::Measurement *self,std::string time_str){ + auto tp = SpecUtils::time_from_string(time_str); + self->set_start_time(tp); + } +SWIGINTERN void SpecUtils_Measurement_set_neutron_count(SpecUtils::Measurement *self,float count){ + SpecUtils::FloatVec ncounts{count}; + self->set_neutron_counts(ncounts, 0.0F); + } +SWIGINTERN float SpecUtils_Measurement_get_neutron_count(SpecUtils::Measurement *self){ + auto count = 0.0F; + if (!self->neutron_counts().empty()) + count = self->neutron_counts().front(); + + return count; + } +SWIGINTERN void SpecUtils_Measurement_set_spectrum(SpecUtils::Measurement *self,float const *spectrum,size_t num_channels){ + SpecUtils::FloatVec counts; + for (size_t i = 0; i < num_channels; i++) + { + counts.push_back(spectrum[i]); + } + + self->set_gamma_counts(counts); + } +SWIGINTERN void SpecUtils_Measurement_get_spectrum(SpecUtils::Measurement *self,float *spectrum,size_t num_channels){ + auto & counts = *self->gamma_counts(); + for (size_t i = 0 ; i < num_channels ; i++) + { + spectrum[i] = counts.at(i); + } + } +SWIGINTERN std::shared_ptr< SpecUtils::Measurement const > SpecUtils_SpecFile_measurement_at(SpecUtils::SpecFile *self,int index){ + auto newIndex = static_cast(index-1); + return self->measurement(newIndex); + } +SWIGINTERN int SpecUtils_SpecFile_get_max_channel_count(SpecUtils::SpecFile *self){ + auto maxCount = 0; + auto numMeasurements = self->num_measurements(); + + for(int i = 0; i < numMeasurements; i++) + { + auto m = self->measurement(i); + auto numChannels = static_cast(m->num_gamma_channels()); + maxCount = std::max(maxCount, numChannels); + } + + return maxCount; + } +SWIGINTERN void std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__set(std::vector< std::pair< float,float > > *self,std::vector< std::pair< float,float > >::size_type index,std::pair< float,float > const &v){ + SWIG_check_range(index, self->size(), + "std::vector<""std::pair< float,float >" ">::set", + return); + (*self)[index] = v; + } +SWIGINTERN std::pair< float,float > const &std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__get(std::vector< std::pair< float,float > > *self,std::vector< std::pair< float,float > >::size_type index){ + SWIG_check_range(index, self->size(), + "std::vector<""std::pair< float,float >" ">::get", + return self->front()); + return (*self)[index]; + } +SWIGINTERN void std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__insert(std::vector< std::pair< float,float > > *self,std::vector< std::pair< float,float > >::size_type index,std::pair< float,float > const &v){ + SWIG_check_range(index, self->size() + 1, + "std::vector<""std::pair< float,float >" ">::insert", + return); + self->insert(self->begin() + index, v); + } +SWIGINTERN void std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__erase__SWIG_0(std::vector< std::pair< float,float > > *self,std::vector< std::pair< float,float > >::size_type index){ + SWIG_check_range(index, self->size(), + "std::vector<""std::pair< float,float >" ">::remove", + return); + self->erase(self->begin() + index); + } +SWIGINTERN void std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__erase__SWIG_1(std::vector< std::pair< float,float > > *self,std::vector< std::pair< float,float > >::size_type start_index,std::vector< std::pair< float,float > >::size_type stop_index){ + SWIG_check_range(start_index, stop_index + 1, + "std::vector<""std::pair< float,float >" ">::remove_range", + return); + SWIG_check_range(stop_index, self->size() + 1, + "std::vector<""std::pair< float,float >" ">::remove_range", + return); + self->erase(self->begin() + start_index, self->begin() + stop_index); + } +SWIGINTERN std::pair< float,float > &std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__front_ref(std::vector< std::pair< float,float > > *self){ + return (*self).front(); + } +SWIGINTERN std::pair< float,float > &std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__back_ref(std::vector< std::pair< float,float > > *self){ + return (*self).back(); + } +SWIGINTERN std::pair< float,float > &std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__get_ref(std::vector< std::pair< float,float > > *self,std::vector< std::pair< float,float > >::size_type index){ + SWIG_check_range(index, self->size(), + "std::vector<""std::pair< float,float >" ">::get_ref", + return self->front()); + return (*self)[index]; + } +extern "C" { +SWIGEXPORT SwigClassWrapper _wrap_new_FloatVector__SWIG_0() { + SwigClassWrapper fresult ; + std::vector< float > *result = 0 ; + + result = (std::vector< float > *)new std::vector< float >(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_FloatVector__SWIG_1(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + std::vector< float > *arg1 = 0 ; + std::vector< float > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > const &", "FloatVector", "std::vector< float >::vector(std::vector< float > const &)", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< float > *)farg1->cptr; + result = (std::vector< float > *)new std::vector< float >((std::vector< float > const &)*arg1); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_FloatVector__SWIG_2(size_t const *farg1) { + SwigClassWrapper fresult ; + std::vector< float >::size_type arg1 ; + std::vector< float > *result = 0 ; + + arg1 = (std::vector< float >::size_type)(*farg1); + result = (std::vector< float > *)new std::vector< float >(arg1); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_FloatVector__SWIG_3(size_t const *farg1, float const *farg2) { + SwigClassWrapper fresult ; + std::vector< float >::size_type arg1 ; + float *arg2 = 0 ; + float temp2 ; + std::vector< float > *result = 0 ; + + arg1 = (std::vector< float >::size_type)(*farg1); + temp2 = (float)(*farg2); + arg2 = &temp2; + result = (std::vector< float > *)new std::vector< float >(arg1,(float const &)*arg2); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT size_t _wrap_FloatVector_size(SwigClassWrapper *farg1) { + size_t fresult ; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > const *", "FloatVector", "std::vector< float >::size() const", return 0); + arg1 = (std::vector< float > *)farg1->cptr; + result = ((std::vector< float > const *)arg1)->size(); + fresult = (std::vector< float >::size_type)(result); + return fresult; +} + + +SWIGEXPORT size_t _wrap_FloatVector_capacity(SwigClassWrapper *farg1) { + size_t fresult ; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > const *", "FloatVector", "std::vector< float >::capacity() const", return 0); + arg1 = (std::vector< float > *)farg1->cptr; + result = ((std::vector< float > const *)arg1)->capacity(); + fresult = (std::vector< float >::size_type)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_FloatVector_empty(SwigClassWrapper *farg1) { + int fresult ; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > const *", "FloatVector", "std::vector< float >::empty() const", return 0); + arg1 = (std::vector< float > *)farg1->cptr; + result = (bool)((std::vector< float > const *)arg1)->empty(); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT float _wrap_FloatVector_front(SwigClassWrapper *farg1) { + float fresult ; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + float *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > const *", "FloatVector", "std::vector< float >::front() const", return 0); + arg1 = (std::vector< float > *)farg1->cptr; + result = (float *) &((std::vector< float > const *)arg1)->front(); + fresult = *result; + return fresult; +} + + +SWIGEXPORT float _wrap_FloatVector_back(SwigClassWrapper *farg1) { + float fresult ; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + float *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > const *", "FloatVector", "std::vector< float >::back() const", return 0); + arg1 = (std::vector< float > *)farg1->cptr; + result = (float *) &((std::vector< float > const *)arg1)->back(); + fresult = *result; + return fresult; +} + + +SWIGEXPORT void _wrap_FloatVector_reserve(SwigClassWrapper *farg1, size_t const *farg2) { + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > *", "FloatVector", "std::vector< float >::reserve(std::vector< float >::size_type)", return ); + arg1 = (std::vector< float > *)farg1->cptr; + arg2 = (std::vector< float >::size_type)(*farg2); + (arg1)->reserve(arg2); +} + + +SWIGEXPORT void _wrap_FloatVector_resize__SWIG_0(SwigClassWrapper *farg1, size_t const *farg2) { + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > *", "FloatVector", "std::vector< float >::resize(std::vector< float >::size_type)", return ); + arg1 = (std::vector< float > *)farg1->cptr; + arg2 = (std::vector< float >::size_type)(*farg2); + (arg1)->resize(arg2); +} + + +SWIGEXPORT void _wrap_FloatVector_resize__SWIG_1(SwigClassWrapper *farg1, size_t const *farg2, float const *farg3) { + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + float *arg3 = 0 ; + float temp3 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > *", "FloatVector", "std::vector< float >::resize(std::vector< float >::size_type,float const &)", return ); + arg1 = (std::vector< float > *)farg1->cptr; + arg2 = (std::vector< float >::size_type)(*farg2); + temp3 = (float)(*farg3); + arg3 = &temp3; + (arg1)->resize(arg2,(float const &)*arg3); +} + + +SWIGEXPORT void _wrap_FloatVector_push_back(SwigClassWrapper *farg1, float const *farg2) { + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + float *arg2 = 0 ; + float temp2 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > *", "FloatVector", "std::vector< float >::push_back(float const &)", return ); + arg1 = (std::vector< float > *)farg1->cptr; + temp2 = (float)(*farg2); + arg2 = &temp2; + (arg1)->push_back((float const &)*arg2); +} + + +SWIGEXPORT void _wrap_FloatVector_pop_back(SwigClassWrapper *farg1) { + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > *", "FloatVector", "std::vector< float >::pop_back()", return ); + arg1 = (std::vector< float > *)farg1->cptr; + (arg1)->pop_back(); +} + + +SWIGEXPORT void _wrap_FloatVector_clear(SwigClassWrapper *farg1) { + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > *", "FloatVector", "std::vector< float >::clear()", return ); + arg1 = (std::vector< float > *)farg1->cptr; + (arg1)->clear(); +} + + +SWIGEXPORT void _wrap_FloatVector_set(SwigClassWrapper *farg1, size_t const *farg2, float const *farg3) { + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + float *arg3 = 0 ; + float temp3 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > *", "FloatVector", "std::vector< float >::set(std::vector< float >::size_type,float const &)", return ); + arg1 = (std::vector< float > *)farg1->cptr; + arg2 = *farg2 - 1; + temp3 = (float)(*farg3); + arg3 = &temp3; + std_vector_Sl_float_Sg__set(arg1,SWIG_STD_MOVE(arg2),(float const &)*arg3); +} + + +SWIGEXPORT float _wrap_FloatVector_get(SwigClassWrapper *farg1, size_t const *farg2) { + float fresult ; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + float *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > *", "FloatVector", "std::vector< float >::get(std::vector< float >::size_type)", return 0); + arg1 = (std::vector< float > *)farg1->cptr; + arg2 = *farg2 - 1; + result = (float *) &std_vector_Sl_float_Sg__get(arg1,SWIG_STD_MOVE(arg2)); + fresult = *result; + return fresult; +} + + +SWIGEXPORT void _wrap_FloatVector_insert(SwigClassWrapper *farg1, size_t const *farg2, float const *farg3) { + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + float *arg3 = 0 ; + float temp3 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > *", "FloatVector", "std::vector< float >::insert(std::vector< float >::size_type,float const &)", return ); + arg1 = (std::vector< float > *)farg1->cptr; + arg2 = *farg2 - 1; + temp3 = (float)(*farg3); + arg3 = &temp3; + std_vector_Sl_float_Sg__insert(arg1,SWIG_STD_MOVE(arg2),(float const &)*arg3); +} + + +SWIGEXPORT void _wrap_FloatVector_erase__SWIG_0(SwigClassWrapper *farg1, size_t const *farg2) { + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > *", "FloatVector", "std::vector< float >::erase(std::vector< float >::size_type)", return ); + arg1 = (std::vector< float > *)farg1->cptr; + arg2 = *farg2 - 1; + std_vector_Sl_float_Sg__erase__SWIG_0(arg1,SWIG_STD_MOVE(arg2)); +} + + +SWIGEXPORT void _wrap_FloatVector_erase__SWIG_1(SwigClassWrapper *farg1, size_t const *farg2, size_t const *farg3) { + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + std::vector< float >::size_type arg3 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > *", "FloatVector", "std::vector< float >::erase(std::vector< float >::size_type,std::vector< float >::size_type)", return ); + arg1 = (std::vector< float > *)farg1->cptr; + arg2 = *farg2 - 1; + arg3 = *farg3 - 1; + std_vector_Sl_float_Sg__erase__SWIG_1(arg1,SWIG_STD_MOVE(arg2),SWIG_STD_MOVE(arg3)); +} + + +SWIGEXPORT float * _wrap_FloatVector_front_ref(SwigClassWrapper *farg1) { + float * fresult ; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + float *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > *", "FloatVector", "std::vector< float >::front_ref()", return 0); + arg1 = (std::vector< float > *)farg1->cptr; + result = (float *) &std_vector_Sl_float_Sg__front_ref(arg1); + fresult = result; + return fresult; +} + + +SWIGEXPORT float * _wrap_FloatVector_back_ref(SwigClassWrapper *farg1) { + float * fresult ; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + float *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > *", "FloatVector", "std::vector< float >::back_ref()", return 0); + arg1 = (std::vector< float > *)farg1->cptr; + result = (float *) &std_vector_Sl_float_Sg__back_ref(arg1); + fresult = result; + return fresult; +} + + +SWIGEXPORT float * _wrap_FloatVector_get_ref(SwigClassWrapper *farg1, size_t const *farg2) { + float * fresult ; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + float *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > *", "FloatVector", "std::vector< float >::get_ref(std::vector< float >::size_type)", return 0); + arg1 = (std::vector< float > *)farg1->cptr; + arg2 = *farg2 - 1; + result = (float *) &std_vector_Sl_float_Sg__get_ref(arg1,SWIG_STD_MOVE(arg2)); + fresult = result; + return fresult; +} + + +SWIGEXPORT void _wrap_delete_FloatVector(SwigClassWrapper *farg1) { + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + + arg1 = (std::vector< float > *)farg1->cptr; + delete arg1; +} + + +SWIGEXPORT void _wrap_FloatVector_op_assign__(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float > *arg2 = 0 ; + + (void)sizeof(arg1); + (void)sizeof(arg2); + SWIG_assign, SWIGPOLICY_std_vector_Sl__Sp_float_SP__Sg_>(farg1, *farg2); + +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_MeasurementVector__SWIG_0() { + SwigClassWrapper fresult ; + std::vector< SpecUtils::Measurement > *result = 0 ; + + result = (std::vector< SpecUtils::Measurement > *)new std::vector< SpecUtils::Measurement >(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_MeasurementVector__SWIG_1(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + std::vector< SpecUtils::Measurement > *arg1 = 0 ; + std::vector< SpecUtils::Measurement > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > const &", "MeasurementVector", "std::vector< SpecUtils::Measurement >::vector(std::vector< SpecUtils::Measurement > const &)", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + result = (std::vector< SpecUtils::Measurement > *)new std::vector< SpecUtils::Measurement >((std::vector< SpecUtils::Measurement > const &)*arg1); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_MeasurementVector__SWIG_2(size_t const *farg1) { + SwigClassWrapper fresult ; + std::vector< SpecUtils::Measurement >::size_type arg1 ; + std::vector< SpecUtils::Measurement > *result = 0 ; + + arg1 = (std::vector< SpecUtils::Measurement >::size_type)(*farg1); + result = (std::vector< SpecUtils::Measurement > *)new std::vector< SpecUtils::Measurement >(arg1); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_MeasurementVector__SWIG_3(size_t const *farg1, SwigClassWrapper *farg2) { + SwigClassWrapper fresult ; + std::vector< SpecUtils::Measurement >::size_type arg1 ; + SpecUtils::Measurement *arg2 = 0 ; + std::vector< SpecUtils::Measurement > *result = 0 ; + + arg1 = (std::vector< SpecUtils::Measurement >::size_type)(*farg1); + SWIG_check_nonnull(farg2->cptr, "SpecUtils::Measurement const &", "Measurement", "std::vector< SpecUtils::Measurement >::vector(std::vector< SpecUtils::Measurement >::size_type,SpecUtils::Measurement const &)", return SwigClassWrapper_uninitialized()); + arg2 = (SpecUtils::Measurement *)farg2->cptr; + result = (std::vector< SpecUtils::Measurement > *)new std::vector< SpecUtils::Measurement >(arg1,(SpecUtils::Measurement const &)*arg2); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT size_t _wrap_MeasurementVector_size(SwigClassWrapper *farg1) { + size_t fresult ; + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + std::vector< SpecUtils::Measurement >::size_type result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > const *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::size() const", return 0); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + result = ((std::vector< SpecUtils::Measurement > const *)arg1)->size(); + fresult = (std::vector< SpecUtils::Measurement >::size_type)(result); + return fresult; +} + + +SWIGEXPORT size_t _wrap_MeasurementVector_capacity(SwigClassWrapper *farg1) { + size_t fresult ; + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + std::vector< SpecUtils::Measurement >::size_type result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > const *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::capacity() const", return 0); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + result = ((std::vector< SpecUtils::Measurement > const *)arg1)->capacity(); + fresult = (std::vector< SpecUtils::Measurement >::size_type)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_MeasurementVector_empty(SwigClassWrapper *farg1) { + int fresult ; + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > const *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::empty() const", return 0); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + result = (bool)((std::vector< SpecUtils::Measurement > const *)arg1)->empty(); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_MeasurementVector_front(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + SpecUtils::Measurement *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > const *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::front() const", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + result = (SpecUtils::Measurement *) &((std::vector< SpecUtils::Measurement > const *)arg1)->front(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_MeasurementVector_back(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + SpecUtils::Measurement *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > const *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::back() const", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + result = (SpecUtils::Measurement *) &((std::vector< SpecUtils::Measurement > const *)arg1)->back(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_MeasurementVector_reserve(SwigClassWrapper *farg1, size_t const *farg2) { + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + std::vector< SpecUtils::Measurement >::size_type arg2 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::reserve(std::vector< SpecUtils::Measurement >::size_type)", return ); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + arg2 = (std::vector< SpecUtils::Measurement >::size_type)(*farg2); + (arg1)->reserve(arg2); +} + + +SWIGEXPORT void _wrap_MeasurementVector_resize__SWIG_0(SwigClassWrapper *farg1, size_t const *farg2) { + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + std::vector< SpecUtils::Measurement >::size_type arg2 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::resize(std::vector< SpecUtils::Measurement >::size_type)", return ); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + arg2 = (std::vector< SpecUtils::Measurement >::size_type)(*farg2); + (arg1)->resize(arg2); +} + + +SWIGEXPORT void _wrap_MeasurementVector_resize__SWIG_1(SwigClassWrapper *farg1, size_t const *farg2, SwigClassWrapper *farg3) { + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + std::vector< SpecUtils::Measurement >::size_type arg2 ; + SpecUtils::Measurement *arg3 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::resize(std::vector< SpecUtils::Measurement >::size_type,SpecUtils::Measurement const &)", return ); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + arg2 = (std::vector< SpecUtils::Measurement >::size_type)(*farg2); + SWIG_check_nonnull(farg3->cptr, "SpecUtils::Measurement const &", "Measurement", "std::vector< SpecUtils::Measurement >::resize(std::vector< SpecUtils::Measurement >::size_type,SpecUtils::Measurement const &)", return ); + arg3 = (SpecUtils::Measurement *)farg3->cptr; + (arg1)->resize(arg2,(SpecUtils::Measurement const &)*arg3); +} + + +SWIGEXPORT void _wrap_MeasurementVector_push_back(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + SpecUtils::Measurement *arg2 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::push_back(SpecUtils::Measurement const &)", return ); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "SpecUtils::Measurement const &", "Measurement", "std::vector< SpecUtils::Measurement >::push_back(SpecUtils::Measurement const &)", return ); + arg2 = (SpecUtils::Measurement *)farg2->cptr; + (arg1)->push_back((SpecUtils::Measurement const &)*arg2); +} + + +SWIGEXPORT void _wrap_MeasurementVector_pop_back(SwigClassWrapper *farg1) { + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::pop_back()", return ); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + (arg1)->pop_back(); +} + + +SWIGEXPORT void _wrap_MeasurementVector_clear(SwigClassWrapper *farg1) { + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::clear()", return ); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + (arg1)->clear(); +} + + +SWIGEXPORT void _wrap_MeasurementVector_set(SwigClassWrapper *farg1, size_t const *farg2, SwigClassWrapper *farg3) { + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + std::vector< SpecUtils::Measurement >::size_type arg2 ; + SpecUtils::Measurement *arg3 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::set(std::vector< SpecUtils::Measurement >::size_type,SpecUtils::Measurement const &)", return ); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + arg2 = *farg2 - 1; + SWIG_check_nonnull(farg3->cptr, "SpecUtils::Measurement const &", "Measurement", "std::vector< SpecUtils::Measurement >::set(std::vector< SpecUtils::Measurement >::size_type,SpecUtils::Measurement const &)", return ); + arg3 = (SpecUtils::Measurement *)farg3->cptr; + std_vector_Sl_SpecUtils_Measurement_Sg__set(arg1,SWIG_STD_MOVE(arg2),(SpecUtils::Measurement const &)*arg3); +} + + +SWIGEXPORT SwigClassWrapper _wrap_MeasurementVector_get(SwigClassWrapper *farg1, size_t const *farg2) { + SwigClassWrapper fresult ; + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + std::vector< SpecUtils::Measurement >::size_type arg2 ; + SpecUtils::Measurement *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::get(std::vector< SpecUtils::Measurement >::size_type)", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + arg2 = *farg2 - 1; + result = (SpecUtils::Measurement *) &std_vector_Sl_SpecUtils_Measurement_Sg__get(arg1,SWIG_STD_MOVE(arg2)); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_MeasurementVector_insert(SwigClassWrapper *farg1, size_t const *farg2, SwigClassWrapper *farg3) { + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + std::vector< SpecUtils::Measurement >::size_type arg2 ; + SpecUtils::Measurement *arg3 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::insert(std::vector< SpecUtils::Measurement >::size_type,SpecUtils::Measurement const &)", return ); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + arg2 = *farg2 - 1; + SWIG_check_nonnull(farg3->cptr, "SpecUtils::Measurement const &", "Measurement", "std::vector< SpecUtils::Measurement >::insert(std::vector< SpecUtils::Measurement >::size_type,SpecUtils::Measurement const &)", return ); + arg3 = (SpecUtils::Measurement *)farg3->cptr; + std_vector_Sl_SpecUtils_Measurement_Sg__insert(arg1,SWIG_STD_MOVE(arg2),(SpecUtils::Measurement const &)*arg3); +} + + +SWIGEXPORT void _wrap_MeasurementVector_erase__SWIG_0(SwigClassWrapper *farg1, size_t const *farg2) { + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + std::vector< SpecUtils::Measurement >::size_type arg2 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::erase(std::vector< SpecUtils::Measurement >::size_type)", return ); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + arg2 = *farg2 - 1; + std_vector_Sl_SpecUtils_Measurement_Sg__erase__SWIG_0(arg1,SWIG_STD_MOVE(arg2)); +} + + +SWIGEXPORT void _wrap_MeasurementVector_erase__SWIG_1(SwigClassWrapper *farg1, size_t const *farg2, size_t const *farg3) { + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + std::vector< SpecUtils::Measurement >::size_type arg2 ; + std::vector< SpecUtils::Measurement >::size_type arg3 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::erase(std::vector< SpecUtils::Measurement >::size_type,std::vector< SpecUtils::Measurement >::size_type)", return ); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + arg2 = *farg2 - 1; + arg3 = *farg3 - 1; + std_vector_Sl_SpecUtils_Measurement_Sg__erase__SWIG_1(arg1,SWIG_STD_MOVE(arg2),SWIG_STD_MOVE(arg3)); +} + + +SWIGEXPORT SwigClassWrapper _wrap_MeasurementVector_front_ref(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + SpecUtils::Measurement *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::front_ref()", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + result = (SpecUtils::Measurement *) &std_vector_Sl_SpecUtils_Measurement_Sg__front_ref(arg1); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_MeasurementVector_back_ref(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + SpecUtils::Measurement *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::back_ref()", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + result = (SpecUtils::Measurement *) &std_vector_Sl_SpecUtils_Measurement_Sg__back_ref(arg1); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_MeasurementVector_get_ref(SwigClassWrapper *farg1, size_t const *farg2) { + SwigClassWrapper fresult ; + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + std::vector< SpecUtils::Measurement >::size_type arg2 ; + SpecUtils::Measurement *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< SpecUtils::Measurement > *", "MeasurementVector", "std::vector< SpecUtils::Measurement >::get_ref(std::vector< SpecUtils::Measurement >::size_type)", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + arg2 = *farg2 - 1; + result = (SpecUtils::Measurement *) &std_vector_Sl_SpecUtils_Measurement_Sg__get_ref(arg1,SWIG_STD_MOVE(arg2)); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_delete_MeasurementVector(SwigClassWrapper *farg1) { + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + + arg1 = (std::vector< SpecUtils::Measurement > *)farg1->cptr; + delete arg1; +} + + +SWIGEXPORT void _wrap_MeasurementVector_op_assign__(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + std::vector< SpecUtils::Measurement > *arg1 = (std::vector< SpecUtils::Measurement > *) 0 ; + std::vector< SpecUtils::Measurement > *arg2 = 0 ; + + (void)sizeof(arg1); + (void)sizeof(arg2); + SWIG_assign, SWIGPOLICY_std_vector_Sl__Sp_SpecUtils_Measurement_SP__Sg_>(farg1, *farg2); + +} + + +SWIGEXPORT int _wrap_spectrumTypeFromDescription(SwigArrayWrapper *farg1) { + int fresult ; + char *arg1 = (char *) 0 ; + SpecUtils::SpectrumType result; + + arg1 = (char *)(farg1->data); + result = (SpecUtils::SpectrumType)SpecUtils::spectrumTypeFromDescription((char const *)arg1); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_suggestedNameEnding(int const *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::SaveSpectrumAsType arg1 ; + char *result = 0 ; + + arg1 = (SpecUtils::SaveSpectrumAsType)(*farg1); + result = (char *)SpecUtils::suggestedNameEnding(arg1); + fresult.size = strlen((char*)(result)); + fresult.data = const_cast< char * >(result); + return fresult; +} + + +SWIGEXPORT int _wrap_is_candidate_n42_file__SWIG_0(SwigArrayWrapper *farg1) { + int fresult ; + char *arg1 = (char *) 0 ; + bool result; + + arg1 = (char *)(farg1->data); + result = (bool)SpecUtils::is_candidate_n42_file((char const *)arg1); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_is_candidate_n42_file__SWIG_1(SwigArrayWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + char *arg1 = (char *) (char *)0 ; + char *arg2 = (char *) (char *)0 ; + bool result; + + arg1 = (char *)(farg1->data); + arg2 = (char *)(farg2->data); + result = (bool)SpecUtils::is_candidate_n42_file((char const *)arg1,(char const *)arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_convert_n42_utf16_xml_to_utf8(SwigArrayWrapper *farg1, SwigArrayWrapper *farg2) { + SwigArrayWrapper fresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) (char *)0 ; + char *result = 0 ; + + arg1 = (char *)(farg1->data); + arg2 = (char *)(farg2->data); + result = (char *)SpecUtils::convert_n42_utf16_xml_to_utf8(arg1,arg2); + fresult.size = strlen((char*)(result)); + fresult.data = const_cast< char * >(result); + return fresult; +} + + +SWIGEXPORT void _wrap_add_analysis_results_to_2012_N42(SwigClassWrapper *farg1, SwigClassWrapper *farg2, SwigClassWrapper *farg3) { + SpecUtils::DetectorAnalysis *arg1 = 0 ; + ::rapidxml::xml_node< char > *arg2 = (::rapidxml::xml_node< char > *) 0 ; + std::mutex *arg3 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis const &", "DetectorAnalysis", "SpecUtils::add_analysis_results_to_2012_N42(SpecUtils::DetectorAnalysis const &,::rapidxml::xml_node< char > *,std::mutex &)", return ); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + arg2 = (::rapidxml::xml_node< char > *)farg2->cptr; + SWIG_check_nonnull(farg3->cptr, "std::mutex &", "SWIGTYPE_p_std__mutex", "SpecUtils::add_analysis_results_to_2012_N42(SpecUtils::DetectorAnalysis const &,::rapidxml::xml_node< char > *,std::mutex &)", return ); + arg3 = (std::mutex *)farg3->cptr; + SpecUtils::add_analysis_results_to_2012_N42((SpecUtils::DetectorAnalysis const &)*arg1,arg2,*arg3); +} + + +SWIGEXPORT void _wrap_set_analysis_info_from_n42(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + rapidxml::xml_node< char > *arg1 = (rapidxml::xml_node< char > *) 0 ; + SpecUtils::DetectorAnalysis *arg2 = 0 ; + + arg1 = (rapidxml::xml_node< char > *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "SpecUtils::DetectorAnalysis &", "DetectorAnalysis", "SpecUtils::set_analysis_info_from_n42(rapidxml::xml_node< char > const *,SpecUtils::DetectorAnalysis &)", return ); + arg2 = (SpecUtils::DetectorAnalysis *)farg2->cptr; + SpecUtils::set_analysis_info_from_n42((rapidxml::xml_node< char > const *)arg1,*arg2); +} + + +SWIGEXPORT double _wrap_gamma_integral(SwigClassWrapper const *farg1, float const *farg2, float const *farg3) { + double fresult ; + std::shared_ptr< SpecUtils::Measurement const > *arg1 = 0 ; + float arg2 ; + float arg3 ; + std::shared_ptr< SpecUtils::Measurement const > tempnull1 ; + double result; + + arg1 = farg1->cptr ? static_cast * >(farg1->cptr) : &tempnull1; + arg2 = (float)(*farg2); + arg3 = (float)(*farg3); + result = (double)SpecUtils::gamma_integral((std::shared_ptr< SpecUtils::Measurement const > const &)*arg1,arg2,arg3); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_detectorTypeToString(int const *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::DetectorType arg1 ; + std::string *result = 0 ; + + arg1 = (SpecUtils::DetectorType)(*farg1); + result = (std::string *) &SpecUtils::detectorTypeToString(arg1); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_Measurement() { + SwigClassWrapper fresult ; + SpecUtils::Measurement *result = 0 ; + + result = (SpecUtils::Measurement *)new SpecUtils::Measurement(); + fresult.cptr = result ? new std::shared_ptr< SpecUtils::Measurement >(result SWIG_NO_NULL_DELETER_1) : NULL; + fresult.cmemflags = SWIG_MEM_OWN | SWIG_MEM_RVALUE; + return fresult; +} + + +SWIGEXPORT void _wrap_delete_Measurement(SwigClassWrapper *farg1) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + (void)arg1; delete smartarg1; +} + + +SWIGEXPORT int _wrap_Measurement_memmorysize(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + size_t result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = ((SpecUtils::Measurement const *)arg1)->memmorysize(); + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_Measurement_live_time(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (float)((SpecUtils::Measurement const *)arg1)->live_time(); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT void _wrap_Measurement_set_live_time(SwigClassWrapper *farg1, float const *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + float arg2 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (float)(*farg2); + (arg1)->set_live_time(arg2); +} + + +SWIGEXPORT float _wrap_Measurement_real_time(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (float)((SpecUtils::Measurement const *)arg1)->real_time(); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT void _wrap_Measurement_set_real_time(SwigClassWrapper *farg1, float const *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + float arg2 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (float)(*farg2); + (arg1)->set_real_time(arg2); +} + + +SWIGEXPORT int _wrap_Measurement_contained_neutron(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + bool result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (bool)((SpecUtils::Measurement const *)arg1)->contained_neutron(); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_Measurement_sample_number(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + int result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (int)((SpecUtils::Measurement const *)arg1)->sample_number(); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_Measurement_title(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::string *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::string *) &((SpecUtils::Measurement const *)arg1)->title(); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT int _wrap_Measurement_occupied(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + SpecUtils::OccupancyStatus result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (SpecUtils::OccupancyStatus)((SpecUtils::Measurement const *)arg1)->occupied(); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_Measurement_gamma_count_sum(SwigClassWrapper *farg1) { + double fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + double result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (double)((SpecUtils::Measurement const *)arg1)->gamma_count_sum(); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_Measurement_neutron_live_time(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (float)((SpecUtils::Measurement const *)arg1)->neutron_live_time(); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_Measurement_neutron_counts_sum(SwigClassWrapper *farg1) { + double fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + double result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (double)((SpecUtils::Measurement const *)arg1)->neutron_counts_sum(); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_Measurement_speed(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (float)((SpecUtils::Measurement const *)arg1)->speed(); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_Measurement_dx(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (float)((SpecUtils::Measurement const *)arg1)->dx(); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_Measurement_dy(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (float)((SpecUtils::Measurement const *)arg1)->dy(); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_Measurement_latitude(SwigClassWrapper *farg1) { + double fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + double result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (double)((SpecUtils::Measurement const *)arg1)->latitude(); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_Measurement_longitude(SwigClassWrapper *farg1) { + double fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + double result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (double)((SpecUtils::Measurement const *)arg1)->longitude(); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_Measurement_has_gps_info(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + bool result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (bool)((SpecUtils::Measurement const *)arg1)->has_gps_info(); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT float _wrap_Measurement_dose_rate(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (float)((SpecUtils::Measurement const *)arg1)->dose_rate(); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_Measurement_exposure_rate(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (float)((SpecUtils::Measurement const *)arg1)->exposure_rate(); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT char _wrap_Measurement_pcf_tag(SwigClassWrapper *farg1) { + char fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + char result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (char)((SpecUtils::Measurement const *)arg1)->pcf_tag(); + fresult = (char)(result); + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_Measurement_source_description(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::string *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::string *) &((SpecUtils::Measurement const *)arg1)->source_description(); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_Measurement_measurement_description(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::string *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::string *) &((SpecUtils::Measurement const *)arg1)->measurement_description(); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_position_time(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + SpecUtils::time_point_t result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = ((SpecUtils::Measurement const *)arg1)->position_time(); + fresult.cptr = new (SpecUtils::time_point_t)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_Measurement_detector_name(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::string *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::string *) &((SpecUtils::Measurement const *)arg1)->detector_name(); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT void _wrap_Measurement_update_detector_name_from_title(SwigClassWrapper *farg1) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + (arg1)->update_detector_name_from_title(); +} + + +SWIGEXPORT int _wrap_Measurement_detector_number(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + int result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (int)((SpecUtils::Measurement const *)arg1)->detector_number(); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_Measurement_detector_type(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::string *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::string *) &((SpecUtils::Measurement const *)arg1)->detector_type(); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT int _wrap_Measurement_quality_status(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + SpecUtils::QualityStatus result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (SpecUtils::QualityStatus)((SpecUtils::Measurement const *)arg1)->quality_status(); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_Measurement_source_type(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + SpecUtils::SourceType result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (SpecUtils::SourceType)((SpecUtils::Measurement const *)arg1)->source_type(); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_remarks(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::vector< std::string > *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::vector< std::string > *) &((SpecUtils::Measurement const *)arg1)->remarks(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_mutable_remarks(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + std::vector< std::string > *result = 0 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::vector< std::string > *) &(arg1)->mutable_remarks(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_parse_warnings(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::vector< std::string > *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::vector< std::string > *) &((SpecUtils::Measurement const *)arg1)->parse_warnings(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_start_time(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + SpecUtils::time_point_t *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (SpecUtils::time_point_t *) &((SpecUtils::Measurement const *)arg1)->start_time(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_start_time_copy(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + SpecUtils::time_point_t result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = ((SpecUtils::Measurement const *)arg1)->start_time_copy(); + fresult.cptr = new (SpecUtils::time_point_t)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT int _wrap_Measurement_energy_calibration_model(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + SpecUtils::EnergyCalType result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (SpecUtils::EnergyCalType)((SpecUtils::Measurement const *)arg1)->energy_calibration_model(); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_calibration_coeffs(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::vector< float > *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::vector< float > *) &((SpecUtils::Measurement const *)arg1)->calibration_coeffs(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_deviation_pairs(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::vector< std::pair< float,float > > *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::vector< std::pair< float,float > > *) &((SpecUtils::Measurement const *)arg1)->deviation_pairs(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_energy_calibration(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = ((SpecUtils::Measurement const *)arg1)->energy_calibration(); + fresult.cptr = result ? (new std::shared_ptr(static_cast< const std::shared_ptr& >(result))) : NULL; + fresult.cmemflags = SWIG_MEM_OWN | SWIG_MEM_RVALUE; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_mutable_energy_calibration(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > result; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (arg1)->mutable_energy_calibration(); + fresult.cptr = result ? (new std::shared_ptr(static_cast< const std::shared_ptr& >(result))) : NULL; + fresult.cmemflags = SWIG_MEM_OWN | SWIG_MEM_RVALUE; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_channel_energies(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::shared_ptr< std::vector< float > const > *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::shared_ptr< std::vector< float > const > *) &((SpecUtils::Measurement const *)arg1)->channel_energies(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_gamma_counts(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::shared_ptr< std::vector< float > const > *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::shared_ptr< std::vector< float > const > *) &((SpecUtils::Measurement const *)arg1)->gamma_counts(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_neutron_counts(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::vector< float > *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::vector< float > *) &((SpecUtils::Measurement const *)arg1)->neutron_counts(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_location_state(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::shared_ptr< SpecUtils::LocationState const > *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::shared_ptr< SpecUtils::LocationState const > *) &((SpecUtils::Measurement const *)arg1)->location_state(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_Measurement_set_title(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::string *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + std::string tempstr2 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + (arg1)->set_title((std::string const &)*arg2); +} + + +SWIGEXPORT void _wrap_Measurement_set_start_time(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + SpecUtils::time_point_t *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + SWIG_check_nonnull(farg2->cptr, "SpecUtils::time_point_t const &", "SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN", "SpecUtils::Measurement::set_start_time(SpecUtils::time_point_t const &)", return ); + arg2 = (SpecUtils::time_point_t *)farg2->cptr; + (arg1)->set_start_time((SpecUtils::time_point_t const &)*arg2); +} + + +SWIGEXPORT void _wrap_Measurement_set_remarks(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::vector< std::string > *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + SWIG_check_nonnull(farg2->cptr, "std::vector< std::string > const &", "SWIGTYPE_p_std__vectorT_std__string_t", "SpecUtils::Measurement::set_remarks(std::vector< std::string > const &)", return ); + arg2 = (std::vector< std::string > *)farg2->cptr; + (arg1)->set_remarks((std::vector< std::string > const &)*arg2); +} + + +SWIGEXPORT void _wrap_Measurement_set_parse_warnings(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::vector< std::string > *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + SWIG_check_nonnull(farg2->cptr, "std::vector< std::string > const &", "SWIGTYPE_p_std__vectorT_std__string_t", "SpecUtils::Measurement::set_parse_warnings(std::vector< std::string > const &)", return ); + arg2 = (std::vector< std::string > *)farg2->cptr; + (arg1)->set_parse_warnings((std::vector< std::string > const &)*arg2); +} + + +SWIGEXPORT void _wrap_Measurement_set_source_type(SwigClassWrapper *farg1, int const *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + SpecUtils::SourceType arg2 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (SpecUtils::SourceType)(*farg2); + (arg1)->set_source_type(arg2); +} + + +SWIGEXPORT void _wrap_Measurement_set_position(SwigClassWrapper *farg1, double const *farg2, double const *farg3, SwigClassWrapper *farg4) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + double arg2 ; + double arg3 ; + SpecUtils::time_point_t arg4 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (double)(*farg2); + arg3 = (double)(*farg3); + SWIG_check_nonnull(farg4->cptr, "SpecUtils::time_point_t", "SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN", "SpecUtils::Measurement::set_position(double,double,SpecUtils::time_point_t)", return ); + arg4 = *((SpecUtils::time_point_t *)(farg4->cptr)); + (arg1)->set_position(arg2,arg3,arg4); +} + + +SWIGEXPORT void _wrap_Measurement_set_sample_number(SwigClassWrapper *farg1, int const *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + int arg2 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (int)(*farg2); + (arg1)->set_sample_number(arg2); +} + + +SWIGEXPORT void _wrap_Measurement_set_occupancy_status(SwigClassWrapper *farg1, int const *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + SpecUtils::OccupancyStatus arg2 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (SpecUtils::OccupancyStatus)(*farg2); + (arg1)->set_occupancy_status(arg2); +} + + +SWIGEXPORT void _wrap_Measurement_set_detector_name(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::string *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + std::string tempstr2 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + (arg1)->set_detector_name((std::string const &)*arg2); +} + + +SWIGEXPORT void _wrap_Measurement_set_detector_number(SwigClassWrapper *farg1, int const *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + int arg2 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (int)(*farg2); + (arg1)->set_detector_number(arg2); +} + + +SWIGEXPORT void _wrap_Measurement_set_neutron_counts__SWIG_0(SwigClassWrapper *farg1, SwigClassWrapper *farg2, float const *farg3) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::vector< float > *arg2 = 0 ; + float arg3 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + SWIG_check_nonnull(farg2->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::Measurement::set_neutron_counts(std::vector< float > const &,float const)", return ); + arg2 = (std::vector< float > *)farg2->cptr; + arg3 = (float)(*farg3); + (arg1)->set_neutron_counts((std::vector< float > const &)*arg2,arg3); +} + + +SWIGEXPORT void _wrap_Measurement_set_neutron_counts__SWIG_1(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::vector< float > *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + SWIG_check_nonnull(farg2->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::Measurement::set_neutron_counts(std::vector< float > const &)", return ); + arg2 = (std::vector< float > *)farg2->cptr; + (arg1)->set_neutron_counts((std::vector< float > const &)*arg2); +} + + +SWIGEXPORT void _wrap_Measurement_set_pcf_tag(SwigClassWrapper *farg1, char const *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + char arg2 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (char)(*farg2); + (arg1)->set_pcf_tag(arg2); +} + + +SWIGEXPORT void _wrap_Measurement_set_source_description(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::string *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + std::string tempstr2 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + (arg1)->set_source_description((std::string const &)*arg2); +} + + +SWIGEXPORT void _wrap_Measurement_set_measurement_description(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::string *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + std::string tempstr2 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + (arg1)->set_measurement_description((std::string const &)*arg2); +} + + +SWIGEXPORT int _wrap_Measurement_num_gamma_channels(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + size_t result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = ((SpecUtils::Measurement const *)arg1)->num_gamma_channels(); + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_Measurement_find_gamma_channel(SwigClassWrapper *farg1, float const *farg2) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + float arg2 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + size_t result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (float)(*farg2); + result = ((SpecUtils::Measurement const *)arg1)->find_gamma_channel(arg2); + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_Measurement_gamma_channel_content(SwigClassWrapper *farg1, int const *farg2) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + size_t arg2 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (size_t)(*farg2); + result = (float)((SpecUtils::Measurement const *)arg1)->gamma_channel_content(arg2); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_Measurement_gamma_channel_lower(SwigClassWrapper *farg1, int const *farg2) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + size_t arg2 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (size_t)(*farg2); + result = (float)((SpecUtils::Measurement const *)arg1)->gamma_channel_lower(arg2); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_Measurement_gamma_channel_center(SwigClassWrapper *farg1, int const *farg2) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + size_t arg2 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (size_t)(*farg2); + result = (float)((SpecUtils::Measurement const *)arg1)->gamma_channel_center(arg2); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_Measurement_gamma_channel_upper(SwigClassWrapper *farg1, int const *farg2) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + size_t arg2 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (size_t)(*farg2); + result = (float)((SpecUtils::Measurement const *)arg1)->gamma_channel_upper(arg2); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_Measurement_gamma_channel_width(SwigClassWrapper *farg1, int const *farg2) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + size_t arg2 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (size_t)(*farg2); + result = (float)((SpecUtils::Measurement const *)arg1)->gamma_channel_width(arg2); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_Measurement_gamma_integral(SwigClassWrapper *farg1, float const *farg2, float const *farg3) { + double fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + float arg2 ; + float arg3 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + double result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (float)(*farg2); + arg3 = (float)(*farg3); + result = (double)((SpecUtils::Measurement const *)arg1)->gamma_integral(arg2,arg3); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_Measurement_gamma_channels_sum(SwigClassWrapper *farg1, int const *farg2, int const *farg3) { + double fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + size_t arg2 ; + size_t arg3 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + double result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (size_t)(*farg2); + arg3 = (size_t)(*farg3); + result = (double)((SpecUtils::Measurement const *)arg1)->gamma_channels_sum(arg2,arg3); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_gamma_channel_energies(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::shared_ptr< std::vector< float > const > *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::shared_ptr< std::vector< float > const > *) &((SpecUtils::Measurement const *)arg1)->gamma_channel_energies(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_gamma_channel_contents(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + std::shared_ptr< std::vector< float > const > *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (std::shared_ptr< std::vector< float > const > *) &((SpecUtils::Measurement const *)arg1)->gamma_channel_contents(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT float _wrap_Measurement_gamma_energy_min(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (float)((SpecUtils::Measurement const *)arg1)->gamma_energy_min(); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_Measurement_gamma_energy_max(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (float)((SpecUtils::Measurement const *)arg1)->gamma_energy_max(); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT SWIGEXTERN const int _wrap_Measurement_DerivedDataProperties_IsDerived = (int)(SpecUtils::Measurement::DerivedDataProperties::IsDerived); + +SWIGEXPORT SWIGEXTERN const int _wrap_Measurement_DerivedDataProperties_ItemOfInterestSum = (int)(SpecUtils::Measurement::DerivedDataProperties::ItemOfInterestSum); + +SWIGEXPORT SWIGEXTERN const int _wrap_Measurement_DerivedDataProperties_UsedForAnalysis = (int)(SpecUtils::Measurement::DerivedDataProperties::UsedForAnalysis); + +SWIGEXPORT SWIGEXTERN const int _wrap_Measurement_DerivedDataProperties_ProcessedFurther = (int)(SpecUtils::Measurement::DerivedDataProperties::ProcessedFurther); + +SWIGEXPORT SWIGEXTERN const int _wrap_Measurement_DerivedDataProperties_BackgroundSubtracted = (int)(SpecUtils::Measurement::DerivedDataProperties::BackgroundSubtracted); + +SWIGEXPORT SWIGEXTERN const int _wrap_Measurement_DerivedDataProperties_IsBackground = (int)(SpecUtils::Measurement::DerivedDataProperties::IsBackground); + +SWIGEXPORT SwigClassWrapper _wrap_Measurement_derived_data_properties(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + uint32_t result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = ((SpecUtils::Measurement const *)arg1)->derived_data_properties(); + fresult.cptr = new (uint32_t)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT int _wrap_Measurement_rpm_panel_number(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + int result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (int)((SpecUtils::Measurement const *)arg1)->rpm_panel_number(); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_Measurement_rpm_column_number(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + int result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (int)((SpecUtils::Measurement const *)arg1)->rpm_column_number(); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_Measurement_rpm_mca_number(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + int result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (int)((SpecUtils::Measurement const *)arg1)->rpm_mca_number(); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_Measurement_write_2006_N42_xml(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::ostream *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + bool result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::Measurement::write_2006_N42_xml(std::ostream &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + result = (bool)((SpecUtils::Measurement const *)arg1)->write_2006_N42_xml(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_Measurement_write_csv(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::ostream *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + bool result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::Measurement::write_csv(std::ostream &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + result = (bool)((SpecUtils::Measurement const *)arg1)->write_csv(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_Measurement_write_txt(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::ostream *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement const > *smartarg1 ; + bool result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::Measurement::write_txt(std::ostream &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + result = (bool)((SpecUtils::Measurement const *)arg1)->write_txt(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_Measurement_reset(SwigClassWrapper *farg1) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + (arg1)->reset(); +} + + +SWIGEXPORT void _wrap_Measurement_rebin(SwigClassWrapper *farg1, SwigClassWrapper const *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > tempnull2 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = farg2->cptr ? static_cast * >(farg2->cptr) : &tempnull2; + (arg1)->rebin((std::shared_ptr< SpecUtils::EnergyCalibration const > const &)*arg2); +} + + +SWIGEXPORT void _wrap_Measurement_set_energy_calibration(SwigClassWrapper *farg1, SwigClassWrapper const *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > tempnull2 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = farg2->cptr ? static_cast * >(farg2->cptr) : &tempnull2; + (arg1)->set_energy_calibration((std::shared_ptr< SpecUtils::EnergyCalibration const > const &)*arg2); +} + + +SWIGEXPORT void _wrap_Measurement_set_ecal(SwigClassWrapper *farg1, SwigClassWrapper const *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > tempnull2 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = farg2->cptr ? static_cast * >(farg2->cptr) : &tempnull2; + (arg1)->set_ecal((std::shared_ptr< SpecUtils::EnergyCalibration const > const &)*arg2); +} + + +SWIGEXPORT void _wrap_Measurement_set_info_from_2006_N42_spectrum_node(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + rapidxml::xml_node< char > *arg2 = (rapidxml::xml_node< char > *) (rapidxml::xml_node< char > *)0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + SWIG_check_nonnull(farg2->cptr, "rapidxml::xml_node< char > *", "SWIGTYPE_p_p_rapidxml__xml_nodeT_char_t", "SpecUtils::Measurement::set_info_from_2006_N42_spectrum_node(rapidxml::xml_node< char > const *const)", return ); + arg2 = *((rapidxml::xml_node< char > **)(farg2->cptr)); + (arg1)->set_info_from_2006_N42_spectrum_node((rapidxml::xml_node< char > const *)arg2); +} + + +SWIGEXPORT float _wrap_Measurement_gamma_count_at(SwigClassWrapper *farg1, int const *farg2) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + int arg2 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (int)(*farg2); + result = (float)SpecUtils_Measurement_gamma_count_at(arg1,arg2); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_Measurement_get_num_channels(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + size_t result; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = SpecUtils_Measurement_get_num_channels(arg1); + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_Measurement_get_start_time_string(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + std::string result; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = SpecUtils_Measurement_get_start_time_string(arg1); + fresult.size = (&result)->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, (&result)->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT void _wrap_Measurement_set_start_time_from_string(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::string arg2 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + (&arg2)->assign(static_cast(farg2->data), farg2->size); + SpecUtils_Measurement_set_start_time_from_string(arg1,SWIG_STD_MOVE(arg2)); +} + + +SWIGEXPORT void _wrap_Measurement_set_neutron_count(SwigClassWrapper *farg1, float const *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + float arg2 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (float)(*farg2); + SpecUtils_Measurement_set_neutron_count(arg1,arg2); +} + + +SWIGEXPORT float _wrap_Measurement_get_neutron_count(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + result = (float)SpecUtils_Measurement_get_neutron_count(arg1); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT void _wrap_Measurement_set_spectrum(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + float *arg2 = (float *) 0 ; + size_t arg3 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (float *)farg2->data; + arg3 = farg2->size; + SpecUtils_Measurement_set_spectrum(arg1,(float const *)arg2,SWIG_STD_MOVE(arg3)); +} + + +SWIGEXPORT void _wrap_Measurement_get_spectrum(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + float *arg2 = (float *) 0 ; + size_t arg3 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + arg2 = (float *)farg2->data; + arg3 = farg2->size; + SpecUtils_Measurement_get_spectrum(arg1,arg2,SWIG_STD_MOVE(arg3)); +} + + +SWIGEXPORT void _wrap_Measurement_op_assign__(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::Measurement *arg1 = (SpecUtils::Measurement *) 0 ; + SpecUtils::Measurement *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::Measurement >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::Measurement*)(smartarg1->get()) : NULL; + (void)sizeof(arg2); + SWIG_assign, SWIGPOLICY_SpecUtils_Measurement>(farg1, *farg2); + +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_SpecFile__SWIG_0() { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *result = 0 ; + + result = (SpecUtils::SpecFile *)new SpecUtils::SpecFile(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_SpecFile__SWIG_1(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = 0 ; + SpecUtils::SpecFile *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const &", "SpecFile", "SpecUtils::SpecFile::SpecFile(SpecUtils::SpecFile const &)", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (SpecUtils::SpecFile *)new SpecUtils::SpecFile((SpecUtils::SpecFile const &)*arg1); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_delete_SpecFile(SwigClassWrapper *farg1) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + delete arg1; +} + + +SWIGEXPORT int _wrap_SpecFile_load_file__SWIG_0(SwigClassWrapper *farg1, SwigArrayWrapper *farg2, int const *farg3, SwigArrayWrapper *farg4) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + SpecUtils::ParserType arg3 ; + std::string arg4 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_file(std::string const &,SpecUtils::ParserType,std::string)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + arg3 = (SpecUtils::ParserType)(*farg3); + (&arg4)->assign(static_cast(farg4->data), farg4->size); + result = (bool)(arg1)->load_file((std::string const &)*arg2,arg3,arg4); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_file__SWIG_1(SwigClassWrapper *farg1, SwigArrayWrapper *farg2, int const *farg3) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + SpecUtils::ParserType arg3 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_file(std::string const &,SpecUtils::ParserType)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + arg3 = (SpecUtils::ParserType)(*farg3); + result = (bool)(arg1)->load_file((std::string const &)*arg2,arg3); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_parse_warnings(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::vector< std::string > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::parse_warnings() const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::vector< std::string > *) &((SpecUtils::SpecFile const *)arg1)->parse_warnings(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_modified(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::modified() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->modified(); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_SpecFile_reset_modified(SwigClassWrapper *farg1) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::reset_modified()", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + (arg1)->reset_modified(); +} + + +SWIGEXPORT int _wrap_SpecFile_modified_since_decode(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::modified_since_decode() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->modified_since_decode(); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_SpecFile_reset_modified_since_decode(SwigClassWrapper *farg1) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::reset_modified_since_decode()", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + (arg1)->reset_modified_since_decode(); +} + + +SWIGEXPORT float _wrap_SpecFile_gamma_live_time(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + float result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::gamma_live_time() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (float)((SpecUtils::SpecFile const *)arg1)->gamma_live_time(); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_SpecFile_gamma_real_time(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + float result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::gamma_real_time() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (float)((SpecUtils::SpecFile const *)arg1)->gamma_real_time(); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_SpecFile_gamma_count_sum(SwigClassWrapper *farg1) { + double fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + double result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::gamma_count_sum() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (double)((SpecUtils::SpecFile const *)arg1)->gamma_count_sum(); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_SpecFile_neutron_counts_sum(SwigClassWrapper *farg1) { + double fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + double result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::neutron_counts_sum() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (double)((SpecUtils::SpecFile const *)arg1)->neutron_counts_sum(); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_SpecFile_filename(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::filename() const", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::string *) &((SpecUtils::SpecFile const *)arg1)->filename(); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_detector_names(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::vector< std::string > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::detector_names() const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::vector< std::string > *) &((SpecUtils::SpecFile const *)arg1)->detector_names(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_detector_numbers(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::vector< int > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::detector_numbers() const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::vector< int > *) &((SpecUtils::SpecFile const *)arg1)->detector_numbers(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_gamma_detector_names(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::vector< std::string > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::gamma_detector_names() const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::vector< std::string > *) &((SpecUtils::SpecFile const *)arg1)->gamma_detector_names(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_neutron_detector_names(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::vector< std::string > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::neutron_detector_names() const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::vector< std::string > *) &((SpecUtils::SpecFile const *)arg1)->neutron_detector_names(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_SpecFile_uuid(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::uuid() const", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::string *) &((SpecUtils::SpecFile const *)arg1)->uuid(); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_remarks(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::vector< std::string > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::remarks() const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::vector< std::string > *) &((SpecUtils::SpecFile const *)arg1)->remarks(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_lane_number(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + int result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::lane_number() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (int)((SpecUtils::SpecFile const *)arg1)->lane_number(); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_SpecFile_measurement_location_name(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::measurement_location_name() const", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::string *) &((SpecUtils::SpecFile const *)arg1)->measurement_location_name(); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_SpecFile_inspection(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::inspection() const", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::string *) &((SpecUtils::SpecFile const *)arg1)->inspection(); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_SpecFile_measurement_operator(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::measurement_operator() const", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::string *) &((SpecUtils::SpecFile const *)arg1)->measurement_operator(); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_sample_numbers(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::set< int,std::less< int >,std::allocator< int > > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::sample_numbers() const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::set< int,std::less< int >,std::allocator< int > > *) &((SpecUtils::SpecFile const *)arg1)->sample_numbers(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_num_measurements(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + size_t result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::num_measurements() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = ((SpecUtils::SpecFile const *)arg1)->num_measurements(); + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_detector_type(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + SpecUtils::DetectorType result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::detector_type() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (SpecUtils::DetectorType)((SpecUtils::SpecFile const *)arg1)->detector_type(); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_SpecFile_instrument_type(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::instrument_type() const", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::string *) &((SpecUtils::SpecFile const *)arg1)->instrument_type(); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_SpecFile_manufacturer(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::manufacturer() const", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::string *) &((SpecUtils::SpecFile const *)arg1)->manufacturer(); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_SpecFile_instrument_model(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::instrument_model() const", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::string *) &((SpecUtils::SpecFile const *)arg1)->instrument_model(); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_SpecFile_instrument_id(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::instrument_id() const", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::string *) &((SpecUtils::SpecFile const *)arg1)->instrument_id(); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_measurements(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + SwigValueWrapper< std::vector< std::shared_ptr< SpecUtils::Measurement const > > > result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::measurements() const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = ((SpecUtils::SpecFile const *)arg1)->measurements(); + fresult.cptr = new (std::vector< std::shared_ptr< SpecUtils::Measurement const > >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_measurement__SWIG_0(SwigClassWrapper *farg1, int const *farg2) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + size_t arg2 ; + std::shared_ptr< SpecUtils::Measurement const > result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::measurement(size_t) const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (size_t)(*farg2); + result = ((SpecUtils::SpecFile const *)arg1)->measurement(arg2); + fresult.cptr = result ? (new std::shared_ptr(static_cast< const std::shared_ptr& >(result))) : NULL; + fresult.cmemflags = SWIG_MEM_OWN | SWIG_MEM_RVALUE; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_detectors_analysis(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + SwigValueWrapper< std::shared_ptr< SpecUtils::DetectorAnalysis const > > result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::detectors_analysis() const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = ((SpecUtils::SpecFile const *)arg1)->detectors_analysis(); + fresult.cptr = new (std::shared_ptr< SpecUtils::DetectorAnalysis const >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_multimedia_data(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::vector< std::shared_ptr< SpecUtils::MultimediaData const > > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::multimedia_data() const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::vector< std::shared_ptr< SpecUtils::MultimediaData const > > *) &((SpecUtils::SpecFile const *)arg1)->multimedia_data(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_has_gps_info(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::has_gps_info() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->has_gps_info(); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT double _wrap_SpecFile_mean_latitude(SwigClassWrapper *farg1) { + double fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + double result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::mean_latitude() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (double)((SpecUtils::SpecFile const *)arg1)->mean_latitude(); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_SpecFile_mean_longitude(SwigClassWrapper *farg1) { + double fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + double result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::mean_longitude() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (double)((SpecUtils::SpecFile const *)arg1)->mean_longitude(); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_passthrough(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::passthrough() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->passthrough(); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_contains_derived_data(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::contains_derived_data() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->contains_derived_data(); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_contains_non_derived_data(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::contains_non_derived_data() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->contains_non_derived_data(); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_SpecFile_set_filename(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_filename(std::string const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + (arg1)->set_filename((std::string const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_set_remarks__SWIG_0(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::vector< std::string > *arg2 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_remarks(std::vector< std::string > const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::vector< std::string > const &", "SWIGTYPE_p_std__vectorT_std__string_t", "SpecUtils::SpecFile::set_remarks(std::vector< std::string > const &)", return ); + arg2 = (std::vector< std::string > *)farg2->cptr; + (arg1)->set_remarks((std::vector< std::string > const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_add_remark(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::add_remark(std::string const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + (arg1)->add_remark((std::string const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_set_parse_warnings(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::vector< std::string > *arg2 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_parse_warnings(std::vector< std::string > const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::vector< std::string > const &", "SWIGTYPE_p_std__vectorT_std__string_t", "SpecUtils::SpecFile::set_parse_warnings(std::vector< std::string > const &)", return ); + arg2 = (std::vector< std::string > *)farg2->cptr; + (arg1)->set_parse_warnings((std::vector< std::string > const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_set_uuid(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_uuid(std::string const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + (arg1)->set_uuid((std::string const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_set_lane_number(SwigClassWrapper *farg1, int const *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + int arg2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_lane_number(int const)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (int)(*farg2); + (arg1)->set_lane_number(arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_set_measurement_location_name(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_measurement_location_name(std::string const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + (arg1)->set_measurement_location_name((std::string const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_set_inspection(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_inspection(std::string const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + (arg1)->set_inspection((std::string const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_set_instrument_type(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_instrument_type(std::string const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + (arg1)->set_instrument_type((std::string const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_set_detector_type(SwigClassWrapper *farg1, int const *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + SpecUtils::DetectorType arg2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_detector_type(SpecUtils::DetectorType const)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (SpecUtils::DetectorType)(*farg2); + (arg1)->set_detector_type(arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_set_manufacturer(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_manufacturer(std::string const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + (arg1)->set_manufacturer((std::string const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_set_instrument_model(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_instrument_model(std::string const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + (arg1)->set_instrument_model((std::string const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_set_instrument_id(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_instrument_id(std::string const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + (arg1)->set_instrument_id((std::string const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_set_live_time(SwigClassWrapper *farg1, float const *farg2, SwigClassWrapper const *farg3) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + float arg2 ; + std::shared_ptr< SpecUtils::Measurement const > arg3 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_live_time(float const,std::shared_ptr< SpecUtils::Measurement const >)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (float)(*farg2); + if (farg3->cptr) arg3 = *static_cast*>(farg3->cptr); + (arg1)->set_live_time(arg2,arg3); +} + + +SWIGEXPORT void _wrap_SpecFile_set_real_time(SwigClassWrapper *farg1, float const *farg2, SwigClassWrapper const *farg3) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + float arg2 ; + std::shared_ptr< SpecUtils::Measurement const > arg3 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_real_time(float const,std::shared_ptr< SpecUtils::Measurement const >)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (float)(*farg2); + if (farg3->cptr) arg3 = *static_cast*>(farg3->cptr); + (arg1)->set_real_time(arg2,arg3); +} + + +SWIGEXPORT void _wrap_SpecFile_set_start_time(SwigClassWrapper *farg1, SwigClassWrapper *farg2, SwigClassWrapper const *farg3) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + SpecUtils::time_point_t *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement const > arg3 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_start_time(SpecUtils::time_point_t const &,std::shared_ptr< SpecUtils::Measurement const > const)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "SpecUtils::time_point_t const &", "SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN", "SpecUtils::SpecFile::set_start_time(SpecUtils::time_point_t const &,std::shared_ptr< SpecUtils::Measurement const > const)", return ); + arg2 = (SpecUtils::time_point_t *)farg2->cptr; + if (farg3->cptr) arg3 = *static_cast*>(farg3->cptr); + (arg1)->set_start_time((SpecUtils::time_point_t const &)*arg2,arg3); +} + + +SWIGEXPORT void _wrap_SpecFile_set_remarks__SWIG_1(SwigClassWrapper *farg1, SwigClassWrapper *farg2, SwigClassWrapper const *farg3) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::vector< std::string > *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement const > arg3 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_remarks(std::vector< std::string > const &,std::shared_ptr< SpecUtils::Measurement const > const)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::vector< std::string > const &", "SWIGTYPE_p_std__vectorT_std__string_t", "SpecUtils::SpecFile::set_remarks(std::vector< std::string > const &,std::shared_ptr< SpecUtils::Measurement const > const)", return ); + arg2 = (std::vector< std::string > *)farg2->cptr; + if (farg3->cptr) arg3 = *static_cast*>(farg3->cptr); + (arg1)->set_remarks((std::vector< std::string > const &)*arg2,arg3); +} + + +SWIGEXPORT void _wrap_SpecFile_set_source_type(SwigClassWrapper *farg1, int const *farg2, SwigClassWrapper const *farg3) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + SpecUtils::SourceType arg2 ; + std::shared_ptr< SpecUtils::Measurement const > arg3 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_source_type(SpecUtils::SourceType const,std::shared_ptr< SpecUtils::Measurement const > const)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (SpecUtils::SourceType)(*farg2); + if (farg3->cptr) arg3 = *static_cast*>(farg3->cptr); + (arg1)->set_source_type(arg2,arg3); +} + + +SWIGEXPORT void _wrap_SpecFile_set_position(SwigClassWrapper *farg1, double const *farg2, double const *farg3, SwigClassWrapper *farg4, SwigClassWrapper const *farg5) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + double arg2 ; + double arg3 ; + SpecUtils::time_point_t arg4 ; + std::shared_ptr< SpecUtils::Measurement const > arg5 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_position(double,double,SpecUtils::time_point_t,std::shared_ptr< SpecUtils::Measurement const > const)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (double)(*farg2); + arg3 = (double)(*farg3); + SWIG_check_nonnull(farg4->cptr, "SpecUtils::time_point_t", "SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN", "SpecUtils::SpecFile::set_position(double,double,SpecUtils::time_point_t,std::shared_ptr< SpecUtils::Measurement const > const)", return ); + arg4 = *((SpecUtils::time_point_t *)(farg4->cptr)); + if (farg5->cptr) arg5 = *static_cast*>(farg5->cptr); + (arg1)->set_position(arg2,arg3,arg4,arg5); +} + + +SWIGEXPORT void _wrap_SpecFile_set_title(SwigClassWrapper *farg1, SwigArrayWrapper *farg2, SwigClassWrapper const *farg3) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement const > arg3 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_title(std::string const &,std::shared_ptr< SpecUtils::Measurement const > const)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + if (farg3->cptr) arg3 = *static_cast*>(farg3->cptr); + (arg1)->set_title((std::string const &)*arg2,arg3); +} + + +SWIGEXPORT void _wrap_SpecFile_set_contained_neutrons(SwigClassWrapper *farg1, int const *farg2, float const *farg3, SwigClassWrapper const *farg4, float const *farg5) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + bool arg2 ; + float arg3 ; + std::shared_ptr< SpecUtils::Measurement const > arg4 ; + float arg5 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_contained_neutrons(bool const,float const,std::shared_ptr< SpecUtils::Measurement const > const,float const)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (*farg2 ? true : false); + arg3 = (float)(*farg3); + if (farg4->cptr) arg4 = *static_cast*>(farg4->cptr); + arg5 = (float)(*farg5); + (arg1)->set_contained_neutrons(arg2,arg3,arg4,arg5); +} + + +SWIGEXPORT void _wrap_SpecFile_set_detectors_analysis(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + SpecUtils::DetectorAnalysis *arg2 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_detectors_analysis(SpecUtils::DetectorAnalysis const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "SpecUtils::DetectorAnalysis const &", "DetectorAnalysis", "SpecUtils::SpecFile::set_detectors_analysis(SpecUtils::DetectorAnalysis const &)", return ); + arg2 = (SpecUtils::DetectorAnalysis *)farg2->cptr; + (arg1)->set_detectors_analysis((SpecUtils::DetectorAnalysis const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_change_detector_name(SwigClassWrapper *farg1, SwigArrayWrapper *farg2, SwigArrayWrapper *farg3) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string *arg3 = 0 ; + std::string tempstr2 ; + std::string tempstr3 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::change_detector_name(std::string const &,std::string const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + tempstr3 = std::string(static_cast(farg3->data), farg3->size); + arg3 = &tempstr3; + (arg1)->change_detector_name((std::string const &)*arg2,(std::string const &)*arg3); +} + + +SWIGEXPORT void _wrap_SpecFile_change_sample_numbers(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::vector< std::pair< int,int > > *arg2 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::change_sample_numbers(std::vector< std::pair< int,int > > const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::vector< std::pair< int,int > > const &", "SWIGTYPE_p_std__vectorT_std__pairT_int_int_t_t", "SpecUtils::SpecFile::change_sample_numbers(std::vector< std::pair< int,int > > const &)", return ); + arg2 = (std::vector< std::pair< int,int > > *)farg2->cptr; + (arg1)->change_sample_numbers((std::vector< std::pair< int,int > > const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_add_measurement__SWIG_0(SwigClassWrapper *farg1, SwigClassWrapper const *farg2, int const *farg3) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::shared_ptr< SpecUtils::Measurement > arg2 ; + bool arg3 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::add_measurement(std::shared_ptr< SpecUtils::Measurement >,bool const)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + if (farg2->cptr) arg2 = *static_cast*>(farg2->cptr); + arg3 = (*farg3 ? true : false); + (arg1)->add_measurement(arg2,arg3); +} + + +SWIGEXPORT void _wrap_SpecFile_add_measurement__SWIG_1(SwigClassWrapper *farg1, SwigClassWrapper const *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::shared_ptr< SpecUtils::Measurement > arg2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::add_measurement(std::shared_ptr< SpecUtils::Measurement >)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + if (farg2->cptr) arg2 = *static_cast*>(farg2->cptr); + (arg1)->add_measurement(arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_remove_measurement(SwigClassWrapper *farg1, SwigClassWrapper const *farg2, int const *farg3) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::shared_ptr< SpecUtils::Measurement const > arg2 ; + bool arg3 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::remove_measurement(std::shared_ptr< SpecUtils::Measurement const >,bool const)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + if (farg2->cptr) arg2 = *static_cast*>(farg2->cptr); + arg3 = (*farg3 ? true : false); + (arg1)->remove_measurement(arg2,arg3); +} + + +SWIGEXPORT void _wrap_SpecFile_remove_measurements(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::vector< std::shared_ptr< SpecUtils::Measurement const > > *arg2 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::remove_measurements(std::vector< std::shared_ptr< SpecUtils::Measurement const > > const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::vector< std::shared_ptr< SpecUtils::Measurement const > > const &", "SWIGTYPE_p_std__vectorT_std__shared_ptrT_SpecUtils__MeasurVEY9A", "SpecUtils::SpecFile::remove_measurements(std::vector< std::shared_ptr< SpecUtils::Measurement const > > const &)", return ); + arg2 = (std::vector< std::shared_ptr< SpecUtils::Measurement const > > *)farg2->cptr; + (arg1)->remove_measurements((std::vector< std::shared_ptr< SpecUtils::Measurement const > > const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_clear_multimedia_data(SwigClassWrapper *farg1) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::clear_multimedia_data()", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + (arg1)->clear_multimedia_data(); +} + + +SWIGEXPORT void _wrap_SpecFile_add_multimedia_data(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + SpecUtils::MultimediaData *arg2 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::add_multimedia_data(SpecUtils::MultimediaData const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "SpecUtils::MultimediaData const &", "MultimediaData", "SpecUtils::SpecFile::add_multimedia_data(SpecUtils::MultimediaData const &)", return ); + arg2 = (SpecUtils::MultimediaData *)farg2->cptr; + (arg1)->add_multimedia_data((SpecUtils::MultimediaData const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_set_multimedia_data(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::vector< std::shared_ptr< SpecUtils::MultimediaData const > > *arg2 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_multimedia_data(std::vector< std::shared_ptr< SpecUtils::MultimediaData const > > &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::vector< std::shared_ptr< SpecUtils::MultimediaData const > > &", "SWIGTYPE_p_std__vectorT_std__shared_ptrT_SpecUtils__Multi1X71T7", "SpecUtils::SpecFile::set_multimedia_data(std::vector< std::shared_ptr< SpecUtils::MultimediaData const > > &)", return ); + arg2 = (std::vector< std::shared_ptr< SpecUtils::MultimediaData const > > *)farg2->cptr; + (arg1)->set_multimedia_data(*arg2); +} + + +SWIGEXPORT int _wrap_SpecFile_occupancy_number_from_remarks(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + int result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::occupancy_number_from_remarks() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (int)((SpecUtils::SpecFile const *)arg1)->occupancy_number_from_remarks(); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_sample_measurements(SwigClassWrapper *farg1, int const *farg2) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + int arg2 ; + SwigValueWrapper< std::vector< std::shared_ptr< SpecUtils::Measurement const > > > result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::sample_measurements(int const) const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (int)(*farg2); + result = ((SpecUtils::SpecFile const *)arg1)->sample_measurements(arg2); + fresult.cptr = new (std::vector< std::shared_ptr< SpecUtils::Measurement const > >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_measurement__SWIG_1(SwigClassWrapper *farg1, int const *farg2, SwigArrayWrapper *farg3) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + int arg2 ; + std::string *arg3 = 0 ; + std::string tempstr3 ; + std::shared_ptr< SpecUtils::Measurement const > result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::measurement(int const,std::string const &) const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (int)(*farg2); + tempstr3 = std::string(static_cast(farg3->data), farg3->size); + arg3 = &tempstr3; + result = ((SpecUtils::SpecFile const *)arg1)->measurement(arg2,(std::string const &)*arg3); + fresult.cptr = result ? (new std::shared_ptr(static_cast< const std::shared_ptr& >(result))) : NULL; + fresult.cmemflags = SWIG_MEM_OWN | SWIG_MEM_RVALUE; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_measurement__SWIG_2(SwigClassWrapper *farg1, int const *farg2, int const *farg3) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + int arg2 ; + int arg3 ; + std::shared_ptr< SpecUtils::Measurement const > result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::measurement(int const,int const) const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (int)(*farg2); + arg3 = (int)(*farg3); + result = ((SpecUtils::SpecFile const *)arg1)->measurement(arg2,arg3); + fresult.cptr = result ? (new std::shared_ptr(static_cast< const std::shared_ptr& >(result))) : NULL; + fresult.cmemflags = SWIG_MEM_OWN | SWIG_MEM_RVALUE; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_suggested_sum_energy_calibration(SwigClassWrapper *farg1, SwigClassWrapper *farg2, SwigClassWrapper *farg3) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::set< int,std::less< int >,std::allocator< int > > *arg2 = 0 ; + std::vector< std::string > *arg3 = 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::suggested_sum_energy_calibration(std::set< int,std::less< int >,std::allocator< int > > const &,std::vector< std::string > const &) const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::set< int,std::less< int >,std::allocator< int > > const &", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::suggested_sum_energy_calibration(std::set< int,std::less< int >,std::allocator< int > > const &,std::vector< std::string > const &) const", return SwigClassWrapper_uninitialized()); + arg2 = (std::set< int,std::less< int >,std::allocator< int > > *)farg2->cptr; + SWIG_check_nonnull(farg3->cptr, "std::vector< std::string > const &", "SWIGTYPE_p_std__vectorT_std__string_t", "SpecUtils::SpecFile::suggested_sum_energy_calibration(std::set< int,std::less< int >,std::allocator< int > > const &,std::vector< std::string > const &) const", return SwigClassWrapper_uninitialized()); + arg3 = (std::vector< std::string > *)farg3->cptr; + result = ((SpecUtils::SpecFile const *)arg1)->suggested_sum_energy_calibration((std::set< int,std::less< int >,std::allocator< int > > const &)*arg2,(std::vector< std::string > const &)*arg3); + fresult.cptr = result ? (new std::shared_ptr(static_cast< const std::shared_ptr& >(result))) : NULL; + fresult.cmemflags = SWIG_MEM_OWN | SWIG_MEM_RVALUE; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_sum_measurements(SwigClassWrapper *farg1, SwigClassWrapper *farg2, SwigClassWrapper *farg3, SwigClassWrapper const *farg4) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::set< int,std::less< int >,std::allocator< int > > *arg2 = 0 ; + std::vector< std::string > *arg3 = 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > arg4 ; + std::shared_ptr< SpecUtils::Measurement > result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::sum_measurements(std::set< int,std::less< int >,std::allocator< int > > const &,std::vector< std::string > const &,std::shared_ptr< SpecUtils::EnergyCalibration const >) const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::set< int,std::less< int >,std::allocator< int > > const &", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::sum_measurements(std::set< int,std::less< int >,std::allocator< int > > const &,std::vector< std::string > const &,std::shared_ptr< SpecUtils::EnergyCalibration const >) const", return SwigClassWrapper_uninitialized()); + arg2 = (std::set< int,std::less< int >,std::allocator< int > > *)farg2->cptr; + SWIG_check_nonnull(farg3->cptr, "std::vector< std::string > const &", "SWIGTYPE_p_std__vectorT_std__string_t", "SpecUtils::SpecFile::sum_measurements(std::set< int,std::less< int >,std::allocator< int > > const &,std::vector< std::string > const &,std::shared_ptr< SpecUtils::EnergyCalibration const >) const", return SwigClassWrapper_uninitialized()); + arg3 = (std::vector< std::string > *)farg3->cptr; + if (farg4->cptr) arg4 = *static_cast*>(farg4->cptr); + result = ((SpecUtils::SpecFile const *)arg1)->sum_measurements((std::set< int,std::less< int >,std::allocator< int > > const &)*arg2,(std::vector< std::string > const &)*arg3,arg4); + fresult.cptr = result ? (new std::shared_ptr< SpecUtils::Measurement >(static_cast< const std::shared_ptr< SpecUtils::Measurement >& >(result))) : NULL; + fresult.cmemflags = SWIG_MEM_OWN | SWIG_MEM_RVALUE; + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_memmorysize(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + size_t result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::memmorysize() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = ((SpecUtils::SpecFile const *)arg1)->memmorysize(); + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_gamma_channel_counts(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + SwigValueWrapper< std::set< size_t,std::less< size_t >,std::allocator< size_t > > > result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::gamma_channel_counts() const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = ((SpecUtils::SpecFile const *)arg1)->gamma_channel_counts(); + fresult.cptr = new (std::set< size_t,std::less< size_t >,std::allocator< size_t > >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_num_gamma_channels(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + size_t result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::num_gamma_channels() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = ((SpecUtils::SpecFile const *)arg1)->num_gamma_channels(); + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_keep_n_bin_spectra_only(SwigClassWrapper *farg1, int const *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + size_t arg2 ; + size_t result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::keep_n_bin_spectra_only(size_t)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (size_t)(*farg2); + result = (arg1)->keep_n_bin_spectra_only(arg2); + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_contained_neutron(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::contained_neutron() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->contained_neutron(); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_energy_cal_variants(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + SwigValueWrapper< std::set< std::string,std::less< std::string >,std::allocator< std::string > > > result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::energy_cal_variants() const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = ((SpecUtils::SpecFile const *)arg1)->energy_cal_variants(); + fresult.cptr = new (std::set< std::string,std::less< std::string >,std::allocator< std::string > >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_keep_energy_cal_variants(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::set< std::string,std::less< std::string >,std::allocator< std::string > > *arg2 = 0 ; + size_t result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::keep_energy_cal_variants(std::set< std::string,std::less< std::string >,std::allocator< std::string > > const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::set< std::string,std::less< std::string >,std::allocator< std::string > > const &", "SWIGTYPE_p_std__setT_std__string_std__lessT_std__string_t1Q4VKZ", "SpecUtils::SpecFile::keep_energy_cal_variants(std::set< std::string,std::less< std::string >,std::allocator< std::string > > const &)", return 0); + arg2 = (std::set< std::string,std::less< std::string >,std::allocator< std::string > > *)farg2->cptr; + result = (arg1)->keep_energy_cal_variants((std::set< std::string,std::less< std::string >,std::allocator< std::string > > const &)*arg2); + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_keep_derived_data_variant(SwigClassWrapper *farg1, int const *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + SpecUtils::SpecFile::DerivedVariantToKeep arg2 ; + size_t result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::keep_derived_data_variant(SpecUtils::SpecFile::DerivedVariantToKeep const)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (SpecUtils::SpecFile::DerivedVariantToKeep)(*farg2); + result = (arg1)->keep_derived_data_variant(arg2); + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_remove_detectors_data(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::set< std::string,std::less< std::string >,std::allocator< std::string > > *arg2 = 0 ; + size_t result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::remove_detectors_data(std::set< std::string,std::less< std::string >,std::allocator< std::string > > const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::set< std::string,std::less< std::string >,std::allocator< std::string > > const &", "SWIGTYPE_p_std__setT_std__string_std__lessT_std__string_t1Q4VKZ", "SpecUtils::SpecFile::remove_detectors_data(std::set< std::string,std::less< std::string >,std::allocator< std::string > > const &)", return 0); + arg2 = (std::set< std::string,std::less< std::string >,std::allocator< std::string > > *)farg2->cptr; + result = (arg1)->remove_detectors_data((std::set< std::string,std::less< std::string >,std::allocator< std::string > > const &)*arg2); + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_remove_neutron_measurements(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + size_t result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::remove_neutron_measurements()", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (arg1)->remove_neutron_measurements(); + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_background_sample_number(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + int result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::background_sample_number() const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (int)((SpecUtils::SpecFile const *)arg1)->background_sample_number(); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_SpecFile_generate_psuedo_uuid(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::generate_psuedo_uuid() const", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = ((SpecUtils::SpecFile const *)arg1)->generate_psuedo_uuid(); + fresult.size = (&result)->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, (&result)->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT void _wrap_SpecFile_reset(SwigClassWrapper *farg1) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::reset()", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + (arg1)->reset(); +} + + +SWIGEXPORT int _wrap_SpecFile_load_N42_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_N42_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_N42_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_pcf_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_pcf_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_pcf_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_spc_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_spc_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_spc_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_chn_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_chn_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_chn_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_iaea_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_iaea_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_iaea_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_binary_exploranium_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_binary_exploranium_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_binary_exploranium_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_micro_raider_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_micro_raider_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_micro_raider_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_txt_or_csv_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_txt_or_csv_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_txt_or_csv_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_cnf_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_cnf_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_cnf_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_tracs_mps_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_tracs_mps_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_tracs_mps_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_aram_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_aram_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_aram_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_spectroscopic_daily_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_spectroscopic_daily_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_spectroscopic_daily_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_amptek_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_amptek_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_amptek_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_ortec_listmode_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_ortec_listmode_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_ortec_listmode_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_lsrm_spe_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_lsrm_spe_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_lsrm_spe_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_tka_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_tka_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_tka_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_multiact_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_multiact_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_multiact_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_phd_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_phd_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_phd_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_lzs_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_lzs_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_lzs_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_radiacode_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_radiacode_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_radiacode_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_xml_scan_data_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_xml_scan_data_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_xml_scan_data_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_json_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_json_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_json_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_caen_gxml_file(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_caen_gxml_file(std::string const &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)(arg1)->load_caen_gxml_file((std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_N42(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_N42(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_N42(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_N42(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_N42_from_data__SWIG_0(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + char *arg2 = (char *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_N42_from_data(char *)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (char *)(farg2->data); + result = (bool)(arg1)->load_N42_from_data(arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_N42_from_data__SWIG_1(SwigClassWrapper *farg1, SwigArrayWrapper *farg2, SwigArrayWrapper *farg3) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_N42_from_data(char *,char *)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (char *)(farg2->data); + arg3 = (char *)(farg3->data); + result = (bool)(arg1)->load_N42_from_data(arg2,arg3); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_iaea_spc(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_iaea_spc(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_iaea_spc(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_iaea_spc(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_binary_spc(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_binary_spc(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_binary_spc(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_binary_spc(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_N42_document(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + rapidxml::xml_node< char > *arg2 = (rapidxml::xml_node< char > *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_N42_document(rapidxml::xml_node< char > const *)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (rapidxml::xml_node< char > *)farg2->cptr; + result = (bool)(arg1)->load_from_N42_document((rapidxml::xml_node< char > const *)arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_micro_raider_from_data(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + char *arg2 = (char *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_micro_raider_from_data(char const *)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (char *)(farg2->data); + result = (bool)(arg1)->load_from_micro_raider_from_data((char const *)arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_binary_exploranium(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_binary_exploranium(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_binary_exploranium(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_binary_exploranium(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_pcf(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_pcf(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_pcf(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_pcf(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_txt_or_csv(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_txt_or_csv(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_txt_or_csv(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_txt_or_csv(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_Gr135_txt(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_Gr135_txt(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_Gr135_txt(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_Gr135_txt(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_spectroscopic_daily_file(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_spectroscopic_daily_file(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_spectroscopic_daily_file(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_spectroscopic_daily_file(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_srpm210_csv(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_srpm210_csv(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_srpm210_csv(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_srpm210_csv(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_D3S_raw(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_D3S_raw(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_D3S_raw(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_D3S_raw(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_amptek_mca(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_amptek_mca(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_amptek_mca(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_amptek_mca(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_ortec_listmode(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_ortec_listmode(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_ortec_listmode(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_ortec_listmode(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_lsrm_spe(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_lsrm_spe(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_lsrm_spe(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_lsrm_spe(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_tka(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_tka(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_tka(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_tka(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_multiact(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_multiact(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_multiact(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_multiact(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_phd(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_phd(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_phd(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_phd(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_lzs(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_lzs(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_lzs(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_lzs(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_radiacode(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_radiacode(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_radiacode(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_radiacode(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_radiacode_spectrogram(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_radiacode_spectrogram(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_radiacode_spectrogram(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_radiacode_spectrogram(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_xml_scan_data(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_xml_scan_data(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_xml_scan_data(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_xml_scan_data(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_iaea(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_iaea(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_iaea(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_iaea(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_chn(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_chn(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_chn(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_chn(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_cnf(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_cnf(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_cnf(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_cnf(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_tracs_mps(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_tracs_mps(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_tracs_mps(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_tracs_mps(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_aram(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_aram(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_aram(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_aram(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_json(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_json(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_json(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_json(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_load_from_caen_gxml(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::load_from_caen_gxml(std::istream &)", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::load_from_caen_gxml(std::istream &)", return 0); + arg2 = (std::istream *)farg2->cptr; + result = (bool)(arg1)->load_from_caen_gxml(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT SWIGEXTERN const int _wrap_SpecFile_RebinToCommonBinning = (int)(SpecUtils::SpecFile::RebinToCommonBinning); + +SWIGEXPORT SWIGEXTERN const int _wrap_SpecFile_DontChangeOrReorderSamples = (int)(SpecUtils::SpecFile::DontChangeOrReorderSamples); + +SWIGEXPORT SWIGEXTERN const int _wrap_SpecFile_ReorderSamplesByTime = (int)(SpecUtils::SpecFile::ReorderSamplesByTime); + +SWIGEXPORT SWIGEXTERN const int _wrap_SpecFile_StandardCleanup = (int)(SpecUtils::SpecFile::StandardCleanup); + +SWIGEXPORT void _wrap_SpecFile_cleanup_after_load__SWIG_0(SwigClassWrapper *farg1, int const *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + unsigned int arg2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::cleanup_after_load(unsigned int const)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (unsigned int)(*farg2); + (arg1)->cleanup_after_load(arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_cleanup_after_load__SWIG_1(SwigClassWrapper *farg1) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::cleanup_after_load()", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + (arg1)->cleanup_after_load(); +} + + +SWIGEXPORT void _wrap_SpecFile_recalc_total_counts(SwigClassWrapper *farg1) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::recalc_total_counts()", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + (arg1)->recalc_total_counts(); +} + + +SWIGEXPORT void _wrap_SpecFile_merge_neutron_meas_into_gamma_meas(SwigClassWrapper *farg1) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::merge_neutron_meas_into_gamma_meas()", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + (arg1)->merge_neutron_meas_into_gamma_meas(); +} + + +SWIGEXPORT void _wrap_SpecFile_rebin_measurement(SwigClassWrapper *farg1, SwigClassWrapper const *farg2, SwigClassWrapper const *farg3) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *arg2 = 0 ; + std::shared_ptr< SpecUtils::Measurement const > *arg3 = 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > tempnull2 ; + std::shared_ptr< SpecUtils::Measurement const > tempnull3 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::rebin_measurement(std::shared_ptr< SpecUtils::EnergyCalibration const > const &,std::shared_ptr< SpecUtils::Measurement const > const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = farg2->cptr ? static_cast * >(farg2->cptr) : &tempnull2; + arg3 = farg3->cptr ? static_cast * >(farg3->cptr) : &tempnull3; + (arg1)->rebin_measurement((std::shared_ptr< SpecUtils::EnergyCalibration const > const &)*arg2,(std::shared_ptr< SpecUtils::Measurement const > const &)*arg3); +} + + +SWIGEXPORT void _wrap_SpecFile_rebin_all_measurements(SwigClassWrapper *farg1, SwigClassWrapper const *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *arg2 = 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > tempnull2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::rebin_all_measurements(std::shared_ptr< SpecUtils::EnergyCalibration const > const &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = farg2->cptr ? static_cast * >(farg2->cptr) : &tempnull2; + (arg1)->rebin_all_measurements((std::shared_ptr< SpecUtils::EnergyCalibration const > const &)*arg2); +} + + +SWIGEXPORT void _wrap_SpecFile_set_energy_calibration_from_CALp_file(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::istream *arg2 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::set_energy_calibration_from_CALp_file(std::istream &)", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::istream &", "SWIGTYPE_p_std__istream", "SpecUtils::SpecFile::set_energy_calibration_from_CALp_file(std::istream &)", return ); + arg2 = (std::istream *)farg2->cptr; + (arg1)->set_energy_calibration_from_CALp_file(*arg2); +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_detector_names_to_numbers(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::vector< std::string > *arg2 = 0 ; + SwigValueWrapper< std::set< int,std::less< int >,std::allocator< int > > > result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::detector_names_to_numbers(std::vector< std::string > const &) const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::vector< std::string > const &", "SWIGTYPE_p_std__vectorT_std__string_t", "SpecUtils::SpecFile::detector_names_to_numbers(std::vector< std::string > const &) const", return SwigClassWrapper_uninitialized()); + arg2 = (std::vector< std::string > *)farg2->cptr; + result = ((SpecUtils::SpecFile const *)arg1)->detector_names_to_numbers((std::vector< std::string > const &)*arg2); + fresult.cptr = new (std::set< int,std::less< int >,std::allocator< int > >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT void _wrap_SpecFile_write_to_file__SWIG_0(SwigClassWrapper *farg1, SwigArrayWrapper *farg2, int const *farg3) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string arg2 ; + SpecUtils::SaveSpectrumAsType arg3 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_to_file(std::string const,SpecUtils::SaveSpectrumAsType const) const", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + (&arg2)->assign(static_cast(farg2->data), farg2->size); + arg3 = (SpecUtils::SaveSpectrumAsType)(*farg3); + ((SpecUtils::SpecFile const *)arg1)->write_to_file(arg2,arg3); +} + + +SWIGEXPORT void _wrap_SpecFile_write_to_file__SWIG_1(SwigClassWrapper *farg1, SwigArrayWrapper *farg2, SwigClassWrapper *farg3, SwigClassWrapper *farg4, int const *farg5) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string arg2 ; + SwigValueWrapper< std::set< int,std::less< int >,std::allocator< int > > > arg3 ; + SwigValueWrapper< std::set< int,std::less< int >,std::allocator< int > > > arg4 ; + SpecUtils::SaveSpectrumAsType arg5 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_to_file(std::string const,std::set< int,std::less< int >,std::allocator< int > > const,std::set< int,std::less< int >,std::allocator< int > > const,SpecUtils::SaveSpectrumAsType const) const", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + (&arg2)->assign(static_cast(farg2->data), farg2->size); + SWIG_check_nonnull(farg3->cptr, "std::set< int,std::less< int >,std::allocator< int > >", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_to_file(std::string const,std::set< int,std::less< int >,std::allocator< int > > const,std::set< int,std::less< int >,std::allocator< int > > const,SpecUtils::SaveSpectrumAsType const) const", return ); + arg3 = *((std::set< int,std::less< int >,std::allocator< int > > *)(farg3->cptr)); + SWIG_check_nonnull(farg4->cptr, "std::set< int,std::less< int >,std::allocator< int > >", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_to_file(std::string const,std::set< int,std::less< int >,std::allocator< int > > const,std::set< int,std::less< int >,std::allocator< int > > const,SpecUtils::SaveSpectrumAsType const) const", return ); + arg4 = *((std::set< int,std::less< int >,std::allocator< int > > *)(farg4->cptr)); + arg5 = (SpecUtils::SaveSpectrumAsType)(*farg5); + ((SpecUtils::SpecFile const *)arg1)->write_to_file(arg2,arg3,arg4,arg5); +} + + +SWIGEXPORT void _wrap_SpecFile_write_to_file__SWIG_2(SwigClassWrapper *farg1, SwigArrayWrapper *farg2, SwigClassWrapper *farg3, SwigClassWrapper *farg4, int const *farg5) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string arg2 ; + SwigValueWrapper< std::vector< int > > arg3 ; + SwigValueWrapper< std::vector< int > > arg4 ; + SpecUtils::SaveSpectrumAsType arg5 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_to_file(std::string const,std::vector< int > const,std::vector< int > const,SpecUtils::SaveSpectrumAsType const) const", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + (&arg2)->assign(static_cast(farg2->data), farg2->size); + SWIG_check_nonnull(farg3->cptr, "std::vector< int >", "SWIGTYPE_p_std__vectorT_int_t", "SpecUtils::SpecFile::write_to_file(std::string const,std::vector< int > const,std::vector< int > const,SpecUtils::SaveSpectrumAsType const) const", return ); + arg3 = *((std::vector< int > *)(farg3->cptr)); + SWIG_check_nonnull(farg4->cptr, "std::vector< int >", "SWIGTYPE_p_std__vectorT_int_t", "SpecUtils::SpecFile::write_to_file(std::string const,std::vector< int > const,std::vector< int > const,SpecUtils::SaveSpectrumAsType const) const", return ); + arg4 = *((std::vector< int > *)(farg4->cptr)); + arg5 = (SpecUtils::SaveSpectrumAsType)(*farg5); + ((SpecUtils::SpecFile const *)arg1)->write_to_file(arg2,arg3,arg4,arg5); +} + + +SWIGEXPORT void _wrap_SpecFile_write_to_file__SWIG_3(SwigClassWrapper *farg1, SwigArrayWrapper *farg2, SwigClassWrapper *farg3, SwigClassWrapper *farg4, int const *farg5) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::string *arg2 = 0 ; + std::set< int,std::less< int >,std::allocator< int > > *arg3 = 0 ; + std::vector< std::string > *arg4 = 0 ; + SpecUtils::SaveSpectrumAsType arg5 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_to_file(std::string const &,std::set< int,std::less< int >,std::allocator< int > > const &,std::vector< std::string > const &,SpecUtils::SaveSpectrumAsType const) const", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + SWIG_check_nonnull(farg3->cptr, "std::set< int,std::less< int >,std::allocator< int > > const &", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_to_file(std::string const &,std::set< int,std::less< int >,std::allocator< int > > const &,std::vector< std::string > const &,SpecUtils::SaveSpectrumAsType const) const", return ); + arg3 = (std::set< int,std::less< int >,std::allocator< int > > *)farg3->cptr; + SWIG_check_nonnull(farg4->cptr, "std::vector< std::string > const &", "SWIGTYPE_p_std__vectorT_std__string_t", "SpecUtils::SpecFile::write_to_file(std::string const &,std::set< int,std::less< int >,std::allocator< int > > const &,std::vector< std::string > const &,SpecUtils::SaveSpectrumAsType const) const", return ); + arg4 = (std::vector< std::string > *)farg4->cptr; + arg5 = (SpecUtils::SaveSpectrumAsType)(*farg5); + ((SpecUtils::SpecFile const *)arg1)->write_to_file((std::string const &)*arg2,(std::set< int,std::less< int >,std::allocator< int > > const &)*arg3,(std::vector< std::string > const &)*arg4,arg5); +} + + +SWIGEXPORT void _wrap_SpecFile_write__SWIG_0(SwigClassWrapper *farg1, SwigClassWrapper *farg2, SwigClassWrapper *farg3, SwigClassWrapper *farg4, int const *farg5) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + SwigValueWrapper< std::set< int,std::less< int >,std::allocator< int > > > arg3 ; + SwigValueWrapper< std::set< int,std::less< int >,std::allocator< int > > > arg4 ; + SpecUtils::SaveSpectrumAsType arg5 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const,SpecUtils::SaveSpectrumAsType const) const", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const,SpecUtils::SaveSpectrumAsType const) const", return ); + arg2 = (std::ostream *)farg2->cptr; + SWIG_check_nonnull(farg3->cptr, "std::set< int,std::less< int >,std::allocator< int > >", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const,SpecUtils::SaveSpectrumAsType const) const", return ); + arg3 = *((std::set< int,std::less< int >,std::allocator< int > > *)(farg3->cptr)); + SWIG_check_nonnull(farg4->cptr, "std::set< int,std::less< int >,std::allocator< int > >", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const,SpecUtils::SaveSpectrumAsType const) const", return ); + arg4 = *((std::set< int,std::less< int >,std::allocator< int > > *)(farg4->cptr)); + arg5 = (SpecUtils::SaveSpectrumAsType)(*farg5); + ((SpecUtils::SpecFile const *)arg1)->write(*arg2,arg3,arg4,arg5); +} + + +SWIGEXPORT void _wrap_SpecFile_write__SWIG_1(SwigClassWrapper *farg1, SwigClassWrapper *farg2, SwigClassWrapper *farg3, SwigClassWrapper *farg4, int const *farg5) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + SwigValueWrapper< std::set< int,std::less< int >,std::allocator< int > > > arg3 ; + std::vector< std::string > *arg4 = 0 ; + SpecUtils::SaveSpectrumAsType arg5 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::vector< std::string > const &,SpecUtils::SaveSpectrumAsType const) const", return ); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::vector< std::string > const &,SpecUtils::SaveSpectrumAsType const) const", return ); + arg2 = (std::ostream *)farg2->cptr; + SWIG_check_nonnull(farg3->cptr, "std::set< int,std::less< int >,std::allocator< int > >", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::vector< std::string > const &,SpecUtils::SaveSpectrumAsType const) const", return ); + arg3 = *((std::set< int,std::less< int >,std::allocator< int > > *)(farg3->cptr)); + SWIG_check_nonnull(farg4->cptr, "std::vector< std::string > const &", "SWIGTYPE_p_std__vectorT_std__string_t", "SpecUtils::SpecFile::write(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::vector< std::string > const &,SpecUtils::SaveSpectrumAsType const) const", return ); + arg4 = (std::vector< std::string > *)farg4->cptr; + arg5 = (SpecUtils::SaveSpectrumAsType)(*farg5); + ((SpecUtils::SpecFile const *)arg1)->write(*arg2,arg3,(std::vector< std::string > const &)*arg4,arg5); +} + + +SWIGEXPORT int _wrap_SpecFile_write_pcf(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_pcf(std::ostream &) const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write_pcf(std::ostream &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->write_pcf(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_write_2006_N42(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_2006_N42(std::ostream &) const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write_2006_N42(std::ostream &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->write_2006_N42(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_write_csv(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_csv(std::ostream &) const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write_csv(std::ostream &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->write_csv(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_write_txt(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_txt(std::ostream &) const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write_txt(std::ostream &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->write_txt(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_write_integer_chn__SWIG_0(SwigClassWrapper *farg1, SwigClassWrapper *farg2, SwigClassWrapper *farg3, SwigClassWrapper *farg4) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + SwigValueWrapper< std::set< int,std::less< int >,std::allocator< int > > > arg3 ; + std::set< int,std::less< int >,std::allocator< int > > *arg4 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_integer_chn(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write_integer_chn(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + SWIG_check_nonnull(farg3->cptr, "std::set< int,std::less< int >,std::allocator< int > >", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_integer_chn(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg3 = *((std::set< int,std::less< int >,std::allocator< int > > *)(farg3->cptr)); + SWIG_check_nonnull(farg4->cptr, "std::set< int,std::less< int >,std::allocator< int > > const &", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_integer_chn(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg4 = (std::set< int,std::less< int >,std::allocator< int > > *)farg4->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->write_integer_chn(*arg2,arg3,(std::set< int,std::less< int >,std::allocator< int > > const &)*arg4); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_write_integer_chn__SWIG_1(SwigClassWrapper *farg1, SwigClassWrapper *farg2, SwigClassWrapper *farg3, SwigClassWrapper *farg4) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + SwigValueWrapper< std::set< int,std::less< int >,std::allocator< int > > > arg3 ; + std::vector< std::string > *arg4 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_integer_chn(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::vector< std::string > const &) const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write_integer_chn(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::vector< std::string > const &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + SWIG_check_nonnull(farg3->cptr, "std::set< int,std::less< int >,std::allocator< int > >", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_integer_chn(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::vector< std::string > const &) const", return 0); + arg3 = *((std::set< int,std::less< int >,std::allocator< int > > *)(farg3->cptr)); + SWIG_check_nonnull(farg4->cptr, "std::vector< std::string > const &", "SWIGTYPE_p_std__vectorT_std__string_t", "SpecUtils::SpecFile::write_integer_chn(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::vector< std::string > const &) const", return 0); + arg4 = (std::vector< std::string > *)farg4->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->write_integer_chn(*arg2,arg3,(std::vector< std::string > const &)*arg4); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_write_binary_spc(SwigClassWrapper *farg1, SwigClassWrapper *farg2, int const *farg3, SwigClassWrapper *farg4, SwigClassWrapper *farg5) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + SpecUtils::SpecFile::SpcBinaryType arg3 ; + SwigValueWrapper< std::set< int,std::less< int >,std::allocator< int > > > arg4 ; + std::set< int,std::less< int >,std::allocator< int > > *arg5 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_binary_spc(std::ostream &,SpecUtils::SpecFile::SpcBinaryType const,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write_binary_spc(std::ostream &,SpecUtils::SpecFile::SpcBinaryType const,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + arg3 = (SpecUtils::SpecFile::SpcBinaryType)(*farg3); + SWIG_check_nonnull(farg4->cptr, "std::set< int,std::less< int >,std::allocator< int > >", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_binary_spc(std::ostream &,SpecUtils::SpecFile::SpcBinaryType const,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg4 = *((std::set< int,std::less< int >,std::allocator< int > > *)(farg4->cptr)); + SWIG_check_nonnull(farg5->cptr, "std::set< int,std::less< int >,std::allocator< int > > const &", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_binary_spc(std::ostream &,SpecUtils::SpecFile::SpcBinaryType const,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg5 = (std::set< int,std::less< int >,std::allocator< int > > *)farg5->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->write_binary_spc(*arg2,arg3,arg4,(std::set< int,std::less< int >,std::allocator< int > > const &)*arg5); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_write_ascii_spc(SwigClassWrapper *farg1, SwigClassWrapper *farg2, SwigClassWrapper *farg3, SwigClassWrapper *farg4) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + SwigValueWrapper< std::set< int,std::less< int >,std::allocator< int > > > arg3 ; + std::set< int,std::less< int >,std::allocator< int > > *arg4 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_ascii_spc(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write_ascii_spc(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + SWIG_check_nonnull(farg3->cptr, "std::set< int,std::less< int >,std::allocator< int > >", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_ascii_spc(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg3 = *((std::set< int,std::less< int >,std::allocator< int > > *)(farg3->cptr)); + SWIG_check_nonnull(farg4->cptr, "std::set< int,std::less< int >,std::allocator< int > > const &", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_ascii_spc(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg4 = (std::set< int,std::less< int >,std::allocator< int > > *)farg4->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->write_ascii_spc(*arg2,arg3,(std::set< int,std::less< int >,std::allocator< int > > const &)*arg4); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_write_binary_exploranium_gr130v0(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_binary_exploranium_gr130v0(std::ostream &) const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write_binary_exploranium_gr130v0(std::ostream &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->write_binary_exploranium_gr130v0(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_write_binary_exploranium_gr135v2(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_binary_exploranium_gr135v2(std::ostream &) const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write_binary_exploranium_gr135v2(std::ostream &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->write_binary_exploranium_gr135v2(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_write_iaea_spe(SwigClassWrapper *farg1, SwigClassWrapper *farg2, SwigClassWrapper *farg3, SwigClassWrapper *farg4) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + SwigValueWrapper< std::set< int,std::less< int >,std::allocator< int > > > arg3 ; + std::set< int,std::less< int >,std::allocator< int > > *arg4 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_iaea_spe(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write_iaea_spe(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + SWIG_check_nonnull(farg3->cptr, "std::set< int,std::less< int >,std::allocator< int > >", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_iaea_spe(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg3 = *((std::set< int,std::less< int >,std::allocator< int > > *)(farg3->cptr)); + SWIG_check_nonnull(farg4->cptr, "std::set< int,std::less< int >,std::allocator< int > > const &", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_iaea_spe(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg4 = (std::set< int,std::less< int >,std::allocator< int > > *)farg4->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->write_iaea_spe(*arg2,arg3,(std::set< int,std::less< int >,std::allocator< int > > const &)*arg4); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_write_cnf(SwigClassWrapper *farg1, SwigClassWrapper *farg2, SwigClassWrapper *farg3, SwigClassWrapper *farg4) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + SwigValueWrapper< std::set< int,std::less< int >,std::allocator< int > > > arg3 ; + std::set< int,std::less< int >,std::allocator< int > > *arg4 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_cnf(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write_cnf(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + SWIG_check_nonnull(farg3->cptr, "std::set< int,std::less< int >,std::allocator< int > >", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_cnf(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg3 = *((std::set< int,std::less< int >,std::allocator< int > > *)(farg3->cptr)); + SWIG_check_nonnull(farg4->cptr, "std::set< int,std::less< int >,std::allocator< int > > const &", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_cnf(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg4 = (std::set< int,std::less< int >,std::allocator< int > > *)farg4->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->write_cnf(*arg2,arg3,(std::set< int,std::less< int >,std::allocator< int > > const &)*arg4); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_write_tka(SwigClassWrapper *farg1, SwigClassWrapper *farg2, SwigClassWrapper *farg3, SwigClassWrapper *farg4) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + SwigValueWrapper< std::set< int,std::less< int >,std::allocator< int > > > arg3 ; + std::set< int,std::less< int >,std::allocator< int > > *arg4 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_tka(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write_tka(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + SWIG_check_nonnull(farg3->cptr, "std::set< int,std::less< int >,std::allocator< int > >", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_tka(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg3 = *((std::set< int,std::less< int >,std::allocator< int > > *)(farg3->cptr)); + SWIG_check_nonnull(farg4->cptr, "std::set< int,std::less< int >,std::allocator< int > > const &", "SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2", "SpecUtils::SpecFile::write_tka(std::ostream &,std::set< int,std::less< int >,std::allocator< int > >,std::set< int,std::less< int >,std::allocator< int > > const &) const", return 0); + arg4 = (std::set< int,std::less< int >,std::allocator< int > > *)farg4->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->write_tka(*arg2,arg3,(std::set< int,std::less< int >,std::allocator< int > > const &)*arg4); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_2012N42_VERSION_get() { + int fresult ; + int result; + + result = (int)(5); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_create_2012_N42_xml(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + SwigValueWrapper< std::shared_ptr< ::rapidxml::xml_document< char > > > result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::create_2012_N42_xml() const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = ((SpecUtils::SpecFile const *)arg1)->create_2012_N42_xml(); + fresult.cptr = new (std::shared_ptr< ::rapidxml::xml_document< char > >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_write_2012_N42(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::ostream *arg2 = 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::write_2012_N42(std::ostream &) const", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::SpecFile::write_2012_N42(std::ostream &) const", return 0); + arg2 = (std::ostream *)farg2->cptr; + result = (bool)((SpecUtils::SpecFile const *)arg1)->write_2012_N42(*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_mutex(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + std::recursive_mutex *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile const *", "SpecFile", "SpecUtils::SpecFile::mutex() const", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (std::recursive_mutex *) &((SpecUtils::SpecFile const *)arg1)->mutex(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_SpecFile_measurement_at(SwigClassWrapper *farg1, int const *farg2) { + SwigClassWrapper fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + int arg2 ; + std::shared_ptr< SpecUtils::Measurement const > result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::measurement_at(int)", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + arg2 = (int)(*farg2); + result = SpecUtils_SpecFile_measurement_at(arg1,arg2); + fresult.cptr = result ? (new std::shared_ptr(static_cast< const std::shared_ptr& >(result))) : NULL; + fresult.cmemflags = SWIG_MEM_OWN | SWIG_MEM_RVALUE; + return fresult; +} + + +SWIGEXPORT int _wrap_SpecFile_get_max_channel_count(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + int result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::SpecFile *", "SpecFile", "SpecUtils::SpecFile::get_max_channel_count()", return 0); + arg1 = (SpecUtils::SpecFile *)farg1->cptr; + result = (int)SpecUtils_SpecFile_get_max_channel_count(arg1); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT void _wrap_SpecFile_op_assign__(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::SpecFile *arg1 = (SpecUtils::SpecFile *) 0 ; + SpecUtils::SpecFile *arg2 = 0 ; + + (void)sizeof(arg1); + (void)sizeof(arg2); + SWIG_assign(farg1, *farg2); + +} + + +SWIGEXPORT void _wrap_DetectorAnalysisResult_remark__set(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::remark_", return ); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + if (arg1) (arg1)->remark_ = *arg2; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_DetectorAnalysisResult_remark__get(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::remark_", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + result = (std::string *) & ((arg1)->remark_); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysisResult_nuclide__set(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::nuclide_", return ); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + if (arg1) (arg1)->nuclide_ = *arg2; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_DetectorAnalysisResult_nuclide__get(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::nuclide_", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + result = (std::string *) & ((arg1)->nuclide_); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysisResult_activity__set(SwigClassWrapper *farg1, float const *farg2) { + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + float arg2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::activity_", return ); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + arg2 = (float)(*farg2); + if (arg1) (arg1)->activity_ = arg2; +} + + +SWIGEXPORT float _wrap_DetectorAnalysisResult_activity__get(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + float result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::activity_", return 0); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + result = (float) ((arg1)->activity_); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysisResult_nuclide_type__set(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::nuclide_type_", return ); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + if (arg1) (arg1)->nuclide_type_ = *arg2; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_DetectorAnalysisResult_nuclide_type__get(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::nuclide_type_", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + result = (std::string *) & ((arg1)->nuclide_type_); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysisResult_id_confidence__set(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::id_confidence_", return ); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + if (arg1) (arg1)->id_confidence_ = *arg2; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_DetectorAnalysisResult_id_confidence__get(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::id_confidence_", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + result = (std::string *) & ((arg1)->id_confidence_); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysisResult_distance__set(SwigClassWrapper *farg1, float const *farg2) { + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + float arg2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::distance_", return ); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + arg2 = (float)(*farg2); + if (arg1) (arg1)->distance_ = arg2; +} + + +SWIGEXPORT float _wrap_DetectorAnalysisResult_distance__get(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + float result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::distance_", return 0); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + result = (float) ((arg1)->distance_); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysisResult_dose_rate__set(SwigClassWrapper *farg1, float const *farg2) { + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + float arg2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::dose_rate_", return ); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + arg2 = (float)(*farg2); + if (arg1) (arg1)->dose_rate_ = arg2; +} + + +SWIGEXPORT float _wrap_DetectorAnalysisResult_dose_rate__get(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + float result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::dose_rate_", return 0); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + result = (float) ((arg1)->dose_rate_); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysisResult_real_time__set(SwigClassWrapper *farg1, float const *farg2) { + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + float arg2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::real_time_", return ); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + arg2 = (float)(*farg2); + if (arg1) (arg1)->real_time_ = arg2; +} + + +SWIGEXPORT float _wrap_DetectorAnalysisResult_real_time__get(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + float result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::real_time_", return 0); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + result = (float) ((arg1)->real_time_); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysisResult_detector__set(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::detector_", return ); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + if (arg1) (arg1)->detector_ = *arg2; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_DetectorAnalysisResult_detector__get(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::detector_", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + result = (std::string *) & ((arg1)->detector_); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_DetectorAnalysisResult() { + SwigClassWrapper fresult ; + SpecUtils::DetectorAnalysisResult *result = 0 ; + + result = (SpecUtils::DetectorAnalysisResult *)new SpecUtils::DetectorAnalysisResult(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysisResult_reset(SwigClassWrapper *farg1) { + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::reset()", return ); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + (arg1)->reset(); +} + + +SWIGEXPORT int _wrap_DetectorAnalysisResult_isEmpty(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysisResult const *", "DetectorAnalysisResult", "SpecUtils::DetectorAnalysisResult::isEmpty() const", return 0); + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + result = (bool)((SpecUtils::DetectorAnalysisResult const *)arg1)->isEmpty(); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_delete_DetectorAnalysisResult(SwigClassWrapper *farg1) { + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + + arg1 = (SpecUtils::DetectorAnalysisResult *)farg1->cptr; + delete arg1; +} + + +SWIGEXPORT void _wrap_DetectorAnalysisResult_op_assign__(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::DetectorAnalysisResult *arg1 = (SpecUtils::DetectorAnalysisResult *) 0 ; + SpecUtils::DetectorAnalysisResult *arg2 = 0 ; + + (void)sizeof(arg1); + (void)sizeof(arg2); + SWIG_assign(farg1, *farg2); + +} + + +SWIGEXPORT void _wrap_DetectorAnalysis_remarks__set(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + std::vector< std::string > *arg2 = (std::vector< std::string > *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::remarks_", return ); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + arg2 = (std::vector< std::string > *)farg2->cptr; + if (arg1) (arg1)->remarks_ = *arg2; +} + + +SWIGEXPORT SwigClassWrapper _wrap_DetectorAnalysis_remarks__get(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + std::vector< std::string > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::remarks_", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + result = (std::vector< std::string > *)& ((arg1)->remarks_); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysis_algorithm_name__set(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::algorithm_name_", return ); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + if (arg1) (arg1)->algorithm_name_ = *arg2; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_DetectorAnalysis_algorithm_name__get(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::algorithm_name_", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + result = (std::string *) & ((arg1)->algorithm_name_); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysis_algorithm_component_versions__set(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + std::vector< std::pair< std::string,std::string > > *arg2 = (std::vector< std::pair< std::string,std::string > > *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::algorithm_component_versions_", return ); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + arg2 = (std::vector< std::pair< std::string,std::string > > *)farg2->cptr; + if (arg1) (arg1)->algorithm_component_versions_ = *arg2; +} + + +SWIGEXPORT SwigClassWrapper _wrap_DetectorAnalysis_algorithm_component_versions__get(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + std::vector< std::pair< std::string,std::string > > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::algorithm_component_versions_", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + result = (std::vector< std::pair< std::string,std::string > > *)& ((arg1)->algorithm_component_versions_); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysis_algorithm_creator__set(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::algorithm_creator_", return ); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + if (arg1) (arg1)->algorithm_creator_ = *arg2; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_DetectorAnalysis_algorithm_creator__get(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::algorithm_creator_", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + result = (std::string *) & ((arg1)->algorithm_creator_); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysis_algorithm_description__set(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::algorithm_description_", return ); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + if (arg1) (arg1)->algorithm_description_ = *arg2; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_DetectorAnalysis_algorithm_description__get(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::algorithm_description_", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + result = (std::string *) & ((arg1)->algorithm_description_); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysis_analysis_start_time__set(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + SpecUtils::time_point_t arg2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::analysis_start_time_", return ); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "SpecUtils::time_point_t", "SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN", "SpecUtils::DetectorAnalysis::analysis_start_time_", return ); + arg2 = *((SpecUtils::time_point_t *)(farg2->cptr)); + if (arg1) (arg1)->analysis_start_time_ = arg2; +} + + +SWIGEXPORT SwigClassWrapper _wrap_DetectorAnalysis_analysis_start_time__get(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + SpecUtils::time_point_t result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::analysis_start_time_", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + result = ((arg1)->analysis_start_time_); + fresult.cptr = new (SpecUtils::time_point_t)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysis_analysis_computation_duration__set(SwigClassWrapper *farg1, float const *farg2) { + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + float arg2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::analysis_computation_duration_", return ); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + arg2 = (float)(*farg2); + if (arg1) (arg1)->analysis_computation_duration_ = arg2; +} + + +SWIGEXPORT float _wrap_DetectorAnalysis_analysis_computation_duration__get(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + float result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::analysis_computation_duration_", return 0); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + result = (float) ((arg1)->analysis_computation_duration_); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysis_algorithm_result_description__set(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::algorithm_result_description_", return ); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + if (arg1) (arg1)->algorithm_result_description_ = *arg2; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_DetectorAnalysis_algorithm_result_description__get(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::algorithm_result_description_", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + result = (std::string *) & ((arg1)->algorithm_result_description_); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysis_results__set(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + std::vector< SpecUtils::DetectorAnalysisResult > *arg2 = (std::vector< SpecUtils::DetectorAnalysisResult > *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::results_", return ); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + arg2 = (std::vector< SpecUtils::DetectorAnalysisResult > *)farg2->cptr; + if (arg1) (arg1)->results_ = *arg2; +} + + +SWIGEXPORT SwigClassWrapper _wrap_DetectorAnalysis_results__get(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + std::vector< SpecUtils::DetectorAnalysisResult > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::results_", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + result = (std::vector< SpecUtils::DetectorAnalysisResult > *)& ((arg1)->results_); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_DetectorAnalysis() { + SwigClassWrapper fresult ; + SpecUtils::DetectorAnalysis *result = 0 ; + + result = (SpecUtils::DetectorAnalysis *)new SpecUtils::DetectorAnalysis(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_DetectorAnalysis_reset(SwigClassWrapper *farg1) { + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::reset()", return ); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + (arg1)->reset(); +} + + +SWIGEXPORT int _wrap_DetectorAnalysis_is_empty(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::DetectorAnalysis const *", "DetectorAnalysis", "SpecUtils::DetectorAnalysis::is_empty() const", return 0); + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + result = (bool)((SpecUtils::DetectorAnalysis const *)arg1)->is_empty(); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_delete_DetectorAnalysis(SwigClassWrapper *farg1) { + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + + arg1 = (SpecUtils::DetectorAnalysis *)farg1->cptr; + delete arg1; +} + + +SWIGEXPORT void _wrap_DetectorAnalysis_op_assign__(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::DetectorAnalysis *arg1 = (SpecUtils::DetectorAnalysis *) 0 ; + SpecUtils::DetectorAnalysis *arg2 = 0 ; + + (void)sizeof(arg1); + (void)sizeof(arg2); + SWIG_assign(farg1, *farg2); + +} + + +SWIGEXPORT void _wrap_MultimediaData_remark__set(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::MultimediaData *", "MultimediaData", "SpecUtils::MultimediaData::remark_", return ); + arg1 = (SpecUtils::MultimediaData *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + if (arg1) (arg1)->remark_ = *arg2; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_MultimediaData_remark__get(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::MultimediaData *", "MultimediaData", "SpecUtils::MultimediaData::remark_", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::MultimediaData *)farg1->cptr; + result = (std::string *) & ((arg1)->remark_); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT void _wrap_MultimediaData_descriptions__set(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::MultimediaData *", "MultimediaData", "SpecUtils::MultimediaData::descriptions_", return ); + arg1 = (SpecUtils::MultimediaData *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + if (arg1) (arg1)->descriptions_ = *arg2; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_MultimediaData_descriptions__get(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::MultimediaData *", "MultimediaData", "SpecUtils::MultimediaData::descriptions_", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::MultimediaData *)farg1->cptr; + result = (std::string *) & ((arg1)->descriptions_); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT void _wrap_MultimediaData_data__set(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + std::vector< char > *arg2 = (std::vector< char > *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::MultimediaData *", "MultimediaData", "SpecUtils::MultimediaData::data_", return ); + arg1 = (SpecUtils::MultimediaData *)farg1->cptr; + arg2 = (std::vector< char > *)farg2->cptr; + if (arg1) (arg1)->data_ = *arg2; +} + + +SWIGEXPORT SwigClassWrapper _wrap_MultimediaData_data__get(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + std::vector< char > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::MultimediaData *", "MultimediaData", "SpecUtils::MultimediaData::data_", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::MultimediaData *)farg1->cptr; + result = (std::vector< char > *)& ((arg1)->data_); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_MultimediaData_data_encoding__set(SwigClassWrapper *farg1, int const *farg2) { + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + SpecUtils::MultimediaData::EncodingType arg2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::MultimediaData *", "MultimediaData", "SpecUtils::MultimediaData::data_encoding_", return ); + arg1 = (SpecUtils::MultimediaData *)farg1->cptr; + arg2 = (SpecUtils::MultimediaData::EncodingType)(*farg2); + if (arg1) (arg1)->data_encoding_ = arg2; +} + + +SWIGEXPORT int _wrap_MultimediaData_data_encoding__get(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + SpecUtils::MultimediaData::EncodingType result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::MultimediaData *", "MultimediaData", "SpecUtils::MultimediaData::data_encoding_", return 0); + arg1 = (SpecUtils::MultimediaData *)farg1->cptr; + result = (SpecUtils::MultimediaData::EncodingType) ((arg1)->data_encoding_); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT void _wrap_MultimediaData_capture_start_time__set(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + SpecUtils::time_point_t arg2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::MultimediaData *", "MultimediaData", "SpecUtils::MultimediaData::capture_start_time_", return ); + arg1 = (SpecUtils::MultimediaData *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "SpecUtils::time_point_t", "SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN", "SpecUtils::MultimediaData::capture_start_time_", return ); + arg2 = *((SpecUtils::time_point_t *)(farg2->cptr)); + if (arg1) (arg1)->capture_start_time_ = arg2; +} + + +SWIGEXPORT SwigClassWrapper _wrap_MultimediaData_capture_start_time__get(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + SpecUtils::time_point_t result; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::MultimediaData *", "MultimediaData", "SpecUtils::MultimediaData::capture_start_time_", return SwigClassWrapper_uninitialized()); + arg1 = (SpecUtils::MultimediaData *)farg1->cptr; + result = ((arg1)->capture_start_time_); + fresult.cptr = new (SpecUtils::time_point_t)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT void _wrap_MultimediaData_file_uri__set(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::MultimediaData *", "MultimediaData", "SpecUtils::MultimediaData::file_uri_", return ); + arg1 = (SpecUtils::MultimediaData *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + if (arg1) (arg1)->file_uri_ = *arg2; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_MultimediaData_file_uri__get(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::MultimediaData *", "MultimediaData", "SpecUtils::MultimediaData::file_uri_", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::MultimediaData *)farg1->cptr; + result = (std::string *) & ((arg1)->file_uri_); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT void _wrap_MultimediaData_mime_type__set(SwigClassWrapper *farg1, SwigArrayWrapper *farg2) { + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + std::string *arg2 = 0 ; + std::string tempstr2 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::MultimediaData *", "MultimediaData", "SpecUtils::MultimediaData::mime_type_", return ); + arg1 = (SpecUtils::MultimediaData *)farg1->cptr; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + if (arg1) (arg1)->mime_type_ = *arg2; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_MultimediaData_mime_type__get(SwigClassWrapper *farg1) { + SwigArrayWrapper fresult ; + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + std::string *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "SpecUtils::MultimediaData *", "MultimediaData", "SpecUtils::MultimediaData::mime_type_", return SwigArrayWrapper_uninitialized()); + arg1 = (SpecUtils::MultimediaData *)farg1->cptr; + result = (std::string *) & ((arg1)->mime_type_); + fresult.size = result->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, result->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_MultimediaData() { + SwigClassWrapper fresult ; + SpecUtils::MultimediaData *result = 0 ; + + result = (SpecUtils::MultimediaData *)new SpecUtils::MultimediaData(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_delete_MultimediaData(SwigClassWrapper *farg1) { + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + + arg1 = (SpecUtils::MultimediaData *)farg1->cptr; + delete arg1; +} + + +SWIGEXPORT void _wrap_MultimediaData_op_assign__(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::MultimediaData *arg1 = (SpecUtils::MultimediaData *) 0 ; + SpecUtils::MultimediaData *arg2 = 0 ; + + (void)sizeof(arg1); + (void)sizeof(arg2); + SWIG_assign(farg1, *farg2); + +} + + +SWIGEXPORT int _wrap_pcf_det_name_to_dev_pair_index(SwigArrayWrapper *farg1, int *farg2, int *farg3, int *farg4) { + int fresult ; + std::string arg1 ; + int *arg2 = 0 ; + int *arg3 = 0 ; + int *arg4 = 0 ; + int result; + + (&arg1)->assign(static_cast(farg1->data), farg1->size); + arg2 = (int *)(farg2); + arg3 = (int *)(farg3); + arg4 = (int *)(farg4); + result = (int)SpecUtils::pcf_det_name_to_dev_pair_index(SWIG_STD_MOVE(arg1),*arg2,*arg3,*arg4); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_DevPair__SWIG_0() { + SwigClassWrapper fresult ; + std::pair< float,float > *result = 0 ; + + result = (std::pair< float,float > *)new std::pair< float,float >(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_DevPair__SWIG_1(float const *farg1, float const *farg2) { + SwigClassWrapper fresult ; + float arg1 ; + float arg2 ; + std::pair< float,float > *result = 0 ; + + arg1 = (float)(*farg1); + arg2 = (float)(*farg2); + result = (std::pair< float,float > *)new std::pair< float,float >(arg1,arg2); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_DevPair__SWIG_2(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + std::pair< float,float > *arg1 = 0 ; + std::pair< float,float > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::pair< float,float > const &", "DevPair", "std::pair< float,float >::pair(std::pair< float,float > const &)", return SwigClassWrapper_uninitialized()); + arg1 = (std::pair< float,float > *)farg1->cptr; + result = (std::pair< float,float > *)new std::pair< float,float >((std::pair< float,float > const &)*arg1); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_DevPair_first_set(SwigClassWrapper *farg1, float const *farg2) { + std::pair< float,float > *arg1 = (std::pair< float,float > *) 0 ; + float arg2 ; + + SWIG_check_nonnull(farg1->cptr, "std::pair< float,float > *", "DevPair", "std::pair< float,float >::first", return ); + arg1 = (std::pair< float,float > *)farg1->cptr; + arg2 = (float)(*farg2); + if (arg1) (arg1)->first = arg2; +} + + +SWIGEXPORT float _wrap_DevPair_first_get(SwigClassWrapper *farg1) { + float fresult ; + std::pair< float,float > *arg1 = (std::pair< float,float > *) 0 ; + float result; + + SWIG_check_nonnull(farg1->cptr, "std::pair< float,float > *", "DevPair", "std::pair< float,float >::first", return 0); + arg1 = (std::pair< float,float > *)farg1->cptr; + result = (float) ((arg1)->first); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT void _wrap_DevPair_second_set(SwigClassWrapper *farg1, float const *farg2) { + std::pair< float,float > *arg1 = (std::pair< float,float > *) 0 ; + float arg2 ; + + SWIG_check_nonnull(farg1->cptr, "std::pair< float,float > *", "DevPair", "std::pair< float,float >::second", return ); + arg1 = (std::pair< float,float > *)farg1->cptr; + arg2 = (float)(*farg2); + if (arg1) (arg1)->second = arg2; +} + + +SWIGEXPORT float _wrap_DevPair_second_get(SwigClassWrapper *farg1) { + float fresult ; + std::pair< float,float > *arg1 = (std::pair< float,float > *) 0 ; + float result; + + SWIG_check_nonnull(farg1->cptr, "std::pair< float,float > *", "DevPair", "std::pair< float,float >::second", return 0); + arg1 = (std::pair< float,float > *)farg1->cptr; + result = (float) ((arg1)->second); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT void _wrap_delete_DevPair(SwigClassWrapper *farg1) { + std::pair< float,float > *arg1 = (std::pair< float,float > *) 0 ; + + arg1 = (std::pair< float,float > *)farg1->cptr; + delete arg1; +} + + +SWIGEXPORT void _wrap_DevPair_op_assign__(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + std::pair< float,float > *arg1 = (std::pair< float,float > *) 0 ; + std::pair< float,float > *arg2 = 0 ; + + (void)sizeof(arg1); + (void)sizeof(arg2); + SWIG_assign, SWIGPOLICY_std_pair_Sl__Sp_float_Sc_float_SP__Sg_>(farg1, *farg2); + +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_DeviationPairs__SWIG_0() { + SwigClassWrapper fresult ; + std::vector< std::pair< float,float > > *result = 0 ; + + result = (std::vector< std::pair< float,float > > *)new std::vector< std::pair< float,float > >(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_DeviationPairs__SWIG_1(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + std::vector< std::pair< float,float > > *arg1 = 0 ; + std::vector< std::pair< float,float > > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "std::vector< std::pair< float,float > >::vector(std::vector< std::pair< float,float > > const &)", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + result = (std::vector< std::pair< float,float > > *)new std::vector< std::pair< float,float > >((std::vector< std::pair< float,float > > const &)*arg1); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_DeviationPairs__SWIG_2(int const *farg1) { + SwigClassWrapper fresult ; + std::vector< std::pair< float,float > >::size_type arg1 ; + std::vector< std::pair< float,float > > *result = 0 ; + + arg1 = (std::vector< std::pair< float,float > >::size_type)(*farg1); + result = (std::vector< std::pair< float,float > > *)new std::vector< std::pair< float,float > >(arg1); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_DeviationPairs__SWIG_3(int const *farg1, SwigClassWrapper *farg2) { + SwigClassWrapper fresult ; + std::vector< std::pair< float,float > >::size_type arg1 ; + std::pair< float,float > *arg2 = 0 ; + std::vector< std::pair< float,float > > *result = 0 ; + + arg1 = (std::vector< std::pair< float,float > >::size_type)(*farg1); + SWIG_check_nonnull(farg2->cptr, "std::pair< float,float > const &", "DevPair", "std::vector< std::pair< float,float > >::vector(std::vector< std::pair< float,float > >::size_type,std::pair< float,float > const &)", return SwigClassWrapper_uninitialized()); + arg2 = (std::pair< float,float > *)farg2->cptr; + result = (std::vector< std::pair< float,float > > *)new std::vector< std::pair< float,float > >(arg1,(std::pair< float,float > const &)*arg2); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (1 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_DeviationPairs_size(SwigClassWrapper *farg1) { + int fresult ; + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::vector< std::pair< float,float > >::size_type result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > const *", "DeviationPairs", "std::vector< std::pair< float,float > >::size() const", return 0); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + result = ((std::vector< std::pair< float,float > > const *)arg1)->size(); + fresult = (std::vector< std::pair< float,float > >::size_type)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_DeviationPairs_capacity(SwigClassWrapper *farg1) { + int fresult ; + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::vector< std::pair< float,float > >::size_type result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > const *", "DeviationPairs", "std::vector< std::pair< float,float > >::capacity() const", return 0); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + result = ((std::vector< std::pair< float,float > > const *)arg1)->capacity(); + fresult = (std::vector< std::pair< float,float > >::size_type)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_DeviationPairs_empty(SwigClassWrapper *farg1) { + int fresult ; + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > const *", "DeviationPairs", "std::vector< std::pair< float,float > >::empty() const", return 0); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + result = (bool)((std::vector< std::pair< float,float > > const *)arg1)->empty(); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_DeviationPairs_front(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::pair< float,float > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > const *", "DeviationPairs", "std::vector< std::pair< float,float > >::front() const", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + result = (std::pair< float,float > *) &((std::vector< std::pair< float,float > > const *)arg1)->front(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_DeviationPairs_back(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::pair< float,float > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > const *", "DeviationPairs", "std::vector< std::pair< float,float > >::back() const", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + result = (std::pair< float,float > *) &((std::vector< std::pair< float,float > > const *)arg1)->back(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_DeviationPairs_reserve(SwigClassWrapper *farg1, int const *farg2) { + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::vector< std::pair< float,float > >::size_type arg2 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > *", "DeviationPairs", "std::vector< std::pair< float,float > >::reserve(std::vector< std::pair< float,float > >::size_type)", return ); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + arg2 = (std::vector< std::pair< float,float > >::size_type)(*farg2); + (arg1)->reserve(arg2); +} + + +SWIGEXPORT void _wrap_DeviationPairs_resize__SWIG_0(SwigClassWrapper *farg1, int const *farg2) { + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::vector< std::pair< float,float > >::size_type arg2 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > *", "DeviationPairs", "std::vector< std::pair< float,float > >::resize(std::vector< std::pair< float,float > >::size_type)", return ); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + arg2 = (std::vector< std::pair< float,float > >::size_type)(*farg2); + (arg1)->resize(arg2); +} + + +SWIGEXPORT void _wrap_DeviationPairs_resize__SWIG_1(SwigClassWrapper *farg1, int const *farg2, SwigClassWrapper *farg3) { + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::vector< std::pair< float,float > >::size_type arg2 ; + std::pair< float,float > *arg3 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > *", "DeviationPairs", "std::vector< std::pair< float,float > >::resize(std::vector< std::pair< float,float > >::size_type,std::pair< float,float > const &)", return ); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + arg2 = (std::vector< std::pair< float,float > >::size_type)(*farg2); + SWIG_check_nonnull(farg3->cptr, "std::pair< float,float > const &", "DevPair", "std::vector< std::pair< float,float > >::resize(std::vector< std::pair< float,float > >::size_type,std::pair< float,float > const &)", return ); + arg3 = (std::pair< float,float > *)farg3->cptr; + (arg1)->resize(arg2,(std::pair< float,float > const &)*arg3); +} + + +SWIGEXPORT void _wrap_DeviationPairs_push_back(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::pair< float,float > *arg2 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > *", "DeviationPairs", "std::vector< std::pair< float,float > >::push_back(std::pair< float,float > const &)", return ); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::pair< float,float > const &", "DevPair", "std::vector< std::pair< float,float > >::push_back(std::pair< float,float > const &)", return ); + arg2 = (std::pair< float,float > *)farg2->cptr; + (arg1)->push_back((std::pair< float,float > const &)*arg2); +} + + +SWIGEXPORT void _wrap_DeviationPairs_pop_back(SwigClassWrapper *farg1) { + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > *", "DeviationPairs", "std::vector< std::pair< float,float > >::pop_back()", return ); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + (arg1)->pop_back(); +} + + +SWIGEXPORT void _wrap_DeviationPairs_clear(SwigClassWrapper *farg1) { + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > *", "DeviationPairs", "std::vector< std::pair< float,float > >::clear()", return ); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + (arg1)->clear(); +} + + +SWIGEXPORT void _wrap_DeviationPairs_set(SwigClassWrapper *farg1, int const *farg2, SwigClassWrapper *farg3) { + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::vector< std::pair< float,float > >::size_type arg2 ; + std::pair< float,float > *arg3 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > *", "DeviationPairs", "std::vector< std::pair< float,float > >::set(std::vector< std::pair< float,float > >::size_type,std::pair< float,float > const &)", return ); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + arg2 = *farg2 - 1; + SWIG_check_nonnull(farg3->cptr, "std::pair< float,float > const &", "DevPair", "std::vector< std::pair< float,float > >::set(std::vector< std::pair< float,float > >::size_type,std::pair< float,float > const &)", return ); + arg3 = (std::pair< float,float > *)farg3->cptr; + std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__set(arg1,SWIG_STD_MOVE(arg2),(std::pair< float,float > const &)*arg3); +} + + +SWIGEXPORT SwigClassWrapper _wrap_DeviationPairs_get(SwigClassWrapper *farg1, int const *farg2) { + SwigClassWrapper fresult ; + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::vector< std::pair< float,float > >::size_type arg2 ; + std::pair< float,float > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > *", "DeviationPairs", "std::vector< std::pair< float,float > >::get(std::vector< std::pair< float,float > >::size_type)", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + arg2 = *farg2 - 1; + result = (std::pair< float,float > *) &std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__get(arg1,SWIG_STD_MOVE(arg2)); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_DeviationPairs_insert(SwigClassWrapper *farg1, int const *farg2, SwigClassWrapper *farg3) { + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::vector< std::pair< float,float > >::size_type arg2 ; + std::pair< float,float > *arg3 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > *", "DeviationPairs", "std::vector< std::pair< float,float > >::insert(std::vector< std::pair< float,float > >::size_type,std::pair< float,float > const &)", return ); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + arg2 = *farg2 - 1; + SWIG_check_nonnull(farg3->cptr, "std::pair< float,float > const &", "DevPair", "std::vector< std::pair< float,float > >::insert(std::vector< std::pair< float,float > >::size_type,std::pair< float,float > const &)", return ); + arg3 = (std::pair< float,float > *)farg3->cptr; + std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__insert(arg1,SWIG_STD_MOVE(arg2),(std::pair< float,float > const &)*arg3); +} + + +SWIGEXPORT void _wrap_DeviationPairs_erase__SWIG_0(SwigClassWrapper *farg1, int const *farg2) { + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::vector< std::pair< float,float > >::size_type arg2 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > *", "DeviationPairs", "std::vector< std::pair< float,float > >::erase(std::vector< std::pair< float,float > >::size_type)", return ); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + arg2 = *farg2 - 1; + std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__erase__SWIG_0(arg1,SWIG_STD_MOVE(arg2)); +} + + +SWIGEXPORT void _wrap_DeviationPairs_erase__SWIG_1(SwigClassWrapper *farg1, int const *farg2, int const *farg3) { + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::vector< std::pair< float,float > >::size_type arg2 ; + std::vector< std::pair< float,float > >::size_type arg3 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > *", "DeviationPairs", "std::vector< std::pair< float,float > >::erase(std::vector< std::pair< float,float > >::size_type,std::vector< std::pair< float,float > >::size_type)", return ); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + arg2 = *farg2 - 1; + arg3 = *farg3 - 1; + std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__erase__SWIG_1(arg1,SWIG_STD_MOVE(arg2),SWIG_STD_MOVE(arg3)); +} + + +SWIGEXPORT SwigClassWrapper _wrap_DeviationPairs_front_ref(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::pair< float,float > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > *", "DeviationPairs", "std::vector< std::pair< float,float > >::front_ref()", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + result = (std::pair< float,float > *) &std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__front_ref(arg1); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_DeviationPairs_back_ref(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::pair< float,float > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > *", "DeviationPairs", "std::vector< std::pair< float,float > >::back_ref()", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + result = (std::pair< float,float > *) &std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__back_ref(arg1); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_DeviationPairs_get_ref(SwigClassWrapper *farg1, int const *farg2) { + SwigClassWrapper fresult ; + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::vector< std::pair< float,float > >::size_type arg2 ; + std::pair< float,float > *result = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< std::pair< float,float > > *", "DeviationPairs", "std::vector< std::pair< float,float > >::get_ref(std::vector< std::pair< float,float > >::size_type)", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + arg2 = *farg2 - 1; + result = (std::pair< float,float > *) &std_vector_Sl_std_pair_Sl_float_Sc_float_Sg__Sg__get_ref(arg1,SWIG_STD_MOVE(arg2)); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_delete_DeviationPairs(SwigClassWrapper *farg1) { + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + + arg1 = (std::vector< std::pair< float,float > > *)farg1->cptr; + delete arg1; +} + + +SWIGEXPORT void _wrap_DeviationPairs_op_assign__(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + std::vector< std::pair< float,float > > *arg1 = (std::vector< std::pair< float,float > > *) 0 ; + std::vector< std::pair< float,float > > *arg2 = 0 ; + + (void)sizeof(arg1); + (void)sizeof(arg2); + SWIG_assign >, SWIGPOLICY_std_vector_Sl__Sp_std_pair_Sl__Sp_float_Sc_float_SP__Sg__SP__Sg_>(farg1, *farg2); + +} + + +SWIGEXPORT int _wrap_EnergyCalibration_type(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *smartarg1 ; + SpecUtils::EnergyCalType result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + result = (SpecUtils::EnergyCalType)((SpecUtils::EnergyCalibration const *)arg1)->type(); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_EnergyCalibration_valid(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *smartarg1 ; + bool result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + result = (bool)((SpecUtils::EnergyCalibration const *)arg1)->valid(); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_EnergyCalibration_coefficients(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *smartarg1 ; + std::vector< float > *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + result = (std::vector< float > *) &((SpecUtils::EnergyCalibration const *)arg1)->coefficients(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_EnergyCalibration_deviation_pairs(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *smartarg1 ; + std::vector< std::pair< float,float > > *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + result = (std::vector< std::pair< float,float > > *) &((SpecUtils::EnergyCalibration const *)arg1)->deviation_pairs(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_EnergyCalibration_channel_energies(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *smartarg1 ; + std::shared_ptr< std::vector< float > const > *result = 0 ; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + result = (std::shared_ptr< std::vector< float > const > *) &((SpecUtils::EnergyCalibration const *)arg1)->channel_energies(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_EnergyCalibration_num_channels(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *smartarg1 ; + size_t result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + result = ((SpecUtils::EnergyCalibration const *)arg1)->num_channels(); + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_new_EnergyCalibration() { + SwigClassWrapper fresult ; + SpecUtils::EnergyCalibration *result = 0 ; + + result = (SpecUtils::EnergyCalibration *)new SpecUtils::EnergyCalibration(); + fresult.cptr = result ? new std::shared_ptr< SpecUtils::EnergyCalibration >(result SWIG_NO_NULL_DELETER_1) : NULL; + fresult.cmemflags = SWIG_MEM_OWN | SWIG_MEM_RVALUE; + return fresult; +} + + +SWIGEXPORT void _wrap_EnergyCalibration_set_polynomial(SwigClassWrapper *farg1, int const *farg2, SwigClassWrapper *farg3, SwigClassWrapper *farg4) { + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + size_t arg2 ; + std::vector< float > *arg3 = 0 ; + std::vector< std::pair< float,float > > *arg4 = 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::EnergyCalibration >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + arg2 = (size_t)(*farg2); + SWIG_check_nonnull(farg3->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::EnergyCalibration::set_polynomial(size_t const,std::vector< float > const &,std::vector< std::pair< float,float > > const &)", return ); + arg3 = (std::vector< float > *)farg3->cptr; + SWIG_check_nonnull(farg4->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::EnergyCalibration::set_polynomial(size_t const,std::vector< float > const &,std::vector< std::pair< float,float > > const &)", return ); + arg4 = (std::vector< std::pair< float,float > > *)farg4->cptr; + (arg1)->set_polynomial(arg2,(std::vector< float > const &)*arg3,(std::vector< std::pair< float,float > > const &)*arg4); +} + + +SWIGEXPORT void _wrap_EnergyCalibration_set_default_polynomial(SwigClassWrapper *farg1, int const *farg2, SwigClassWrapper *farg3, SwigClassWrapper *farg4) { + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + size_t arg2 ; + std::vector< float > *arg3 = 0 ; + std::vector< std::pair< float,float > > *arg4 = 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::EnergyCalibration >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + arg2 = (size_t)(*farg2); + SWIG_check_nonnull(farg3->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::EnergyCalibration::set_default_polynomial(size_t const,std::vector< float > const &,std::vector< std::pair< float,float > > const &)", return ); + arg3 = (std::vector< float > *)farg3->cptr; + SWIG_check_nonnull(farg4->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::EnergyCalibration::set_default_polynomial(size_t const,std::vector< float > const &,std::vector< std::pair< float,float > > const &)", return ); + arg4 = (std::vector< std::pair< float,float > > *)farg4->cptr; + (arg1)->set_default_polynomial(arg2,(std::vector< float > const &)*arg3,(std::vector< std::pair< float,float > > const &)*arg4); +} + + +SWIGEXPORT void _wrap_EnergyCalibration_set_full_range_fraction(SwigClassWrapper *farg1, int const *farg2, SwigClassWrapper *farg3, SwigClassWrapper *farg4) { + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + size_t arg2 ; + std::vector< float > *arg3 = 0 ; + std::vector< std::pair< float,float > > *arg4 = 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::EnergyCalibration >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + arg2 = (size_t)(*farg2); + SWIG_check_nonnull(farg3->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::EnergyCalibration::set_full_range_fraction(size_t const,std::vector< float > const &,std::vector< std::pair< float,float > > const &)", return ); + arg3 = (std::vector< float > *)farg3->cptr; + SWIG_check_nonnull(farg4->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::EnergyCalibration::set_full_range_fraction(size_t const,std::vector< float > const &,std::vector< std::pair< float,float > > const &)", return ); + arg4 = (std::vector< std::pair< float,float > > *)farg4->cptr; + (arg1)->set_full_range_fraction(arg2,(std::vector< float > const &)*arg3,(std::vector< std::pair< float,float > > const &)*arg4); +} + + +SWIGEXPORT int _wrap_EnergyCalibration_op_lt__(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + SpecUtils::EnergyCalibration *arg2 = 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *smartarg1 ; + bool result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + SWIG_check_sp_nonnull(farg2->cptr, "SpecUtils::EnergyCalibration *", "EnergyCalibration", "SpecUtils::EnergyCalibration::operator <(SpecUtils::EnergyCalibration const &) const", return 0) + arg2 = (SpecUtils::EnergyCalibration*)static_cast*>(farg2->cptr)->get(); + result = (bool)((SpecUtils::EnergyCalibration const *)arg1)->operator <((SpecUtils::EnergyCalibration const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_EnergyCalibration_op_eq__(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + SpecUtils::EnergyCalibration *arg2 = 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *smartarg1 ; + bool result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + SWIG_check_sp_nonnull(farg2->cptr, "SpecUtils::EnergyCalibration *", "EnergyCalibration", "SpecUtils::EnergyCalibration::operator ==(SpecUtils::EnergyCalibration const &) const", return 0) + arg2 = (SpecUtils::EnergyCalibration*)static_cast*>(farg2->cptr)->get(); + result = (bool)((SpecUtils::EnergyCalibration const *)arg1)->operator ==((SpecUtils::EnergyCalibration const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_EnergyCalibration_op_ne__(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + int fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + SpecUtils::EnergyCalibration *arg2 = 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *smartarg1 ; + bool result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + SWIG_check_sp_nonnull(farg2->cptr, "SpecUtils::EnergyCalibration *", "EnergyCalibration", "SpecUtils::EnergyCalibration::operator !=(SpecUtils::EnergyCalibration const &) const", return 0) + arg2 = (SpecUtils::EnergyCalibration*)static_cast*>(farg2->cptr)->get(); + result = (bool)((SpecUtils::EnergyCalibration const *)arg1)->operator !=((SpecUtils::EnergyCalibration const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_EnergyCalibration_memmorysize(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *smartarg1 ; + size_t result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + result = ((SpecUtils::EnergyCalibration const *)arg1)->memmorysize(); + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_EnergyCalibration_channel_for_energy(SwigClassWrapper *farg1, double const *farg2) { + double fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + double arg2 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *smartarg1 ; + double result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + arg2 = (double)(*farg2); + result = (double)((SpecUtils::EnergyCalibration const *)arg1)->channel_for_energy(arg2); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_EnergyCalibration_energy_for_channel(SwigClassWrapper *farg1, double const *farg2) { + double fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + double arg2 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *smartarg1 ; + double result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + arg2 = (double)(*farg2); + result = (double)((SpecUtils::EnergyCalibration const *)arg1)->energy_for_channel(arg2); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_EnergyCalibration_lower_energy(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + result = (float)((SpecUtils::EnergyCalibration const *)arg1)->lower_energy(); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_EnergyCalibration_upper_energy(SwigClassWrapper *farg1) { + float fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *smartarg1 ; + float result; + + smartarg1 = (std::shared_ptr*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + result = (float)((SpecUtils::EnergyCalibration const *)arg1)->upper_energy(); + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_EnergyCalibration_sm_min_channels_get() { + int fresult ; + size_t result; + + result = (size_t)SpecUtils::EnergyCalibration::sm_min_channels; + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_EnergyCalibration_sm_max_channels_get() { + int fresult ; + size_t result; + + result = (size_t)SpecUtils::EnergyCalibration::sm_max_channels; + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT float _wrap_EnergyCalibration_sm_polynomial_offset_limit_get() { + float fresult ; + float result; + + result = (float)(float)SpecUtils::EnergyCalibration::sm_polynomial_offset_limit; + fresult = (float)(result); + return fresult; +} + + +SWIGEXPORT void _wrap_EnergyCalibration_check_lower_energies(SwigClassWrapper *farg1, int const *farg2, SwigClassWrapper *farg3) { + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + size_t arg2 ; + std::vector< float > *arg3 = 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::EnergyCalibration >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + arg2 = (size_t)(*farg2); + SWIG_check_nonnull(farg3->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::EnergyCalibration::check_lower_energies(size_t const,std::vector< float > const &)", return ); + arg3 = (std::vector< float > *)farg3->cptr; + (arg1)->check_lower_energies(arg2,(std::vector< float > const &)*arg3); +} + + +SWIGEXPORT SwigClassWrapper _wrap_EnergyCalibration_mutable_deviation_pairs(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration > *smartarg1 ; + SpecUtils::DeviationPairs *result = 0 ; + + smartarg1 = (std::shared_ptr< SpecUtils::EnergyCalibration >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + result = (SpecUtils::DeviationPairs *) &(arg1)->mutable_deviation_pairs(); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_EnergyCalibration_m_type_set(SwigClassWrapper *farg1, int const *farg2) { + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + SpecUtils::EnergyCalType arg2 ; + std::shared_ptr< SpecUtils::EnergyCalibration > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::EnergyCalibration >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + arg2 = (SpecUtils::EnergyCalType)(*farg2); + if (arg1) (arg1)->m_type = arg2; +} + + +SWIGEXPORT int _wrap_EnergyCalibration_m_type_get(SwigClassWrapper *farg1) { + int fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration > *smartarg1 ; + SpecUtils::EnergyCalType result; + + smartarg1 = (std::shared_ptr< SpecUtils::EnergyCalibration >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + result = (SpecUtils::EnergyCalType) ((arg1)->m_type); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT void _wrap_EnergyCalibration_m_coefficients_set(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::vector< float > *arg2 = (std::vector< float > *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::EnergyCalibration >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + arg2 = (std::vector< float > *)farg2->cptr; + if (arg1) (arg1)->m_coefficients = *arg2; +} + + +SWIGEXPORT SwigClassWrapper _wrap_EnergyCalibration_m_coefficients_get(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration > *smartarg1 ; + std::vector< float > *result = 0 ; + + smartarg1 = (std::shared_ptr< SpecUtils::EnergyCalibration >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + result = (std::vector< float > *)& ((arg1)->m_coefficients); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_EnergyCalibration_m_deviation_pairs_set(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::vector< std::pair< float,float > > *arg2 = (std::vector< std::pair< float,float > > *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::EnergyCalibration >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + arg2 = (std::vector< std::pair< float,float > > *)farg2->cptr; + if (arg1) (arg1)->m_deviation_pairs = *arg2; +} + + +SWIGEXPORT SwigClassWrapper _wrap_EnergyCalibration_m_deviation_pairs_get(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration > *smartarg1 ; + std::vector< std::pair< float,float > > *result = 0 ; + + smartarg1 = (std::shared_ptr< SpecUtils::EnergyCalibration >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + result = (std::vector< std::pair< float,float > > *)& ((arg1)->m_deviation_pairs); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_EnergyCalibration_m_channel_energies_set(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< std::vector< float > const > *arg2 = (std::shared_ptr< std::vector< float > const > *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::EnergyCalibration >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + arg2 = (std::shared_ptr< std::vector< float > const > *)farg2->cptr; + if (arg1) (arg1)->m_channel_energies = *arg2; +} + + +SWIGEXPORT SwigClassWrapper _wrap_EnergyCalibration_m_channel_energies_get(SwigClassWrapper *farg1) { + SwigClassWrapper fresult ; + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration > *smartarg1 ; + std::shared_ptr< std::vector< float > const > *result = 0 ; + + smartarg1 = (std::shared_ptr< SpecUtils::EnergyCalibration >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + result = (std::shared_ptr< std::vector< float > const > *)& ((arg1)->m_channel_energies); + fresult.cptr = (void*)result; + fresult.cmemflags = SWIG_MEM_RVALUE | (0 ? SWIG_MEM_OWN : 0); + return fresult; +} + + +SWIGEXPORT void _wrap_delete_EnergyCalibration(SwigClassWrapper *farg1) { + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::EnergyCalibration >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + (void)arg1; delete smartarg1; +} + + +SWIGEXPORT void _wrap_EnergyCalibration_op_assign__(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SpecUtils::EnergyCalibration *arg1 = (SpecUtils::EnergyCalibration *) 0 ; + SpecUtils::EnergyCalibration *arg2 = 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration > *smartarg1 ; + + smartarg1 = (std::shared_ptr< SpecUtils::EnergyCalibration >*)(farg1->cptr); + arg1 = smartarg1 ? (SpecUtils::EnergyCalibration*)(smartarg1->get()) : NULL; + (void)sizeof(arg2); + SWIG_assign, SWIGPOLICY_SpecUtils_EnergyCalibration>(farg1, *farg2); + +} + + +SWIGEXPORT SwigClassWrapper _wrap_energy_cal_combine_channels(SwigClassWrapper *farg1, int const *farg2) { + SwigClassWrapper fresult ; + SpecUtils::EnergyCalibration *arg1 = 0 ; + size_t arg2 ; + std::shared_ptr< SpecUtils::EnergyCalibration > result; + + SWIG_check_sp_nonnull(farg1->cptr, "SpecUtils::EnergyCalibration *", "EnergyCalibration", "SpecUtils::energy_cal_combine_channels(SpecUtils::EnergyCalibration const &,size_t const)", return SwigClassWrapper_uninitialized()) + arg1 = (SpecUtils::EnergyCalibration*)static_cast*>(farg1->cptr)->get(); + arg2 = (size_t)(*farg2); + result = SpecUtils::energy_cal_combine_channels((SpecUtils::EnergyCalibration const &)*arg1,SWIG_STD_MOVE(arg2)); + fresult.cptr = result ? (new std::shared_ptr< SpecUtils::EnergyCalibration >(static_cast< const std::shared_ptr< SpecUtils::EnergyCalibration >& >(result))) : NULL; + fresult.cmemflags = SWIG_MEM_OWN | SWIG_MEM_RVALUE; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_polynomial_binning(SwigClassWrapper *farg1, int const *farg2, SwigClassWrapper *farg3) { + SwigClassWrapper fresult ; + std::vector< float > *arg1 = 0 ; + size_t arg2 ; + std::vector< std::pair< float,float > > *arg3 = 0 ; + SwigValueWrapper< std::shared_ptr< std::vector< float > const > > result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::polynomial_binning(std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &)", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< float > *)farg1->cptr; + arg2 = (size_t)(*farg2); + SWIG_check_nonnull(farg3->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::polynomial_binning(std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &)", return SwigClassWrapper_uninitialized()); + arg3 = (std::vector< std::pair< float,float > > *)farg3->cptr; + result = SpecUtils::polynomial_binning((std::vector< float > const &)*arg1,SWIG_STD_MOVE(arg2),(std::vector< std::pair< float,float > > const &)*arg3); + fresult.cptr = new (std::shared_ptr< std::vector< float > const >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_fullrangefraction_binning__SWIG_0(SwigClassWrapper *farg1, int const *farg2, SwigClassWrapper *farg3, int const *farg4) { + SwigClassWrapper fresult ; + std::vector< float > *arg1 = 0 ; + size_t arg2 ; + std::vector< std::pair< float,float > > *arg3 = 0 ; + bool arg4 ; + SwigValueWrapper< std::shared_ptr< std::vector< float > const > > result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::fullrangefraction_binning(std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &,bool const)", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< float > *)farg1->cptr; + arg2 = (size_t)(*farg2); + SWIG_check_nonnull(farg3->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::fullrangefraction_binning(std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &,bool const)", return SwigClassWrapper_uninitialized()); + arg3 = (std::vector< std::pair< float,float > > *)farg3->cptr; + arg4 = (*farg4 ? true : false); + result = SpecUtils::fullrangefraction_binning((std::vector< float > const &)*arg1,SWIG_STD_MOVE(arg2),(std::vector< std::pair< float,float > > const &)*arg3,arg4); + fresult.cptr = new (std::shared_ptr< std::vector< float > const >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_fullrangefraction_binning__SWIG_1(SwigClassWrapper *farg1, int const *farg2, SwigClassWrapper *farg3) { + SwigClassWrapper fresult ; + std::vector< float > *arg1 = 0 ; + size_t arg2 ; + std::vector< std::pair< float,float > > *arg3 = 0 ; + SwigValueWrapper< std::shared_ptr< std::vector< float > const > > result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::fullrangefraction_binning(std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &)", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< float > *)farg1->cptr; + arg2 = (size_t)(*farg2); + SWIG_check_nonnull(farg3->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::fullrangefraction_binning(std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &)", return SwigClassWrapper_uninitialized()); + arg3 = (std::vector< std::pair< float,float > > *)farg3->cptr; + result = SpecUtils::fullrangefraction_binning((std::vector< float > const &)*arg1,SWIG_STD_MOVE(arg2),(std::vector< std::pair< float,float > > const &)*arg3); + fresult.cptr = new (std::shared_ptr< std::vector< float > const >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT double _wrap_fullrangefraction_energy(double const *farg1, SwigClassWrapper *farg2, int const *farg3, SwigClassWrapper *farg4) { + double fresult ; + double arg1 ; + std::vector< float > *arg2 = 0 ; + size_t arg3 ; + std::vector< std::pair< float,float > > *arg4 = 0 ; + double result; + + arg1 = (double)(*farg1); + SWIG_check_nonnull(farg2->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::fullrangefraction_energy(double const,std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &)", return 0); + arg2 = (std::vector< float > *)farg2->cptr; + arg3 = (size_t)(*farg3); + SWIG_check_nonnull(farg4->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::fullrangefraction_energy(double const,std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &)", return 0); + arg4 = (std::vector< std::pair< float,float > > *)farg4->cptr; + result = (double)SpecUtils::fullrangefraction_energy(arg1,(std::vector< float > const &)*arg2,SWIG_STD_MOVE(arg3),(std::vector< std::pair< float,float > > const &)*arg4); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_polynomial_energy(double const *farg1, SwigClassWrapper *farg2, SwigClassWrapper *farg3) { + double fresult ; + double arg1 ; + std::vector< float > *arg2 = 0 ; + std::vector< std::pair< float,float > > *arg3 = 0 ; + double result; + + arg1 = (double)(*farg1); + SWIG_check_nonnull(farg2->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::polynomial_energy(double const,std::vector< float > const &,std::vector< std::pair< float,float > > const &)", return 0); + arg2 = (std::vector< float > *)farg2->cptr; + SWIG_check_nonnull(farg3->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::polynomial_energy(double const,std::vector< float > const &,std::vector< std::pair< float,float > > const &)", return 0); + arg3 = (std::vector< std::pair< float,float > > *)farg3->cptr; + result = (double)SpecUtils::polynomial_energy(arg1,(std::vector< float > const &)*arg2,(std::vector< std::pair< float,float > > const &)*arg3); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_deviation_pair_correction(double const *farg1, SwigClassWrapper *farg2) { + double fresult ; + double arg1 ; + std::vector< std::pair< float,float > > *arg2 = 0 ; + double result; + + arg1 = (double)(*farg1); + SWIG_check_nonnull(farg2->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::deviation_pair_correction(double const,std::vector< std::pair< float,float > > const &)", return 0); + arg2 = (std::vector< std::pair< float,float > > *)farg2->cptr; + result = (double)SpecUtils::deviation_pair_correction(arg1,(std::vector< std::pair< float,float > > const &)*arg2); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_correction_due_to_dev_pairs(double const *farg1, SwigClassWrapper *farg2) { + double fresult ; + double arg1 ; + std::vector< std::pair< float,float > > *arg2 = 0 ; + double result; + + arg1 = (double)(*farg1); + SWIG_check_nonnull(farg2->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::correction_due_to_dev_pairs(double const,std::vector< std::pair< float,float > > const &)", return 0); + arg2 = (std::vector< std::pair< float,float > > *)farg2->cptr; + result = (double)SpecUtils::correction_due_to_dev_pairs(arg1,(std::vector< std::pair< float,float > > const &)*arg2); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_apply_deviation_pair(SwigClassWrapper *farg1, SwigClassWrapper *farg2) { + SwigClassWrapper fresult ; + std::vector< float > *arg1 = 0 ; + std::vector< std::pair< float,float > > *arg2 = 0 ; + SwigValueWrapper< std::shared_ptr< std::vector< float > const > > result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::apply_deviation_pair(std::vector< float > const &,std::vector< std::pair< float,float > > const &)", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< float > *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::apply_deviation_pair(std::vector< float > const &,std::vector< std::pair< float,float > > const &)", return SwigClassWrapper_uninitialized()); + arg2 = (std::vector< std::pair< float,float > > *)farg2->cptr; + result = SpecUtils::apply_deviation_pair((std::vector< float > const &)*arg1,(std::vector< std::pair< float,float > > const &)*arg2); + fresult.cptr = new (std::shared_ptr< std::vector< float > const >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_polynomial_coef_to_fullrangefraction(SwigClassWrapper *farg1, int const *farg2) { + SwigClassWrapper fresult ; + std::vector< float > *arg1 = 0 ; + size_t arg2 ; + std::vector< float > result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::polynomial_coef_to_fullrangefraction(std::vector< float > const &,size_t const)", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< float > *)farg1->cptr; + arg2 = (size_t)(*farg2); + result = SpecUtils::polynomial_coef_to_fullrangefraction((std::vector< float > const &)*arg1,SWIG_STD_MOVE(arg2)); + fresult.cptr = new (std::vector< float >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_fullrangefraction_coef_to_polynomial(SwigClassWrapper *farg1, int const *farg2) { + SwigClassWrapper fresult ; + std::vector< float > *arg1 = 0 ; + size_t arg2 ; + std::vector< float > result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::fullrangefraction_coef_to_polynomial(std::vector< float > const &,size_t const)", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< float > *)farg1->cptr; + arg2 = (size_t)(*farg2); + result = SpecUtils::fullrangefraction_coef_to_polynomial((std::vector< float > const &)*arg1,SWIG_STD_MOVE(arg2)); + fresult.cptr = new (std::vector< float >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_mid_channel_polynomial_to_fullrangeFraction(SwigClassWrapper *farg1, int const *farg2) { + SwigClassWrapper fresult ; + std::vector< float > *arg1 = 0 ; + size_t arg2 ; + std::vector< float > result; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::mid_channel_polynomial_to_fullrangeFraction(std::vector< float > const &,size_t const)", return SwigClassWrapper_uninitialized()); + arg1 = (std::vector< float > *)farg1->cptr; + arg2 = (size_t)(*farg2); + result = SpecUtils::mid_channel_polynomial_to_fullrangeFraction((std::vector< float > const &)*arg1,SWIG_STD_MOVE(arg2)); + fresult.cptr = new (std::vector< float >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT int _wrap_calibration_is_valid(int const *farg1, SwigClassWrapper *farg2, SwigClassWrapper *farg3, int const *farg4) { + int fresult ; + SpecUtils::EnergyCalType arg1 ; + std::vector< float > *arg2 = 0 ; + std::vector< std::pair< float,float > > *arg3 = 0 ; + size_t arg4 ; + bool result; + + arg1 = (SpecUtils::EnergyCalType)(*farg1); + SWIG_check_nonnull(farg2->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::calibration_is_valid(SpecUtils::EnergyCalType const,std::vector< float > const &,std::vector< std::pair< float,float > > const &,size_t)", return 0); + arg2 = (std::vector< float > *)farg2->cptr; + SWIG_check_nonnull(farg3->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::calibration_is_valid(SpecUtils::EnergyCalType const,std::vector< float > const &,std::vector< std::pair< float,float > > const &,size_t)", return 0); + arg3 = (std::vector< std::pair< float,float > > *)farg3->cptr; + arg4 = (size_t)(*farg4); + result = (bool)SpecUtils::calibration_is_valid(arg1,(std::vector< float > const &)*arg2,(std::vector< std::pair< float,float > > const &)*arg3,SWIG_STD_MOVE(arg4)); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_polynomial_cal_remove_first_channels(int const *farg1, SwigClassWrapper *farg2) { + SwigClassWrapper fresult ; + int arg1 ; + std::vector< float > *arg2 = 0 ; + std::vector< float > result; + + arg1 = (int)(*farg1); + SWIG_check_nonnull(farg2->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::polynomial_cal_remove_first_channels(int const,std::vector< float > const &)", return SwigClassWrapper_uninitialized()); + arg2 = (std::vector< float > *)farg2->cptr; + result = SpecUtils::polynomial_cal_remove_first_channels(arg1,(std::vector< float > const &)*arg2); + fresult.cptr = new (std::vector< float >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT double _wrap_find_fullrangefraction_channel__SWIG_0(double const *farg1, SwigClassWrapper *farg2, int const *farg3, SwigClassWrapper *farg4, double const *farg5) { + double fresult ; + double arg1 ; + std::vector< float > *arg2 = 0 ; + size_t arg3 ; + std::vector< std::pair< float,float > > *arg4 = 0 ; + double arg5 ; + double result; + + arg1 = (double)(*farg1); + SWIG_check_nonnull(farg2->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::find_fullrangefraction_channel(double const,std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &,double const)", return 0); + arg2 = (std::vector< float > *)farg2->cptr; + arg3 = (size_t)(*farg3); + SWIG_check_nonnull(farg4->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::find_fullrangefraction_channel(double const,std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &,double const)", return 0); + arg4 = (std::vector< std::pair< float,float > > *)farg4->cptr; + arg5 = (double)(*farg5); + result = (double)SpecUtils::find_fullrangefraction_channel(arg1,(std::vector< float > const &)*arg2,SWIG_STD_MOVE(arg3),(std::vector< std::pair< float,float > > const &)*arg4,arg5); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_find_fullrangefraction_channel__SWIG_1(double const *farg1, SwigClassWrapper *farg2, int const *farg3, SwigClassWrapper *farg4) { + double fresult ; + double arg1 ; + std::vector< float > *arg2 = 0 ; + size_t arg3 ; + std::vector< std::pair< float,float > > *arg4 = 0 ; + double result; + + arg1 = (double)(*farg1); + SWIG_check_nonnull(farg2->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::find_fullrangefraction_channel(double const,std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &)", return 0); + arg2 = (std::vector< float > *)farg2->cptr; + arg3 = (size_t)(*farg3); + SWIG_check_nonnull(farg4->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::find_fullrangefraction_channel(double const,std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &)", return 0); + arg4 = (std::vector< std::pair< float,float > > *)farg4->cptr; + result = (double)SpecUtils::find_fullrangefraction_channel(arg1,(std::vector< float > const &)*arg2,SWIG_STD_MOVE(arg3),(std::vector< std::pair< float,float > > const &)*arg4); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_find_polynomial_channel__SWIG_0(double const *farg1, SwigClassWrapper *farg2, int const *farg3, SwigClassWrapper *farg4, double const *farg5) { + double fresult ; + double arg1 ; + std::vector< float > *arg2 = 0 ; + size_t arg3 ; + std::vector< std::pair< float,float > > *arg4 = 0 ; + double arg5 ; + double result; + + arg1 = (double)(*farg1); + SWIG_check_nonnull(farg2->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::find_polynomial_channel(double const,std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &,double const)", return 0); + arg2 = (std::vector< float > *)farg2->cptr; + arg3 = (size_t)(*farg3); + SWIG_check_nonnull(farg4->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::find_polynomial_channel(double const,std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &,double const)", return 0); + arg4 = (std::vector< std::pair< float,float > > *)farg4->cptr; + arg5 = (double)(*farg5); + result = (double)SpecUtils::find_polynomial_channel(arg1,(std::vector< float > const &)*arg2,SWIG_STD_MOVE(arg3),(std::vector< std::pair< float,float > > const &)*arg4,arg5); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT double _wrap_find_polynomial_channel__SWIG_1(double const *farg1, SwigClassWrapper *farg2, int const *farg3, SwigClassWrapper *farg4) { + double fresult ; + double arg1 ; + std::vector< float > *arg2 = 0 ; + size_t arg3 ; + std::vector< std::pair< float,float > > *arg4 = 0 ; + double result; + + arg1 = (double)(*farg1); + SWIG_check_nonnull(farg2->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::find_polynomial_channel(double const,std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &)", return 0); + arg2 = (std::vector< float > *)farg2->cptr; + arg3 = (size_t)(*farg3); + SWIG_check_nonnull(farg4->cptr, "std::vector< std::pair< float,float > > const &", "DeviationPairs", "SpecUtils::find_polynomial_channel(double const,std::vector< float > const &,size_t const,std::vector< std::pair< float,float > > const &)", return 0); + arg4 = (std::vector< std::pair< float,float > > *)farg4->cptr; + result = (double)SpecUtils::find_polynomial_channel(arg1,(std::vector< float > const &)*arg2,SWIG_STD_MOVE(arg3),(std::vector< std::pair< float,float > > const &)*arg4); + fresult = (double)(result); + return fresult; +} + + +SWIGEXPORT void _wrap_rebin_by_lower_edge(SwigClassWrapper *farg1, SwigClassWrapper *farg2, SwigClassWrapper *farg3, SwigClassWrapper *farg4) { + std::vector< float > *arg1 = 0 ; + std::vector< float > *arg2 = 0 ; + std::vector< float > *arg3 = 0 ; + std::vector< float > *arg4 = 0 ; + + SWIG_check_nonnull(farg1->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::rebin_by_lower_edge(std::vector< float > const &,std::vector< float > const &,std::vector< float > const &,std::vector< float > &)", return ); + arg1 = (std::vector< float > *)farg1->cptr; + SWIG_check_nonnull(farg2->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::rebin_by_lower_edge(std::vector< float > const &,std::vector< float > const &,std::vector< float > const &,std::vector< float > &)", return ); + arg2 = (std::vector< float > *)farg2->cptr; + SWIG_check_nonnull(farg3->cptr, "std::vector< float > const &", "FloatVector", "SpecUtils::rebin_by_lower_edge(std::vector< float > const &,std::vector< float > const &,std::vector< float > const &,std::vector< float > &)", return ); + arg3 = (std::vector< float > *)farg3->cptr; + SWIG_check_nonnull(farg4->cptr, "std::vector< float > &", "FloatVector", "SpecUtils::rebin_by_lower_edge(std::vector< float > const &,std::vector< float > const &,std::vector< float > const &,std::vector< float > &)", return ); + arg4 = (std::vector< float > *)farg4->cptr; + SpecUtils::rebin_by_lower_edge((std::vector< float > const &)*arg1,(std::vector< float > const &)*arg2,(std::vector< float > const &)*arg3,*arg4); +} + + +SWIGEXPORT int _wrap_write_CALp_file(SwigClassWrapper *farg1, SwigClassWrapper const *farg2, SwigArrayWrapper *farg3) { + int fresult ; + std::ostream *arg1 = 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > *arg2 = 0 ; + std::string *arg3 = 0 ; + std::shared_ptr< SpecUtils::EnergyCalibration const > tempnull2 ; + std::string tempstr3 ; + bool result; + + SWIG_check_nonnull(farg1->cptr, "std::ostream &", "SWIGTYPE_p_std__ostream", "SpecUtils::write_CALp_file(std::ostream &,std::shared_ptr< SpecUtils::EnergyCalibration const > const &,std::string const &)", return 0); + arg1 = (std::ostream *)farg1->cptr; + arg2 = farg2->cptr ? static_cast * >(farg2->cptr) : &tempnull2; + tempstr3 = std::string(static_cast(farg3->data), farg3->size); + arg3 = &tempstr3; + result = (bool)SpecUtils::write_CALp_file(*arg1,(std::shared_ptr< SpecUtils::EnergyCalibration const > const &)*arg2,(std::string const &)*arg3); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_remove_file(SwigArrayWrapper *farg1) { + int fresult ; + std::string *arg1 = 0 ; + std::string tempstr1 ; + bool result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + result = (bool)SpecUtils::remove_file((std::string const &)*arg1); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_is_file(SwigArrayWrapper *farg1) { + int fresult ; + std::string *arg1 = 0 ; + std::string tempstr1 ; + bool result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + result = (bool)SpecUtils::is_file((std::string const &)*arg1); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_rename_file(SwigArrayWrapper *farg1, SwigArrayWrapper *farg2) { + int fresult ; + std::string *arg1 = 0 ; + std::string *arg2 = 0 ; + std::string tempstr1 ; + std::string tempstr2 ; + bool result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = (bool)SpecUtils::rename_file((std::string const &)*arg1,(std::string const &)*arg2); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_is_directory(SwigArrayWrapper *farg1) { + int fresult ; + std::string *arg1 = 0 ; + std::string tempstr1 ; + bool result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + result = (bool)SpecUtils::is_directory((std::string const &)*arg1); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT int _wrap_create_directory(SwigArrayWrapper *farg1) { + int fresult ; + std::string *arg1 = 0 ; + std::string tempstr1 ; + int result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + result = (int)SpecUtils::create_directory((std::string const &)*arg1); + fresult = (int)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_can_rw_in_directory(SwigArrayWrapper *farg1) { + int fresult ; + std::string *arg1 = 0 ; + std::string tempstr1 ; + bool result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + result = (bool)SpecUtils::can_rw_in_directory((std::string const &)*arg1); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_append_path(SwigArrayWrapper *farg1, SwigArrayWrapper *farg2) { + SwigArrayWrapper fresult ; + std::string *arg1 = 0 ; + std::string *arg2 = 0 ; + std::string tempstr1 ; + std::string tempstr2 ; + std::string result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = SpecUtils::append_path((std::string const &)*arg1,(std::string const &)*arg2); + fresult.size = (&result)->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, (&result)->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_filename(SwigArrayWrapper *farg1) { + SwigArrayWrapper fresult ; + std::string *arg1 = 0 ; + std::string tempstr1 ; + std::string result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + result = SpecUtils::filename((std::string const &)*arg1); + fresult.size = (&result)->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, (&result)->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_parent_path(SwigArrayWrapper *farg1) { + SwigArrayWrapper fresult ; + std::string *arg1 = 0 ; + std::string tempstr1 ; + std::string result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + result = SpecUtils::parent_path((std::string const &)*arg1); + fresult.size = (&result)->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, (&result)->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_file_extension(SwigArrayWrapper *farg1) { + SwigArrayWrapper fresult ; + std::string *arg1 = 0 ; + std::string tempstr1 ; + std::string result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + result = SpecUtils::file_extension((std::string const &)*arg1); + fresult.size = (&result)->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, (&result)->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT int _wrap_file_size(SwigArrayWrapper *farg1) { + int fresult ; + std::string *arg1 = 0 ; + std::string tempstr1 ; + size_t result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + result = SpecUtils::file_size((std::string const &)*arg1); + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_temp_dir() { + SwigArrayWrapper fresult ; + std::string result; + + result = SpecUtils::temp_dir(); + fresult.size = (&result)->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, (&result)->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT int _wrap_is_absolute_path(SwigArrayWrapper *farg1) { + int fresult ; + std::string *arg1 = 0 ; + std::string tempstr1 ; + bool result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + result = (bool)SpecUtils::is_absolute_path((std::string const &)*arg1); + fresult = (result ? 1 : 0); + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_get_working_path() { + SwigArrayWrapper fresult ; + std::string result; + + result = SpecUtils::get_working_path(); + fresult.size = (&result)->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, (&result)->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_temp_file_name(SwigArrayWrapper *farg1, SwigArrayWrapper *farg2) { + SwigArrayWrapper fresult ; + std::string arg1 ; + std::string arg2 ; + std::string result; + + (&arg1)->assign(static_cast(farg1->data), farg1->size); + (&arg2)->assign(static_cast(farg2->data), farg2->size); + result = SpecUtils::temp_file_name(SWIG_STD_MOVE(arg1),SWIG_STD_MOVE(arg2)); + fresult.size = (&result)->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, (&result)->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT int _wrap_sm_recursive_ls_max_depth_get() { + int fresult ; + size_t result; + + result = (size_t)SpecUtils::sm_recursive_ls_max_depth; + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT int _wrap_sm_ls_max_results_get() { + int fresult ; + size_t result; + + result = (size_t)SpecUtils::sm_ls_max_results; + fresult = (size_t)(result); + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_recursive_ls__SWIG_0(SwigArrayWrapper *farg1, SwigArrayWrapper *farg2) { + SwigClassWrapper fresult ; + std::string *arg1 = 0 ; + std::string *arg2 = 0 ; + std::string tempstr1 ; + std::string tempstr2 ; + SwigValueWrapper< std::vector< std::string > > result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = SpecUtils::recursive_ls((std::string const &)*arg1,(std::string const &)*arg2); + fresult.cptr = new (std::vector< std::string >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_recursive_ls__SWIG_1(SwigArrayWrapper *farg1) { + SwigClassWrapper fresult ; + std::string *arg1 = 0 ; + std::string tempstr1 ; + SwigValueWrapper< std::vector< std::string > > result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + result = SpecUtils::recursive_ls((std::string const &)*arg1); + fresult.cptr = new (std::vector< std::string >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_recursive_ls__SWIG_2(SwigArrayWrapper *farg1, SpecUtils::file_match_function_t farg2, void const **farg3) { + SwigClassWrapper fresult ; + std::string *arg1 = 0 ; + SpecUtils::file_match_function_t arg2 = (SpecUtils::file_match_function_t) 0 ; + void *arg3 = (void *) 0 ; + std::string tempstr1 ; + SwigValueWrapper< std::vector< std::string > > result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + arg2 = (SpecUtils::file_match_function_t)(*farg2); + arg3 = (void *)(*farg3); + result = SpecUtils::recursive_ls((std::string const &)*arg1,arg2,arg3); + fresult.cptr = new (std::vector< std::string >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_ls_files_in_directory__SWIG_0(SwigArrayWrapper *farg1, SwigArrayWrapper *farg2) { + SwigClassWrapper fresult ; + std::string *arg1 = 0 ; + std::string *arg2 = 0 ; + std::string tempstr1 ; + std::string tempstr2 ; + SwigValueWrapper< std::vector< std::string > > result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + tempstr2 = std::string(static_cast(farg2->data), farg2->size); + arg2 = &tempstr2; + result = SpecUtils::ls_files_in_directory((std::string const &)*arg1,(std::string const &)*arg2); + fresult.cptr = new (std::vector< std::string >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_ls_files_in_directory__SWIG_1(SwigArrayWrapper *farg1) { + SwigClassWrapper fresult ; + std::string *arg1 = 0 ; + std::string tempstr1 ; + SwigValueWrapper< std::vector< std::string > > result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + result = SpecUtils::ls_files_in_directory((std::string const &)*arg1); + fresult.cptr = new (std::vector< std::string >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_ls_files_in_directory__SWIG_2(SwigArrayWrapper *farg1, SpecUtils::file_match_function_t farg2, void const **farg3) { + SwigClassWrapper fresult ; + std::string *arg1 = 0 ; + SpecUtils::file_match_function_t arg2 = (SpecUtils::file_match_function_t) 0 ; + void *arg3 = (void *) 0 ; + std::string tempstr1 ; + SwigValueWrapper< std::vector< std::string > > result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + arg2 = (SpecUtils::file_match_function_t)(*farg2); + arg3 = (void *)(*farg3); + result = SpecUtils::ls_files_in_directory((std::string const &)*arg1,arg2,arg3); + fresult.cptr = new (std::vector< std::string >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigClassWrapper _wrap_ls_directories_in_directory(SwigArrayWrapper *farg1) { + SwigClassWrapper fresult ; + std::string *arg1 = 0 ; + std::string tempstr1 ; + SwigValueWrapper< std::vector< std::string > > result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + result = SpecUtils::ls_directories_in_directory((std::string const &)*arg1); + fresult.cptr = new (std::vector< std::string >)(result); + fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN; + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_fs_relative(SwigArrayWrapper *farg1, SwigArrayWrapper *farg2) { + SwigArrayWrapper fresult ; + std::string arg1 ; + std::string arg2 ; + std::string result; + + (&arg1)->assign(static_cast(farg1->data), farg1->size); + (&arg2)->assign(static_cast(farg2->data), farg2->size); + result = SpecUtils::fs_relative(SWIG_STD_MOVE(arg1),SWIG_STD_MOVE(arg2)); + fresult.size = (&result)->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, (&result)->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT SwigArrayWrapper _wrap_lexically_normalize_path(SwigArrayWrapper *farg1) { + SwigArrayWrapper fresult ; + std::string *arg1 = 0 ; + std::string tempstr1 ; + std::string result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + result = SpecUtils::lexically_normalize_path((std::string const &)*arg1); + fresult.size = (&result)->size(); + if (fresult.size > 0) { + fresult.data = malloc(fresult.size); + memcpy(fresult.data, (&result)->c_str(), fresult.size); + } else { + fresult.data = NULL; + } + return fresult; +} + + +SWIGEXPORT void _wrap_load_file_data(SwigArrayWrapper *farg1, SwigClassWrapper *farg2) { + char *arg1 = (char *) (char *)0 ; + std::vector< char > *arg2 = 0 ; + + arg1 = (char *)(farg1->data); + SWIG_check_nonnull(farg2->cptr, "std::vector< char > &", "SWIGTYPE_p_std__vectorT_char_t", "SpecUtils::load_file_data(char const *const,std::vector< char > &)", return ); + arg2 = (std::vector< char > *)farg2->cptr; + SpecUtils::load_file_data((char const *)arg1,*arg2); +} + + +SWIGEXPORT int _wrap_likely_not_spec_file(SwigArrayWrapper *farg1) { + int fresult ; + std::string *arg1 = 0 ; + std::string tempstr1 ; + bool result; + + tempstr1 = std::string(static_cast(farg1->data), farg1->size); + arg1 = &tempstr1; + result = (bool)SpecUtils::likely_not_spec_file((std::string const &)*arg1); + fresult = (result ? 1 : 0); + return fresult; +} + + +} // extern + diff --git a/bindings/swig/fortran/SpecUtilsWrap.f90 b/bindings/swig/fortran/SpecUtilsWrap.f90 new file mode 100644 index 0000000..a59a64e --- /dev/null +++ b/bindings/swig/fortran/SpecUtilsWrap.f90 @@ -0,0 +1,13086 @@ +! This file was automatically generated by SWIG (https://www.swig.org). +! Version 4.2.0 +! +! Do not make changes to this file unless you know what you are doing - modify +! the SWIG interface file instead. +module specutilswrap + use, intrinsic :: ISO_C_BINDING + implicit none + private + + ! DECLARATION CONSTRUCTS + + integer, parameter :: swig_cmem_own_bit = 0 + integer, parameter :: swig_cmem_rvalue_bit = 1 + type, bind(C) :: SwigClassWrapper + type(C_PTR), public :: cptr = C_NULL_PTR + integer(C_INT), public :: cmemflags = 0 + end type + ! class std::vector< float > + type, public :: FloatVector + type(SwigClassWrapper), public :: swigdata + contains + procedure :: size => swigf_FloatVector_size + procedure :: capacity => swigf_FloatVector_capacity + procedure :: empty => swigf_FloatVector_empty + procedure :: front => swigf_FloatVector_front + procedure :: back => swigf_FloatVector_back + procedure :: reserve => swigf_FloatVector_reserve + procedure, private :: swigf_FloatVector_resize__SWIG_0 + procedure, private :: swigf_FloatVector_resize__SWIG_1 + procedure :: push_back => swigf_FloatVector_push_back + procedure :: pop_back => swigf_FloatVector_pop_back + procedure :: clear => swigf_FloatVector_clear + procedure :: set => swigf_FloatVector_set + procedure :: get => swigf_FloatVector_get + procedure :: insert => swigf_FloatVector_insert + procedure, private :: swigf_FloatVector_erase__SWIG_0 + procedure, private :: swigf_FloatVector_erase__SWIG_1 + procedure :: front_ref => swigf_FloatVector_front_ref + procedure :: back_ref => swigf_FloatVector_back_ref + procedure :: get_ref => swigf_FloatVector_get_ref + procedure :: release => swigf_FloatVector_release + procedure, private :: swigf_FloatVector_op_assign__ + generic :: resize => swigf_FloatVector_resize__SWIG_0, swigf_FloatVector_resize__SWIG_1 + generic :: assignment(=) => swigf_FloatVector_op_assign__ + generic :: erase => swigf_FloatVector_erase__SWIG_0, swigf_FloatVector_erase__SWIG_1 + end type FloatVector + ! class std::vector< SpecUtils::Measurement > + type, public :: MeasurementVector + type(SwigClassWrapper), public :: swigdata + contains + procedure :: size => swigf_MeasurementVector_size + procedure :: capacity => swigf_MeasurementVector_capacity + procedure :: empty => swigf_MeasurementVector_empty + procedure :: front => swigf_MeasurementVector_front + procedure :: back => swigf_MeasurementVector_back + procedure :: reserve => swigf_MeasurementVector_reserve + procedure, private :: swigf_MeasurementVector_resize__SWIG_0 + procedure, private :: swigf_MeasurementVector_resize__SWIG_1 + procedure :: push_back => swigf_MeasurementVector_push_back + procedure :: pop_back => swigf_MeasurementVector_pop_back + procedure :: clear => swigf_MeasurementVector_clear + procedure :: set => swigf_MeasurementVector_set + procedure :: get => swigf_MeasurementVector_get + procedure :: insert => swigf_MeasurementVector_insert + procedure, private :: swigf_MeasurementVector_erase__SWIG_0 + procedure, private :: swigf_MeasurementVector_erase__SWIG_1 + procedure :: front_ref => swigf_MeasurementVector_front_ref + procedure :: back_ref => swigf_MeasurementVector_back_ref + procedure :: get_ref => swigf_MeasurementVector_get_ref + procedure :: release => swigf_MeasurementVector_release + procedure, private :: swigf_MeasurementVector_op_assign__ + generic :: resize => swigf_MeasurementVector_resize__SWIG_0, swigf_MeasurementVector_resize__SWIG_1 + generic :: assignment(=) => swigf_MeasurementVector_op_assign__ + generic :: erase => swigf_MeasurementVector_erase__SWIG_0, swigf_MeasurementVector_erase__SWIG_1 + end type MeasurementVector + ! enum class SpecUtils::ParserType + enum, bind(c) + enumerator :: ParserType_N42_2006 + enumerator :: ParserType_N42_2012 + enumerator :: ParserType_Spc + enumerator :: ParserType_Exploranium + enumerator :: ParserType_Pcf + enumerator :: ParserType_Chn + enumerator :: ParserType_SpeIaea + enumerator :: ParserType_TxtOrCsv + enumerator :: ParserType_Cnf + enumerator :: ParserType_TracsMps + enumerator :: ParserType_Aram + enumerator :: ParserType_SPMDailyFile + enumerator :: ParserType_AmptekMca + enumerator :: ParserType_MicroRaider + enumerator :: ParserType_RadiaCode + enumerator :: ParserType_OrtecListMode + enumerator :: ParserType_LsrmSpe + enumerator :: ParserType_Tka + enumerator :: ParserType_MultiAct + enumerator :: ParserType_Phd + enumerator :: ParserType_Lzs + enumerator :: ParserType_ScanDataXml + enumerator :: ParserType_Json + enumerator :: ParserType_CaenHexagonGXml + enumerator :: ParserType_Auto + end enum + integer, parameter, public :: ParserType = kind(ParserType_N42_2006) + public :: ParserType_N42_2006, ParserType_N42_2012, ParserType_Spc, ParserType_Exploranium, ParserType_Pcf, ParserType_Chn, & + ParserType_SpeIaea, ParserType_TxtOrCsv, ParserType_Cnf, ParserType_TracsMps, ParserType_Aram, ParserType_SPMDailyFile, & + ParserType_AmptekMca, ParserType_MicroRaider, ParserType_RadiaCode, ParserType_OrtecListMode, ParserType_LsrmSpe, & + ParserType_Tka, ParserType_MultiAct, ParserType_Phd, ParserType_Lzs, ParserType_ScanDataXml, ParserType_Json, & + ParserType_CaenHexagonGXml, ParserType_Auto + ! enum class SpecUtils::SaveSpectrumAsType + enum, bind(c) + enumerator :: SaveSpectrumAsType_Txt + enumerator :: SaveSpectrumAsType_Csv + enumerator :: SaveSpectrumAsType_Pcf + enumerator :: SaveSpectrumAsType_N42_2006 + enumerator :: SaveSpectrumAsType_N42_2012 + enumerator :: SaveSpectrumAsType_Chn + enumerator :: SaveSpectrumAsType_SpcBinaryInt + enumerator :: SaveSpectrumAsType_SpcBinaryFloat + enumerator :: SaveSpectrumAsType_SpcAscii + enumerator :: SaveSpectrumAsType_ExploraniumGr130v0 + enumerator :: SaveSpectrumAsType_ExploraniumGr135v2 + enumerator :: SaveSpectrumAsType_SpeIaea + enumerator :: SaveSpectrumAsType_Cnf + enumerator :: SaveSpectrumAsType_Tka + enumerator :: SaveSpectrumAsType_NumTypes + end enum + integer, parameter, public :: SaveSpectrumAsType = kind(SaveSpectrumAsType_Txt) + public :: SaveSpectrumAsType_Txt, SaveSpectrumAsType_Csv, SaveSpectrumAsType_Pcf, SaveSpectrumAsType_N42_2006, & + SaveSpectrumAsType_N42_2012, SaveSpectrumAsType_Chn, SaveSpectrumAsType_SpcBinaryInt, SaveSpectrumAsType_SpcBinaryFloat, & + SaveSpectrumAsType_SpcAscii, SaveSpectrumAsType_ExploraniumGr130v0, SaveSpectrumAsType_ExploraniumGr135v2, & + SaveSpectrumAsType_SpeIaea, SaveSpectrumAsType_Cnf, SaveSpectrumAsType_Tka, SaveSpectrumAsType_NumTypes + ! enum class SpecUtils::DetectorType + enum, bind(c) + enumerator :: DetectorType_Exploranium + enumerator :: DetectorType_IdentiFinder + enumerator :: DetectorType_IdentiFinderNG + enumerator :: DetectorType_IdentiFinderLaBr3 + enumerator :: DetectorType_IdentiFinderTungsten + enumerator :: DetectorType_IdentiFinderR425NaI + enumerator :: DetectorType_IdentiFinderR425LaBr + enumerator :: DetectorType_IdentiFinderR500NaI + enumerator :: DetectorType_IdentiFinderR500LaBr + enumerator :: DetectorType_IdentiFinderUnknown + enumerator :: DetectorType_DetectiveUnknown + enumerator :: DetectorType_DetectiveEx + enumerator :: DetectorType_DetectiveEx100 + enumerator :: DetectorType_DetectiveEx200 + enumerator :: DetectorType_DetectiveX + enumerator :: DetectorType_SAIC8 + enumerator :: DetectorType_Falcon5000 + enumerator :: DetectorType_MicroDetective + enumerator :: DetectorType_MicroRaider + enumerator :: DetectorType_RadiaCode + enumerator :: DetectorType_Interceptor + enumerator :: DetectorType_RadHunterNaI + enumerator :: DetectorType_RadHunterLaBr3 + enumerator :: DetectorType_Rsi701 + enumerator :: DetectorType_Rsi705 + enumerator :: DetectorType_AvidRsi + enumerator :: DetectorType_OrtecRadEagleNai + enumerator :: DetectorType_OrtecRadEagleCeBr2Inch + enumerator :: DetectorType_OrtecRadEagleCeBr3Inch + enumerator :: DetectorType_OrtecRadEagleLaBr + enumerator :: DetectorType_Sam940LaBr3 + enumerator :: DetectorType_Sam940 + enumerator :: DetectorType_Sam945 + enumerator :: DetectorType_Srpm210 + enumerator :: DetectorType_RIIDEyeNaI + enumerator :: DetectorType_RIIDEyeLaBr + enumerator :: DetectorType_RadSeekerNaI + enumerator :: DetectorType_RadSeekerLaBr + enumerator :: DetectorType_VerifinderNaI + enumerator :: DetectorType_VerifinderLaBr + enumerator :: DetectorType_KromekD3S + enumerator :: DetectorType_Fulcrum + enumerator :: DetectorType_Fulcrum40h + enumerator :: DetectorType_Sam950 + enumerator :: DetectorType_Unknown + end enum + integer, parameter, public :: DetectorType = kind(DetectorType_Exploranium) + public :: DetectorType_Exploranium, DetectorType_IdentiFinder, DetectorType_IdentiFinderNG, DetectorType_IdentiFinderLaBr3, & + DetectorType_IdentiFinderTungsten, DetectorType_IdentiFinderR425NaI, DetectorType_IdentiFinderR425LaBr, & + DetectorType_IdentiFinderR500NaI, DetectorType_IdentiFinderR500LaBr, DetectorType_IdentiFinderUnknown, & + DetectorType_DetectiveUnknown, DetectorType_DetectiveEx, DetectorType_DetectiveEx100, DetectorType_DetectiveEx200, & + DetectorType_DetectiveX, DetectorType_SAIC8, DetectorType_Falcon5000, DetectorType_MicroDetective, DetectorType_MicroRaider, & + DetectorType_RadiaCode, DetectorType_Interceptor, DetectorType_RadHunterNaI, DetectorType_RadHunterLaBr3, & + DetectorType_Rsi701, DetectorType_Rsi705, DetectorType_AvidRsi, DetectorType_OrtecRadEagleNai, & + DetectorType_OrtecRadEagleCeBr2Inch, DetectorType_OrtecRadEagleCeBr3Inch, DetectorType_OrtecRadEagleLaBr, & + DetectorType_Sam940LaBr3, DetectorType_Sam940, DetectorType_Sam945, DetectorType_Srpm210, DetectorType_RIIDEyeNaI, & + DetectorType_RIIDEyeLaBr, DetectorType_RadSeekerNaI, DetectorType_RadSeekerLaBr, DetectorType_VerifinderNaI, & + DetectorType_VerifinderLaBr, DetectorType_KromekD3S, DetectorType_Fulcrum, DetectorType_Fulcrum40h, DetectorType_Sam950, & + DetectorType_Unknown + ! enum class SpecUtils::OccupancyStatus + enum, bind(c) + enumerator :: OccupancyStatus_NotOccupied + enumerator :: OccupancyStatus_Occupied + enumerator :: OccupancyStatus_Unknown + end enum + integer, parameter, public :: OccupancyStatus = kind(OccupancyStatus_NotOccupied) + public :: OccupancyStatus_NotOccupied, OccupancyStatus_Occupied, OccupancyStatus_Unknown + ! enum class SpecUtils::SourceType + enum, bind(c) + enumerator :: SourceType_IntrinsicActivity + enumerator :: SourceType_Calibration + enumerator :: SourceType_Background + enumerator :: SourceType_Foreground + enumerator :: SourceType_Unknown + end enum + integer, parameter, public :: SourceType = kind(SourceType_IntrinsicActivity) + public :: SourceType_IntrinsicActivity, SourceType_Calibration, SourceType_Background, SourceType_Foreground, & + SourceType_Unknown + ! enum class SpecUtils::QualityStatus + enum, bind(c) + enumerator :: QualityStatus_Good + enumerator :: QualityStatus_Suspect + enumerator :: QualityStatus_Bad + enumerator :: QualityStatus_Missing + end enum + integer, parameter, public :: QualityStatus = kind(QualityStatus_Good) + public :: QualityStatus_Good, QualityStatus_Suspect, QualityStatus_Bad, QualityStatus_Missing + ! enum class SpecUtils::SpectrumType + enum, bind(c) + enumerator :: SpectrumType_Foreground + enumerator :: SpectrumType_SecondForeground + enumerator :: SpectrumType_Background + end enum + integer, parameter, public :: SpectrumType = kind(SpectrumType_Foreground) + public :: SpectrumType_Foreground, SpectrumType_SecondForeground, SpectrumType_Background + type, bind(C) :: SwigArrayWrapper + type(C_PTR), public :: data = C_NULL_PTR + integer(C_SIZE_T), public :: size = 0 + end type + public :: spectrumTypeFromDescription + public :: suggestedNameEnding + public :: convert_n42_utf16_xml_to_utf8 + type, public :: SWIGTYPE_p_std__mutex + type(SwigClassWrapper), public :: swigdata + end type + type, public :: SWIGTYPE_p_rapidxml__xml_nodeT_char_t + type(SwigClassWrapper), public :: swigdata + end type + public :: add_analysis_results_to_2012_N42 + public :: set_analysis_info_from_n42 + public :: gamma_integral + public :: detectorTypeToString + type, public :: SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN + type(SwigClassWrapper), public :: swigdata + end type + type, public :: SWIGTYPE_p_std__vectorT_std__string_t + type(SwigClassWrapper), public :: swigdata + end type +integer, parameter, public :: SWIGTYPE_SpecUtils__EnergyCalType = C_INT + type, public :: SWIGTYPE_p_std__shared_ptrT_std__vectorT_float_t_const_t + type(SwigClassWrapper), public :: swigdata + end type + type, public :: SWIGTYPE_p_std__shared_ptrT_SpecUtils__LocationState_const_t + type(SwigClassWrapper), public :: swigdata + end type + ! enum class SpecUtils::Measurement::DerivedDataProperties + integer(C_INT), protected, public, & + bind(C, name="_wrap_Measurement_DerivedDataProperties_IsDerived") :: Measurement_DerivedDataProperties_IsDerived + integer(C_INT), protected, public, & + bind(C, name="_wrap_Measurement_DerivedDataProperties_ItemOfInterestSum") :: Measurement_DerivedDataProperties_ItemOfInterestSum + integer(C_INT), protected, public, & + bind(C, name="_wrap_Measurement_DerivedDataProperties_UsedForAnalysis") :: Measurement_DerivedDataProperties_UsedForAnalysis + integer(C_INT), protected, public, & + bind(C, name="_wrap_Measurement_DerivedDataProperties_ProcessedFurther") :: Measurement_DerivedDataProperties_ProcessedFurther + integer(C_INT), protected, public, & + bind(C, name="_wrap_Measurement_DerivedDataProperties_BackgroundSubtracted") :: Measurement_DerivedDataProperties_BackgroundSubtracted + integer(C_INT), protected, public, & + bind(C, name="_wrap_Measurement_DerivedDataProperties_IsBackground") :: Measurement_DerivedDataProperties_IsBackground + integer, parameter, public :: Measurement_DerivedDataProperties = C_INT + type, public :: SWIGTYPE_p_uint32_t + type(SwigClassWrapper), public :: swigdata + end type + type, public :: SWIGTYPE_p_std__ostream + type(SwigClassWrapper), public :: swigdata + end type + type, public :: SWIGTYPE_p_p_rapidxml__xml_nodeT_char_t + type(SwigClassWrapper), public :: swigdata + end type + ! class SpecUtils::Measurement + type, public :: Measurement + type(SwigClassWrapper), public :: swigdata + contains + procedure :: release => swigf_Measurement_release + procedure :: memmorysize => swigf_Measurement_memmorysize + procedure :: live_time => swigf_Measurement_live_time + procedure :: set_live_time => swigf_Measurement_set_live_time + procedure :: real_time => swigf_Measurement_real_time + procedure :: set_real_time => swigf_Measurement_set_real_time + procedure :: contained_neutron => swigf_Measurement_contained_neutron + procedure :: sample_number => swigf_Measurement_sample_number + procedure :: title => swigf_Measurement_title + procedure :: occupied => swigf_Measurement_occupied + procedure :: gamma_count_sum => swigf_Measurement_gamma_count_sum + procedure :: neutron_live_time => swigf_Measurement_neutron_live_time + procedure :: neutron_counts_sum => swigf_Measurement_neutron_counts_sum + procedure :: speed => swigf_Measurement_speed + procedure :: dx => swigf_Measurement_dx + procedure :: dy => swigf_Measurement_dy + procedure :: latitude => swigf_Measurement_latitude + procedure :: longitude => swigf_Measurement_longitude + procedure :: has_gps_info => swigf_Measurement_has_gps_info + procedure :: dose_rate => swigf_Measurement_dose_rate + procedure :: exposure_rate => swigf_Measurement_exposure_rate + procedure :: pcf_tag => swigf_Measurement_pcf_tag + procedure :: source_description => swigf_Measurement_source_description + procedure :: measurement_description => swigf_Measurement_measurement_description + procedure :: position_time => swigf_Measurement_position_time + procedure :: detector_name => swigf_Measurement_detector_name + procedure :: update_detector_name_from_title => swigf_Measurement_update_detector_name_from_title + procedure :: detector_number => swigf_Measurement_detector_number + procedure :: detector_type => swigf_Measurement_detector_type + procedure :: quality_status => swigf_Measurement_quality_status + procedure :: source_type => swigf_Measurement_source_type + procedure :: remarks => swigf_Measurement_remarks + procedure :: mutable_remarks => swigf_Measurement_mutable_remarks + procedure :: parse_warnings => swigf_Measurement_parse_warnings + procedure :: start_time => swigf_Measurement_start_time + procedure :: start_time_copy => swigf_Measurement_start_time_copy + procedure :: energy_calibration_model => swigf_Measurement_energy_calibration_model + procedure :: calibration_coeffs => swigf_Measurement_calibration_coeffs + procedure :: deviation_pairs => swigf_Measurement_deviation_pairs + procedure :: energy_calibration => swigf_Measurement_energy_calibration + procedure :: mutable_energy_calibration => swigf_Measurement_mutable_energy_calibration + procedure :: channel_energies => swigf_Measurement_channel_energies + procedure :: gamma_counts => swigf_Measurement_gamma_counts + procedure :: neutron_counts => swigf_Measurement_neutron_counts + procedure :: location_state => swigf_Measurement_location_state + procedure :: set_title => swigf_Measurement_set_title + procedure :: set_start_time => swigf_Measurement_set_start_time + procedure :: set_remarks => swigf_Measurement_set_remarks + procedure :: set_parse_warnings => swigf_Measurement_set_parse_warnings + procedure :: set_source_type => swigf_Measurement_set_source_type + procedure :: set_position => swigf_Measurement_set_position + procedure :: set_sample_number => swigf_Measurement_set_sample_number + procedure :: set_occupancy_status => swigf_Measurement_set_occupancy_status + procedure :: set_detector_name => swigf_Measurement_set_detector_name + procedure :: set_detector_number => swigf_Measurement_set_detector_number + procedure, private :: swigf_Measurement_set_neutron_counts__SWIG_0 + procedure, private :: swigf_Measurement_set_neutron_counts__SWIG_1 + procedure :: set_pcf_tag => swigf_Measurement_set_pcf_tag + procedure :: set_source_description => swigf_Measurement_set_source_description + procedure :: set_measurement_description => swigf_Measurement_set_measurement_description + procedure :: num_gamma_channels => swigf_Measurement_num_gamma_channels + procedure :: find_gamma_channel => swigf_Measurement_find_gamma_channel + procedure :: gamma_channel_content => swigf_Measurement_gamma_channel_content + procedure :: gamma_channel_lower => swigf_Measurement_gamma_channel_lower + procedure :: gamma_channel_center => swigf_Measurement_gamma_channel_center + procedure :: gamma_channel_upper => swigf_Measurement_gamma_channel_upper + procedure :: gamma_channel_width => swigf_Measurement_gamma_channel_width + procedure :: gamma_integral => swigf_Measurement_gamma_integral + procedure :: gamma_channels_sum => swigf_Measurement_gamma_channels_sum + procedure :: gamma_channel_energies => swigf_Measurement_gamma_channel_energies + procedure :: gamma_channel_contents => swigf_Measurement_gamma_channel_contents + procedure :: gamma_energy_min => swigf_Measurement_gamma_energy_min + procedure :: gamma_energy_max => swigf_Measurement_gamma_energy_max + procedure :: derived_data_properties => swigf_Measurement_derived_data_properties + procedure :: rpm_panel_number => swigf_Measurement_rpm_panel_number + procedure :: rpm_column_number => swigf_Measurement_rpm_column_number + procedure :: rpm_mca_number => swigf_Measurement_rpm_mca_number + procedure :: write_2006_N42_xml => swigf_Measurement_write_2006_N42_xml + procedure :: write_csv => swigf_Measurement_write_csv + procedure :: write_txt => swigf_Measurement_write_txt + procedure :: reset => swigf_Measurement_reset + procedure :: rebin => swigf_Measurement_rebin + procedure :: set_energy_calibration => swigf_Measurement_set_energy_calibration + procedure :: set_ecal => swigf_Measurement_set_ecal + procedure :: set_info_from_2006_N42_spectrum_node => swigf_Measurement_set_info_from_2006_N42_spectrum_node + procedure :: gamma_count_at => swigf_Measurement_gamma_count_at + procedure :: get_num_channels => swigf_Measurement_get_num_channels + procedure :: get_start_time_string => swigf_Measurement_get_start_time_string + procedure :: set_start_time_from_string => swigf_Measurement_set_start_time_from_string + procedure :: set_neutron_count => swigf_Measurement_set_neutron_count + procedure :: get_neutron_count => swigf_Measurement_get_neutron_count + procedure :: set_spectrum => swigf_Measurement_set_spectrum + procedure :: get_spectrum => swigf_Measurement_get_spectrum + procedure, private :: swigf_Measurement_op_assign__ + generic :: assignment(=) => swigf_Measurement_op_assign__ + generic :: set_neutron_counts => swigf_Measurement_set_neutron_counts__SWIG_0, swigf_Measurement_set_neutron_counts__SWIG_1 + end type Measurement + type, public :: SWIGTYPE_p_std__vectorT_int_t + type(SwigClassWrapper), public :: swigdata + end type + type, public :: SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2 + type(SwigClassWrapper), public :: swigdata + end type + type, public :: SWIGTYPE_p_std__vectorT_std__shared_ptrT_SpecUtils__MeasurVEY9A + type(SwigClassWrapper), public :: swigdata + end type + type, public :: SWIGTYPE_p_std__shared_ptrT_SpecUtils__DetectorAnalysis_const_t + type(SwigClassWrapper), public :: swigdata + end type + type, public :: SWIGTYPE_p_std__vectorT_std__shared_ptrT_SpecUtils__Multi1X71T7 + type(SwigClassWrapper), public :: swigdata + end type + type, public :: SWIGTYPE_p_std__vectorT_std__pairT_int_int_t_t + type(SwigClassWrapper), public :: swigdata + end type + type, public :: SWIGTYPE_p_std__setT_size_t_std__lessT_size_t_t_std__allocYIIZM + type(SwigClassWrapper), public :: swigdata + end type + type, public :: SWIGTYPE_p_std__setT_std__string_std__lessT_std__string_t1Q4VKZ + type(SwigClassWrapper), public :: swigdata + end type + ! enum class SpecUtils::SpecFile::DerivedVariantToKeep + enum, bind(c) + enumerator :: SpecFile_DerivedVariantToKeep_NonDerived + enumerator :: SpecFile_DerivedVariantToKeep_Derived + end enum + integer, parameter, public :: SpecFile_DerivedVariantToKeep = kind(SpecFile_DerivedVariantToKeep_NonDerived) + public :: SpecFile_DerivedVariantToKeep_NonDerived, SpecFile_DerivedVariantToKeep_Derived + type, public :: SWIGTYPE_p_std__istream + type(SwigClassWrapper), public :: swigdata + end type + ! enum SpecUtils::SpecFile::CleanupAfterLoadFlags + integer(C_INT), protected, public, & + bind(C, name="_wrap_SpecFile_RebinToCommonBinning") :: SpecFile_RebinToCommonBinning + integer(C_INT), protected, public, & + bind(C, name="_wrap_SpecFile_DontChangeOrReorderSamples") :: SpecFile_DontChangeOrReorderSamples + integer(C_INT), protected, public, & + bind(C, name="_wrap_SpecFile_ReorderSamplesByTime") :: SpecFile_ReorderSamplesByTime + integer(C_INT), protected, public, & + bind(C, name="_wrap_SpecFile_StandardCleanup") :: SpecFile_StandardCleanup + integer, parameter, public :: SpecFile_CleanupAfterLoadFlags = C_INT + ! enum SpecUtils::SpecFile::SpcBinaryType + enum, bind(c) + enumerator :: SpecFile_IntegerSpcType + enumerator :: SpecFile_FloatSpcType + end enum + integer, parameter, public :: SpecFile_SpcBinaryType = kind(SpecFile_IntegerSpcType) + public :: SpecFile_IntegerSpcType, SpecFile_FloatSpcType + public :: get_SpecFile_2012N42_VERSION + type, public :: SWIGTYPE_p_std__shared_ptrT_rapidxml__xml_documentT_char_t_t + type(SwigClassWrapper), public :: swigdata + end type + type, public :: SWIGTYPE_p_std__recursive_mutex + type(SwigClassWrapper), public :: swigdata + end type + ! class SpecUtils::SpecFile + type, public :: SpecFile + type(SwigClassWrapper), public :: swigdata + contains + procedure :: release => swigf_SpecFile_release + procedure, private :: swigf_SpecFile_load_file__SWIG_0 + procedure, private :: swigf_SpecFile_load_file__SWIG_1 + procedure :: parse_warnings => swigf_SpecFile_parse_warnings + procedure :: modified => swigf_SpecFile_modified + procedure :: reset_modified => swigf_SpecFile_reset_modified + procedure :: modified_since_decode => swigf_SpecFile_modified_since_decode + procedure :: reset_modified_since_decode => swigf_SpecFile_reset_modified_since_decode + procedure :: gamma_live_time => swigf_SpecFile_gamma_live_time + procedure :: gamma_real_time => swigf_SpecFile_gamma_real_time + procedure :: gamma_count_sum => swigf_SpecFile_gamma_count_sum + procedure :: neutron_counts_sum => swigf_SpecFile_neutron_counts_sum + procedure :: filename => swigf_SpecFile_filename + procedure :: detector_names => swigf_SpecFile_detector_names + procedure :: detector_numbers => swigf_SpecFile_detector_numbers + procedure :: gamma_detector_names => swigf_SpecFile_gamma_detector_names + procedure :: neutron_detector_names => swigf_SpecFile_neutron_detector_names + procedure :: uuid => swigf_SpecFile_uuid + procedure :: remarks => swigf_SpecFile_remarks + procedure :: lane_number => swigf_SpecFile_lane_number + procedure :: measurement_location_name => swigf_SpecFile_measurement_location_name + procedure :: inspection => swigf_SpecFile_inspection + procedure :: measurement_operator => swigf_SpecFile_measurement_operator + procedure :: sample_numbers => swigf_SpecFile_sample_numbers + procedure :: num_measurements => swigf_SpecFile_num_measurements + procedure :: detector_type => swigf_SpecFile_detector_type + procedure :: instrument_type => swigf_SpecFile_instrument_type + procedure :: manufacturer => swigf_SpecFile_manufacturer + procedure :: instrument_model => swigf_SpecFile_instrument_model + procedure :: instrument_id => swigf_SpecFile_instrument_id + procedure :: measurements => swigf_SpecFile_measurements + procedure, private :: swigf_SpecFile_measurement__SWIG_0 + procedure :: detectors_analysis => swigf_SpecFile_detectors_analysis + procedure :: multimedia_data => swigf_SpecFile_multimedia_data + procedure :: has_gps_info => swigf_SpecFile_has_gps_info + procedure :: mean_latitude => swigf_SpecFile_mean_latitude + procedure :: mean_longitude => swigf_SpecFile_mean_longitude + procedure :: passthrough => swigf_SpecFile_passthrough + procedure :: contains_derived_data => swigf_SpecFile_contains_derived_data + procedure :: contains_non_derived_data => swigf_SpecFile_contains_non_derived_data + procedure :: set_filename => swigf_SpecFile_set_filename + procedure, private :: swigf_SpecFile_set_remarks__SWIG_0 + procedure :: add_remark => swigf_SpecFile_add_remark + procedure :: set_parse_warnings => swigf_SpecFile_set_parse_warnings + procedure :: set_uuid => swigf_SpecFile_set_uuid + procedure :: set_lane_number => swigf_SpecFile_set_lane_number + procedure :: set_measurement_location_name => swigf_SpecFile_set_measurement_location_name + procedure :: set_inspection => swigf_SpecFile_set_inspection + procedure :: set_instrument_type => swigf_SpecFile_set_instrument_type + procedure :: set_detector_type => swigf_SpecFile_set_detector_type + procedure :: set_manufacturer => swigf_SpecFile_set_manufacturer + procedure :: set_instrument_model => swigf_SpecFile_set_instrument_model + procedure :: set_instrument_id => swigf_SpecFile_set_instrument_id + procedure :: set_live_time => swigf_SpecFile_set_live_time + procedure :: set_real_time => swigf_SpecFile_set_real_time + procedure :: set_start_time => swigf_SpecFile_set_start_time + procedure, private :: swigf_SpecFile_set_remarks__SWIG_1 + procedure :: set_source_type => swigf_SpecFile_set_source_type + procedure :: set_position => swigf_SpecFile_set_position + procedure :: set_title => swigf_SpecFile_set_title + procedure :: set_contained_neutrons => swigf_SpecFile_set_contained_neutrons + procedure :: set_detectors_analysis => swigf_SpecFile_set_detectors_analysis + procedure :: change_detector_name => swigf_SpecFile_change_detector_name + procedure :: change_sample_numbers => swigf_SpecFile_change_sample_numbers + procedure, private :: swigf_SpecFile_add_measurement__SWIG_0 + procedure, private :: swigf_SpecFile_add_measurement__SWIG_1 + procedure :: remove_measurement => swigf_SpecFile_remove_measurement + procedure :: remove_measurements => swigf_SpecFile_remove_measurements + procedure :: clear_multimedia_data => swigf_SpecFile_clear_multimedia_data + procedure :: add_multimedia_data => swigf_SpecFile_add_multimedia_data + procedure :: set_multimedia_data => swigf_SpecFile_set_multimedia_data + procedure :: occupancy_number_from_remarks => swigf_SpecFile_occupancy_number_from_remarks + procedure :: sample_measurements => swigf_SpecFile_sample_measurements + procedure, private :: swigf_SpecFile_measurement__SWIG_1 + procedure, private :: swigf_SpecFile_measurement__SWIG_2 + procedure :: suggested_sum_energy_calibration => swigf_SpecFile_suggested_sum_energy_calibration + procedure :: sum_measurements => swigf_SpecFile_sum_measurements + procedure :: memmorysize => swigf_SpecFile_memmorysize + procedure :: gamma_channel_counts => swigf_SpecFile_gamma_channel_counts + procedure :: num_gamma_channels => swigf_SpecFile_num_gamma_channels + procedure :: keep_n_bin_spectra_only => swigf_SpecFile_keep_n_bin_spectra_only + procedure :: contained_neutron => swigf_SpecFile_contained_neutron + procedure :: energy_cal_variants => swigf_SpecFile_energy_cal_variants + procedure :: keep_energy_cal_variants => swigf_SpecFile_keep_energy_cal_variants + procedure :: keep_derived_data_variant => swigf_SpecFile_keep_derived_data_variant + procedure :: remove_detectors_data => swigf_SpecFile_remove_detectors_data + procedure :: remove_neutron_measurements => swigf_SpecFile_remove_neutron_measurements + procedure :: background_sample_number => swigf_SpecFile_background_sample_number + procedure :: generate_psuedo_uuid => swigf_SpecFile_generate_psuedo_uuid + procedure :: reset => swigf_SpecFile_reset + procedure :: load_N42_file => swigf_SpecFile_load_N42_file + procedure :: load_pcf_file => swigf_SpecFile_load_pcf_file + procedure :: load_spc_file => swigf_SpecFile_load_spc_file + procedure :: load_chn_file => swigf_SpecFile_load_chn_file + procedure :: load_iaea_file => swigf_SpecFile_load_iaea_file + procedure :: load_binary_exploranium_file => swigf_SpecFile_load_binary_exploranium_file + procedure :: load_micro_raider_file => swigf_SpecFile_load_micro_raider_file + procedure :: load_txt_or_csv_file => swigf_SpecFile_load_txt_or_csv_file + procedure :: load_cnf_file => swigf_SpecFile_load_cnf_file + procedure :: load_tracs_mps_file => swigf_SpecFile_load_tracs_mps_file + procedure :: load_aram_file => swigf_SpecFile_load_aram_file + procedure :: load_spectroscopic_daily_file => swigf_SpecFile_load_spectroscopic_daily_file + procedure :: load_amptek_file => swigf_SpecFile_load_amptek_file + procedure :: load_ortec_listmode_file => swigf_SpecFile_load_ortec_listmode_file + procedure :: load_lsrm_spe_file => swigf_SpecFile_load_lsrm_spe_file + procedure :: load_tka_file => swigf_SpecFile_load_tka_file + procedure :: load_multiact_file => swigf_SpecFile_load_multiact_file + procedure :: load_phd_file => swigf_SpecFile_load_phd_file + procedure :: load_lzs_file => swigf_SpecFile_load_lzs_file + procedure :: load_radiacode_file => swigf_SpecFile_load_radiacode_file + procedure :: load_xml_scan_data_file => swigf_SpecFile_load_xml_scan_data_file + procedure :: load_json_file => swigf_SpecFile_load_json_file + procedure :: load_caen_gxml_file => swigf_SpecFile_load_caen_gxml_file + procedure :: load_from_N42 => swigf_SpecFile_load_from_N42 + procedure, private :: swigf_SpecFile_load_N42_from_data__SWIG_0 + procedure, private :: swigf_SpecFile_load_N42_from_data__SWIG_1 + procedure :: load_from_iaea_spc => swigf_SpecFile_load_from_iaea_spc + procedure :: load_from_binary_spc => swigf_SpecFile_load_from_binary_spc + procedure :: load_from_N42_document => swigf_SpecFile_load_from_N42_document + procedure :: load_from_micro_raider_from_data => swigf_SpecFile_load_from_micro_raider_from_data + procedure :: load_from_binary_exploranium => swigf_SpecFile_load_from_binary_exploranium + procedure :: load_from_pcf => swigf_SpecFile_load_from_pcf + procedure :: load_from_txt_or_csv => swigf_SpecFile_load_from_txt_or_csv + procedure :: load_from_Gr135_txt => swigf_SpecFile_load_from_Gr135_txt + procedure :: load_from_spectroscopic_daily_file => swigf_SpecFile_load_from_spectroscopic_daily_file + procedure :: load_from_srpm210_csv => swigf_SpecFile_load_from_srpm210_csv + procedure :: load_from_D3S_raw => swigf_SpecFile_load_from_D3S_raw + procedure :: load_from_amptek_mca => swigf_SpecFile_load_from_amptek_mca + procedure :: load_from_ortec_listmode => swigf_SpecFile_load_from_ortec_listmode + procedure :: load_from_lsrm_spe => swigf_SpecFile_load_from_lsrm_spe + procedure :: load_from_tka => swigf_SpecFile_load_from_tka + procedure :: load_from_multiact => swigf_SpecFile_load_from_multiact + procedure :: load_from_phd => swigf_SpecFile_load_from_phd + procedure :: load_from_lzs => swigf_SpecFile_load_from_lzs + procedure :: load_from_radiacode => swigf_SpecFile_load_from_radiacode + procedure :: load_from_radiacode_spectrogram => swigf_SpecFile_load_from_radiacode_spectrogram + procedure :: load_from_xml_scan_data => swigf_SpecFile_load_from_xml_scan_data + procedure :: load_from_iaea => swigf_SpecFile_load_from_iaea + procedure :: load_from_chn => swigf_SpecFile_load_from_chn + procedure :: load_from_cnf => swigf_SpecFile_load_from_cnf + procedure :: load_from_tracs_mps => swigf_SpecFile_load_from_tracs_mps + procedure :: load_from_aram => swigf_SpecFile_load_from_aram + procedure :: load_from_json => swigf_SpecFile_load_from_json + procedure :: load_from_caen_gxml => swigf_SpecFile_load_from_caen_gxml + procedure, private :: swigf_SpecFile_cleanup_after_load__SWIG_0 + procedure, private :: swigf_SpecFile_cleanup_after_load__SWIG_1 + procedure :: recalc_total_counts => swigf_SpecFile_recalc_total_counts + procedure :: merge_neutron_meas_into_gamma_meas => swigf_SpecFile_merge_neutron_meas_into_gamma_meas + procedure :: rebin_measurement => swigf_SpecFile_rebin_measurement + procedure :: rebin_all_measurements => swigf_SpecFile_rebin_all_measurements + procedure :: set_energy_calibration_from_CALp_file => swigf_SpecFile_set_energy_calibration_from_CALp_file + procedure :: detector_names_to_numbers => swigf_SpecFile_detector_names_to_numbers + procedure, private :: swigf_SpecFile_write_to_file__SWIG_0 + procedure, private :: swigf_SpecFile_write_to_file__SWIG_1 + procedure, private :: swigf_SpecFile_write_to_file__SWIG_2 + procedure, private :: swigf_SpecFile_write_to_file__SWIG_3 + procedure, private :: swigf_SpecFile_write__SWIG_0 + procedure, private :: swigf_SpecFile_write__SWIG_1 + procedure :: write_pcf => swigf_SpecFile_write_pcf + procedure :: write_2006_N42 => swigf_SpecFile_write_2006_N42 + procedure :: write_csv => swigf_SpecFile_write_csv + procedure :: write_txt => swigf_SpecFile_write_txt + procedure, private :: swigf_SpecFile_write_integer_chn__SWIG_0 + procedure, private :: swigf_SpecFile_write_integer_chn__SWIG_1 + procedure :: write_binary_spc => swigf_SpecFile_write_binary_spc + procedure :: write_ascii_spc => swigf_SpecFile_write_ascii_spc + procedure :: write_binary_exploranium_gr130v0 => swigf_SpecFile_write_binary_exploranium_gr130v0 + procedure :: write_binary_exploranium_gr135v2 => swigf_SpecFile_write_binary_exploranium_gr135v2 + procedure :: write_iaea_spe => swigf_SpecFile_write_iaea_spe + procedure :: write_cnf => swigf_SpecFile_write_cnf + procedure :: write_tka => swigf_SpecFile_write_tka + procedure :: create_2012_N42_xml => swigf_SpecFile_create_2012_N42_xml + procedure :: write_2012_N42 => swigf_SpecFile_write_2012_N42 + procedure :: mutex => swigf_SpecFile_mutex + procedure :: measurement_at => swigf_SpecFile_measurement_at + procedure :: get_max_channel_count => swigf_SpecFile_get_max_channel_count + procedure, private :: swigf_SpecFile_op_assign__ + generic :: measurement => swigf_SpecFile_measurement__SWIG_0, swigf_SpecFile_measurement__SWIG_1, & + swigf_SpecFile_measurement__SWIG_2 + generic :: write => swigf_SpecFile_write__SWIG_0, swigf_SpecFile_write__SWIG_1 + generic :: write_integer_chn => swigf_SpecFile_write_integer_chn__SWIG_0, swigf_SpecFile_write_integer_chn__SWIG_1 + generic :: cleanup_after_load => swigf_SpecFile_cleanup_after_load__SWIG_0, swigf_SpecFile_cleanup_after_load__SWIG_1 + generic :: add_measurement => swigf_SpecFile_add_measurement__SWIG_0, swigf_SpecFile_add_measurement__SWIG_1 + generic :: assignment(=) => swigf_SpecFile_op_assign__ + generic :: set_remarks => swigf_SpecFile_set_remarks__SWIG_0, swigf_SpecFile_set_remarks__SWIG_1 + generic :: load_N42_from_data => swigf_SpecFile_load_N42_from_data__SWIG_0, swigf_SpecFile_load_N42_from_data__SWIG_1 + generic :: load_file => swigf_SpecFile_load_file__SWIG_0, swigf_SpecFile_load_file__SWIG_1 + generic :: write_to_file => swigf_SpecFile_write_to_file__SWIG_0, swigf_SpecFile_write_to_file__SWIG_1, & + swigf_SpecFile_write_to_file__SWIG_2, swigf_SpecFile_write_to_file__SWIG_3 + end type SpecFile + ! class SpecUtils::DetectorAnalysisResult + type, public :: DetectorAnalysisResult + type(SwigClassWrapper), public :: swigdata + contains + procedure :: set_remark_ => swigf_DetectorAnalysisResult_remark__set + procedure :: get_remark_ => swigf_DetectorAnalysisResult_remark__get + procedure :: set_nuclide_ => swigf_DetectorAnalysisResult_nuclide__set + procedure :: get_nuclide_ => swigf_DetectorAnalysisResult_nuclide__get + procedure :: set_activity_ => swigf_DetectorAnalysisResult_activity__set + procedure :: get_activity_ => swigf_DetectorAnalysisResult_activity__get + procedure :: set_nuclide_type_ => swigf_DetectorAnalysisResult_nuclide_type__set + procedure :: get_nuclide_type_ => swigf_DetectorAnalysisResult_nuclide_type__get + procedure :: set_id_confidence_ => swigf_DetectorAnalysisResult_id_confidence__set + procedure :: get_id_confidence_ => swigf_DetectorAnalysisResult_id_confidence__get + procedure :: set_distance_ => swigf_DetectorAnalysisResult_distance__set + procedure :: get_distance_ => swigf_DetectorAnalysisResult_distance__get + procedure :: set_dose_rate_ => swigf_DetectorAnalysisResult_dose_rate__set + procedure :: get_dose_rate_ => swigf_DetectorAnalysisResult_dose_rate__get + procedure :: set_real_time_ => swigf_DetectorAnalysisResult_real_time__set + procedure :: get_real_time_ => swigf_DetectorAnalysisResult_real_time__get + procedure :: set_detector_ => swigf_DetectorAnalysisResult_detector__set + procedure :: get_detector_ => swigf_DetectorAnalysisResult_detector__get + procedure :: reset => swigf_DetectorAnalysisResult_reset + procedure :: isEmpty => swigf_DetectorAnalysisResult_isEmpty + procedure :: release => swigf_DetectorAnalysisResult_release + procedure, private :: swigf_DetectorAnalysisResult_op_assign__ + generic :: assignment(=) => swigf_DetectorAnalysisResult_op_assign__ + end type DetectorAnalysisResult + type, public :: SWIGTYPE_p_std__vectorT_std__pairT_std__string_std__string_t_t + type(SwigClassWrapper), public :: swigdata + end type + type, public :: SWIGTYPE_p_std__vectorT_SpecUtils__DetectorAnalysisResult_t + type(SwigClassWrapper), public :: swigdata + end type + ! class SpecUtils::DetectorAnalysis + type, public :: DetectorAnalysis + type(SwigClassWrapper), public :: swigdata + contains + procedure :: set_remarks_ => swigf_DetectorAnalysis_remarks__set + procedure :: get_remarks_ => swigf_DetectorAnalysis_remarks__get + procedure :: set_algorithm_name_ => swigf_DetectorAnalysis_algorithm_name__set + procedure :: get_algorithm_name_ => swigf_DetectorAnalysis_algorithm_name__get + procedure :: set_algorithm_component_versions_ => swigf_DetectorAnalysis_algorithm_component_versions__set + procedure :: get_algorithm_component_versions_ => swigf_DetectorAnalysis_algorithm_component_versions__get + procedure :: set_algorithm_creator_ => swigf_DetectorAnalysis_algorithm_creator__set + procedure :: get_algorithm_creator_ => swigf_DetectorAnalysis_algorithm_creator__get + procedure :: set_algorithm_description_ => swigf_DetectorAnalysis_algorithm_description__set + procedure :: get_algorithm_description_ => swigf_DetectorAnalysis_algorithm_description__get + procedure :: set_analysis_start_time_ => swigf_DetectorAnalysis_analysis_start_time__set + procedure :: get_analysis_start_time_ => swigf_DetectorAnalysis_analysis_start_time__get + procedure :: set_analysis_computation_duration_ => swigf_DetectorAnalysis_analysis_computation_duration__set + procedure :: get_analysis_computation_duration_ => swigf_DetectorAnalysis_analysis_computation_duration__get + procedure :: set_algorithm_result_description_ => swigf_DetectorAnalysis_algorithm_result_description__set + procedure :: get_algorithm_result_description_ => swigf_DetectorAnalysis_algorithm_result_description__get + procedure :: set_results_ => swigf_DetectorAnalysis_results__set + procedure :: get_results_ => swigf_DetectorAnalysis_results__get + procedure :: reset => swigf_DetectorAnalysis_reset + procedure :: is_empty => swigf_DetectorAnalysis_is_empty + procedure :: release => swigf_DetectorAnalysis_release + procedure, private :: swigf_DetectorAnalysis_op_assign__ + generic :: assignment(=) => swigf_DetectorAnalysis_op_assign__ + end type DetectorAnalysis + type, public :: SWIGTYPE_p_std__vectorT_char_t + type(SwigClassWrapper), public :: swigdata + end type + ! enum class SpecUtils::MultimediaData::EncodingType + enum, bind(c) + enumerator :: MultimediaData_EncodingType_BinaryUTF8 + enumerator :: MultimediaData_EncodingType_BinaryHex + enumerator :: MultimediaData_EncodingType_BinaryBase64 + end enum + integer, parameter, public :: MultimediaData_EncodingType = kind(MultimediaData_EncodingType_BinaryUTF8) + public :: MultimediaData_EncodingType_BinaryUTF8, MultimediaData_EncodingType_BinaryHex, & + MultimediaData_EncodingType_BinaryBase64 + ! struct SpecUtils::MultimediaData + type, public :: MultimediaData + type(SwigClassWrapper), public :: swigdata + contains + procedure :: set_remark_ => swigf_MultimediaData_remark__set + procedure :: get_remark_ => swigf_MultimediaData_remark__get + procedure :: set_descriptions_ => swigf_MultimediaData_descriptions__set + procedure :: get_descriptions_ => swigf_MultimediaData_descriptions__get + procedure :: set_data_ => swigf_MultimediaData_data__set + procedure :: get_data_ => swigf_MultimediaData_data__get + procedure :: set_data_encoding_ => swigf_MultimediaData_data_encoding__set + procedure :: get_data_encoding_ => swigf_MultimediaData_data_encoding__get + procedure :: set_capture_start_time_ => swigf_MultimediaData_capture_start_time__set + procedure :: get_capture_start_time_ => swigf_MultimediaData_capture_start_time__get + procedure :: set_file_uri_ => swigf_MultimediaData_file_uri__set + procedure :: get_file_uri_ => swigf_MultimediaData_file_uri__get + procedure :: set_mime_type_ => swigf_MultimediaData_mime_type__set + procedure :: get_mime_type_ => swigf_MultimediaData_mime_type__get + procedure :: release => swigf_MultimediaData_release + procedure, private :: swigf_MultimediaData_op_assign__ + generic :: assignment(=) => swigf_MultimediaData_op_assign__ + end type MultimediaData + public :: pcf_det_name_to_dev_pair_index + ! struct std::pair< float,float > + type, public :: DevPair + type(SwigClassWrapper), public :: swigdata + contains + procedure :: set_first => swigf_DevPair_first_set + procedure :: get_first => swigf_DevPair_first_get + procedure :: set_second => swigf_DevPair_second_set + procedure :: get_second => swigf_DevPair_second_get + procedure :: release => swigf_DevPair_release + procedure, private :: swigf_DevPair_op_assign__ + generic :: assignment(=) => swigf_DevPair_op_assign__ + end type DevPair + ! class std::vector< std::pair< float,float > > + type, public :: DeviationPairs + type(SwigClassWrapper), public :: swigdata + contains + procedure :: size => swigf_DeviationPairs_size + procedure :: capacity => swigf_DeviationPairs_capacity + procedure :: empty => swigf_DeviationPairs_empty + procedure :: front => swigf_DeviationPairs_front + procedure :: back => swigf_DeviationPairs_back + procedure :: reserve => swigf_DeviationPairs_reserve + procedure, private :: swigf_DeviationPairs_resize__SWIG_0 + procedure, private :: swigf_DeviationPairs_resize__SWIG_1 + procedure :: push_back => swigf_DeviationPairs_push_back + procedure :: pop_back => swigf_DeviationPairs_pop_back + procedure :: clear => swigf_DeviationPairs_clear + procedure :: set => swigf_DeviationPairs_set + procedure :: get => swigf_DeviationPairs_get + procedure :: insert => swigf_DeviationPairs_insert + procedure, private :: swigf_DeviationPairs_erase__SWIG_0 + procedure, private :: swigf_DeviationPairs_erase__SWIG_1 + procedure :: front_ref => swigf_DeviationPairs_front_ref + procedure :: back_ref => swigf_DeviationPairs_back_ref + procedure :: get_ref => swigf_DeviationPairs_get_ref + procedure :: release => swigf_DeviationPairs_release + procedure, private :: swigf_DeviationPairs_op_assign__ + generic :: resize => swigf_DeviationPairs_resize__SWIG_0, swigf_DeviationPairs_resize__SWIG_1 + generic :: assignment(=) => swigf_DeviationPairs_op_assign__ + generic :: erase => swigf_DeviationPairs_erase__SWIG_0, swigf_DeviationPairs_erase__SWIG_1 + end type DeviationPairs + ! enum class SpecUtils::EnergyCalType + enum, bind(c) + enumerator :: EnergyCalType_Polynomial + enumerator :: EnergyCalType_FullRangeFraction + enumerator :: EnergyCalType_LowerChannelEdge + enumerator :: EnergyCalType_UnspecifiedUsingDefaultPolynomial + enumerator :: EnergyCalType_InvalidEquationType + end enum + integer, parameter, public :: EnergyCalType = kind(EnergyCalType_Polynomial) + public :: EnergyCalType_Polynomial, EnergyCalType_FullRangeFraction, EnergyCalType_LowerChannelEdge, & + EnergyCalType_UnspecifiedUsingDefaultPolynomial, EnergyCalType_InvalidEquationType + ! struct SpecUtils::EnergyCalibration + type, public :: EnergyCalibration + type(SwigClassWrapper), public :: swigdata + contains + procedure :: type => swigf_EnergyCalibration_type + procedure :: valid => swigf_EnergyCalibration_valid + procedure :: coefficients => swigf_EnergyCalibration_coefficients + procedure :: deviation_pairs => swigf_EnergyCalibration_deviation_pairs + procedure :: channel_energies => swigf_EnergyCalibration_channel_energies + procedure :: num_channels => swigf_EnergyCalibration_num_channels + procedure :: set_polynomial => swigf_EnergyCalibration_set_polynomial + procedure :: set_default_polynomial => swigf_EnergyCalibration_set_default_polynomial + procedure :: set_full_range_fraction => swigf_EnergyCalibration_set_full_range_fraction + procedure, private :: swigf_EnergyCalibration_op_lt__ + procedure, private :: swigf_EnergyCalibration_op_eq__ + procedure, private :: swigf_EnergyCalibration_op_ne__ + procedure :: memmorysize => swigf_EnergyCalibration_memmorysize + procedure :: channel_for_energy => swigf_EnergyCalibration_channel_for_energy + procedure :: energy_for_channel => swigf_EnergyCalibration_energy_for_channel + procedure :: lower_energy => swigf_EnergyCalibration_lower_energy + procedure :: upper_energy => swigf_EnergyCalibration_upper_energy + procedure, nopass :: get_sm_min_channels => swigf_EnergyCalibration_sm_min_channels_get + procedure, nopass :: get_sm_max_channels => swigf_EnergyCalibration_sm_max_channels_get + procedure, nopass :: get_sm_polynomial_offset_limit => swigf_EnergyCalibration_sm_polynomial_offset_limit_get + procedure :: check_lower_energies => swigf_EnergyCalibration_check_lower_energies + procedure :: mutable_deviation_pairs => swigf_EnergyCalibration_mutable_deviation_pairs + procedure :: set_m_type => swigf_EnergyCalibration_m_type_set + procedure :: get_m_type => swigf_EnergyCalibration_m_type_get + procedure :: set_m_coefficients => swigf_EnergyCalibration_m_coefficients_set + procedure :: get_m_coefficients => swigf_EnergyCalibration_m_coefficients_get + procedure :: set_m_deviation_pairs => swigf_EnergyCalibration_m_deviation_pairs_set + procedure :: get_m_deviation_pairs => swigf_EnergyCalibration_m_deviation_pairs_get + procedure :: set_m_channel_energies => swigf_EnergyCalibration_m_channel_energies_set + procedure :: get_m_channel_energies => swigf_EnergyCalibration_m_channel_energies_get + procedure :: release => swigf_EnergyCalibration_release + procedure, private :: swigf_EnergyCalibration_op_assign__ + generic :: operator(.lt.) => swigf_EnergyCalibration_op_lt__ + generic :: operator(.ne.) => swigf_EnergyCalibration_op_ne__ + generic :: operator(.eq.) => swigf_EnergyCalibration_op_eq__ + generic :: assignment(=) => swigf_EnergyCalibration_op_assign__ + end type EnergyCalibration + public :: energy_cal_combine_channels + public :: polynomial_binning + public :: fullrangefraction_energy + public :: polynomial_energy + public :: deviation_pair_correction + public :: correction_due_to_dev_pairs + public :: apply_deviation_pair + public :: polynomial_coef_to_fullrangefraction + public :: fullrangefraction_coef_to_polynomial + public :: mid_channel_polynomial_to_fullrangeFraction + public :: calibration_is_valid + public :: polynomial_cal_remove_first_channels + public :: rebin_by_lower_edge + public :: write_CALp_file + public :: remove_file + public :: is_file + public :: rename_file + public :: is_directory + public :: create_directory + public :: can_rw_in_directory + public :: append_path + public :: filename + public :: parent_path + public :: file_extension + public :: file_size + public :: temp_dir + public :: is_absolute_path + public :: get_working_path + public :: temp_file_name + public :: get_sm_recursive_ls_max_depth + public :: get_sm_ls_max_results + public :: SWIGTYPE_f_r_q_const__std__string_p_void__bool + public :: ls_directories_in_directory + public :: fs_relative + public :: lexically_normalize_path + public :: load_file_data + public :: likely_not_spec_file + interface is_candidate_n42_file + module procedure swigf_is_candidate_n42_file__SWIG_0, swigf_is_candidate_n42_file__SWIG_1 + end interface + public :: is_candidate_n42_file + interface DevPair + module procedure swigf_new_DevPair__SWIG_0, swigf_new_DevPair__SWIG_1, swigf_new_DevPair__SWIG_2 + end interface + interface DetectorAnalysisResult + module procedure swigf_new_DetectorAnalysisResult + end interface + interface MeasurementVector + module procedure swigf_new_MeasurementVector__SWIG_0, swigf_new_MeasurementVector__SWIG_1, & + swigf_new_MeasurementVector__SWIG_2, swigf_new_MeasurementVector__SWIG_3 + end interface + interface find_fullrangefraction_channel + module procedure swigf_find_fullrangefraction_channel__SWIG_0, swigf_find_fullrangefraction_channel__SWIG_1 + end interface + public :: find_fullrangefraction_channel + interface FloatVector + module procedure swigf_new_FloatVector__SWIG_0, swigf_new_FloatVector__SWIG_1, swigf_new_FloatVector__SWIG_2, & + swigf_new_FloatVector__SWIG_3 + end interface + interface DetectorAnalysis + module procedure swigf_new_DetectorAnalysis + end interface + interface DeviationPairs + module procedure swigf_new_DeviationPairs__SWIG_0, swigf_new_DeviationPairs__SWIG_1, swigf_new_DeviationPairs__SWIG_2, & + swigf_new_DeviationPairs__SWIG_3 + end interface + interface recursive_ls + module procedure swigf_recursive_ls__SWIG_0, swigf_recursive_ls__SWIG_1, swigf_recursive_ls__SWIG_2 + end interface + public :: recursive_ls + interface ls_files_in_directory + module procedure swigf_ls_files_in_directory__SWIG_0, swigf_ls_files_in_directory__SWIG_1, & + swigf_ls_files_in_directory__SWIG_2 + end interface + public :: ls_files_in_directory + interface EnergyCalibration + module procedure swigf_new_EnergyCalibration + end interface + interface SpecFile + module procedure swigf_new_SpecFile__SWIG_0, swigf_new_SpecFile__SWIG_1 + end interface + interface fullrangefraction_binning + module procedure swigf_fullrangefraction_binning__SWIG_0, swigf_fullrangefraction_binning__SWIG_1 + end interface + public :: fullrangefraction_binning + interface find_polynomial_channel + module procedure swigf_find_polynomial_channel__SWIG_0, swigf_find_polynomial_channel__SWIG_1 + end interface + public :: find_polynomial_channel + interface Measurement + module procedure swigf_new_Measurement + end interface + interface MultimediaData + module procedure swigf_new_MultimediaData + end interface + +! FUNCTION POINTER DECLARATIONS +abstract interface +function SWIGTYPE_f_r_q_const__std__string_p_void__bool(arg0, arg1) & +bind(C) & +result(fresult) +use, intrinsic :: ISO_C_BINDING +type(C_PTR), value :: arg0 +type(C_PTR), intent(in), value :: arg1 +logical(C_BOOL) :: fresult +end function + +end interface + + +! WRAPPER DECLARATIONS +interface +function swigc_new_FloatVector__SWIG_0() & +bind(C, name="_wrap_new_FloatVector__SWIG_0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper) :: fresult +end function + +function swigc_new_FloatVector__SWIG_1(farg1) & +bind(C, name="_wrap_new_FloatVector__SWIG_1") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_new_FloatVector__SWIG_2(farg1) & +bind(C, name="_wrap_new_FloatVector__SWIG_2") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +integer(C_SIZE_T), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_new_FloatVector__SWIG_3(farg1, farg2) & +bind(C, name="_wrap_new_FloatVector__SWIG_3") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +integer(C_SIZE_T), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +function swigc_FloatVector_size(farg1) & +bind(C, name="_wrap_FloatVector_size") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T) :: fresult +end function + +function swigc_FloatVector_capacity(farg1) & +bind(C, name="_wrap_FloatVector_capacity") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T) :: fresult +end function + +function swigc_FloatVector_empty(farg1) & +bind(C, name="_wrap_FloatVector_empty") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_FloatVector_front(farg1) & +bind(C, name="_wrap_FloatVector_front") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +function swigc_FloatVector_back(farg1) & +bind(C, name="_wrap_FloatVector_back") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +subroutine swigc_FloatVector_reserve(farg1, farg2) & +bind(C, name="_wrap_FloatVector_reserve") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +end subroutine + +subroutine swigc_FloatVector_resize__SWIG_0(farg1, farg2) & +bind(C, name="_wrap_FloatVector_resize__SWIG_0") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +end subroutine + +subroutine swigc_FloatVector_resize__SWIG_1(farg1, farg2, farg3) & +bind(C, name="_wrap_FloatVector_resize__SWIG_1") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +real(C_FLOAT), intent(in) :: farg3 +end subroutine + +subroutine swigc_FloatVector_push_back(farg1, farg2) & +bind(C, name="_wrap_FloatVector_push_back") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +end subroutine + +subroutine swigc_FloatVector_pop_back(farg1) & +bind(C, name="_wrap_FloatVector_pop_back") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +subroutine swigc_FloatVector_clear(farg1) & +bind(C, name="_wrap_FloatVector_clear") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +subroutine swigc_FloatVector_set(farg1, farg2, farg3) & +bind(C, name="_wrap_FloatVector_set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +real(C_FLOAT), intent(in) :: farg3 +end subroutine + +function swigc_FloatVector_get(farg1, farg2) & +bind(C, name="_wrap_FloatVector_get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +real(C_FLOAT) :: fresult +end function + +subroutine swigc_FloatVector_insert(farg1, farg2, farg3) & +bind(C, name="_wrap_FloatVector_insert") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +real(C_FLOAT), intent(in) :: farg3 +end subroutine + +subroutine swigc_FloatVector_erase__SWIG_0(farg1, farg2) & +bind(C, name="_wrap_FloatVector_erase__SWIG_0") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +end subroutine + +subroutine swigc_FloatVector_erase__SWIG_1(farg1, farg2, farg3) & +bind(C, name="_wrap_FloatVector_erase__SWIG_1") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +integer(C_SIZE_T), intent(in) :: farg3 +end subroutine + +function swigc_FloatVector_front_ref(farg1) & +bind(C, name="_wrap_FloatVector_front_ref") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(C_PTR) :: fresult +end function + +function swigc_FloatVector_back_ref(farg1) & +bind(C, name="_wrap_FloatVector_back_ref") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(C_PTR) :: fresult +end function + +function swigc_FloatVector_get_ref(farg1, farg2) & +bind(C, name="_wrap_FloatVector_get_ref") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +type(C_PTR) :: fresult +end function + +subroutine swigc_delete_FloatVector(farg1) & +bind(C, name="_wrap_delete_FloatVector") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +end subroutine + +subroutine swigc_FloatVector_op_assign__(farg1, farg2) & +bind(C, name="_wrap_FloatVector_op_assign__") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_new_MeasurementVector__SWIG_0() & +bind(C, name="_wrap_new_MeasurementVector__SWIG_0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper) :: fresult +end function + +function swigc_new_MeasurementVector__SWIG_1(farg1) & +bind(C, name="_wrap_new_MeasurementVector__SWIG_1") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_new_MeasurementVector__SWIG_2(farg1) & +bind(C, name="_wrap_new_MeasurementVector__SWIG_2") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +integer(C_SIZE_T), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_new_MeasurementVector__SWIG_3(farg1, farg2) & +bind(C, name="_wrap_new_MeasurementVector__SWIG_3") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +integer(C_SIZE_T), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +function swigc_MeasurementVector_size(farg1) & +bind(C, name="_wrap_MeasurementVector_size") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T) :: fresult +end function + +function swigc_MeasurementVector_capacity(farg1) & +bind(C, name="_wrap_MeasurementVector_capacity") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T) :: fresult +end function + +function swigc_MeasurementVector_empty(farg1) & +bind(C, name="_wrap_MeasurementVector_empty") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_MeasurementVector_front(farg1) & +bind(C, name="_wrap_MeasurementVector_front") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_MeasurementVector_back(farg1) & +bind(C, name="_wrap_MeasurementVector_back") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_MeasurementVector_reserve(farg1, farg2) & +bind(C, name="_wrap_MeasurementVector_reserve") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +end subroutine + +subroutine swigc_MeasurementVector_resize__SWIG_0(farg1, farg2) & +bind(C, name="_wrap_MeasurementVector_resize__SWIG_0") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +end subroutine + +subroutine swigc_MeasurementVector_resize__SWIG_1(farg1, farg2, farg3) & +bind(C, name="_wrap_MeasurementVector_resize__SWIG_1") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +end subroutine + +subroutine swigc_MeasurementVector_push_back(farg1, farg2) & +bind(C, name="_wrap_MeasurementVector_push_back") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_MeasurementVector_pop_back(farg1) & +bind(C, name="_wrap_MeasurementVector_pop_back") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +subroutine swigc_MeasurementVector_clear(farg1) & +bind(C, name="_wrap_MeasurementVector_clear") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +subroutine swigc_MeasurementVector_set(farg1, farg2, farg3) & +bind(C, name="_wrap_MeasurementVector_set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +end subroutine + +function swigc_MeasurementVector_get(farg1, farg2) & +bind(C, name="_wrap_MeasurementVector_get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_MeasurementVector_insert(farg1, farg2, farg3) & +bind(C, name="_wrap_MeasurementVector_insert") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +end subroutine + +subroutine swigc_MeasurementVector_erase__SWIG_0(farg1, farg2) & +bind(C, name="_wrap_MeasurementVector_erase__SWIG_0") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +end subroutine + +subroutine swigc_MeasurementVector_erase__SWIG_1(farg1, farg2, farg3) & +bind(C, name="_wrap_MeasurementVector_erase__SWIG_1") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +integer(C_SIZE_T), intent(in) :: farg3 +end subroutine + +function swigc_MeasurementVector_front_ref(farg1) & +bind(C, name="_wrap_MeasurementVector_front_ref") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_MeasurementVector_back_ref(farg1) & +bind(C, name="_wrap_MeasurementVector_back_ref") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_MeasurementVector_get_ref(farg1, farg2) & +bind(C, name="_wrap_MeasurementVector_get_ref") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_SIZE_T), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_delete_MeasurementVector(farg1) & +bind(C, name="_wrap_delete_MeasurementVector") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +end subroutine + +subroutine swigc_MeasurementVector_op_assign__(farg1, farg2) & +bind(C, name="_wrap_MeasurementVector_op_assign__") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_spectrumTypeFromDescription(farg1) & +bind(C, name="_wrap_spectrumTypeFromDescription") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +integer(C_INT) :: fresult +end function + + subroutine SWIG_free(cptr) & + bind(C, name="free") + use, intrinsic :: ISO_C_BINDING + type(C_PTR), value :: cptr +end subroutine +function swigc_suggestedNameEnding(farg1) & +bind(C, name="_wrap_suggestedNameEnding") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +integer(C_INT), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_is_candidate_n42_file__SWIG_0(farg1) & +bind(C, name="_wrap_is_candidate_n42_file__SWIG_0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_is_candidate_n42_file__SWIG_1(farg1, farg2) & +bind(C, name="_wrap_is_candidate_n42_file__SWIG_1") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_convert_n42_utf16_xml_to_utf8(farg1, farg2) & +bind(C, name="_wrap_convert_n42_utf16_xml_to_utf8") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +type(SwigArrayWrapper) :: farg2 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_add_analysis_results_to_2012_N42(farg1, farg2, farg3) & +bind(C, name="_wrap_add_analysis_results_to_2012_N42") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +end subroutine + +subroutine swigc_set_analysis_info_from_n42(farg1, farg2) & +bind(C, name="_wrap_set_analysis_info_from_n42") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_gamma_integral(farg1, farg2, farg3) & +bind(C, name="_wrap_gamma_integral") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +real(C_FLOAT), intent(in) :: farg3 +real(C_DOUBLE) :: fresult +end function + +function swigc_detectorTypeToString(farg1) & +bind(C, name="_wrap_detectorTypeToString") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +integer(C_INT), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_new_Measurement() & +bind(C, name="_wrap_new_Measurement") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_delete_Measurement(farg1) & +bind(C, name="_wrap_delete_Measurement") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +end subroutine + +function swigc_Measurement_memmorysize(farg1) & +bind(C, name="_wrap_Measurement_memmorysize") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_live_time(farg1) & +bind(C, name="_wrap_Measurement_live_time") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +subroutine swigc_Measurement_set_live_time(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_live_time") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +end subroutine + +function swigc_Measurement_real_time(farg1) & +bind(C, name="_wrap_Measurement_real_time") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +subroutine swigc_Measurement_set_real_time(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_real_time") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +end subroutine + +function swigc_Measurement_contained_neutron(farg1) & +bind(C, name="_wrap_Measurement_contained_neutron") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_sample_number(farg1) & +bind(C, name="_wrap_Measurement_sample_number") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_title(farg1) & +bind(C, name="_wrap_Measurement_title") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_Measurement_occupied(farg1) & +bind(C, name="_wrap_Measurement_occupied") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_gamma_count_sum(farg1) & +bind(C, name="_wrap_Measurement_gamma_count_sum") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_DOUBLE) :: fresult +end function + +function swigc_Measurement_neutron_live_time(farg1) & +bind(C, name="_wrap_Measurement_neutron_live_time") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +function swigc_Measurement_neutron_counts_sum(farg1) & +bind(C, name="_wrap_Measurement_neutron_counts_sum") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_DOUBLE) :: fresult +end function + +function swigc_Measurement_speed(farg1) & +bind(C, name="_wrap_Measurement_speed") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +function swigc_Measurement_dx(farg1) & +bind(C, name="_wrap_Measurement_dx") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +function swigc_Measurement_dy(farg1) & +bind(C, name="_wrap_Measurement_dy") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +function swigc_Measurement_latitude(farg1) & +bind(C, name="_wrap_Measurement_latitude") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_DOUBLE) :: fresult +end function + +function swigc_Measurement_longitude(farg1) & +bind(C, name="_wrap_Measurement_longitude") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_DOUBLE) :: fresult +end function + +function swigc_Measurement_has_gps_info(farg1) & +bind(C, name="_wrap_Measurement_has_gps_info") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_dose_rate(farg1) & +bind(C, name="_wrap_Measurement_dose_rate") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +function swigc_Measurement_exposure_rate(farg1) & +bind(C, name="_wrap_Measurement_exposure_rate") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +function swigc_Measurement_pcf_tag(farg1) & +bind(C, name="_wrap_Measurement_pcf_tag") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +character(C_CHAR) :: fresult +end function + +function swigc_Measurement_source_description(farg1) & +bind(C, name="_wrap_Measurement_source_description") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_Measurement_measurement_description(farg1) & +bind(C, name="_wrap_Measurement_measurement_description") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_Measurement_position_time(farg1) & +bind(C, name="_wrap_Measurement_position_time") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_detector_name(farg1) & +bind(C, name="_wrap_Measurement_detector_name") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_Measurement_update_detector_name_from_title(farg1) & +bind(C, name="_wrap_Measurement_update_detector_name_from_title") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +function swigc_Measurement_detector_number(farg1) & +bind(C, name="_wrap_Measurement_detector_number") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_detector_type(farg1) & +bind(C, name="_wrap_Measurement_detector_type") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_Measurement_quality_status(farg1) & +bind(C, name="_wrap_Measurement_quality_status") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_source_type(farg1) & +bind(C, name="_wrap_Measurement_source_type") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_remarks(farg1) & +bind(C, name="_wrap_Measurement_remarks") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_mutable_remarks(farg1) & +bind(C, name="_wrap_Measurement_mutable_remarks") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_parse_warnings(farg1) & +bind(C, name="_wrap_Measurement_parse_warnings") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_start_time(farg1) & +bind(C, name="_wrap_Measurement_start_time") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_start_time_copy(farg1) & +bind(C, name="_wrap_Measurement_start_time_copy") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_energy_calibration_model(farg1) & +bind(C, name="_wrap_Measurement_energy_calibration_model") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_calibration_coeffs(farg1) & +bind(C, name="_wrap_Measurement_calibration_coeffs") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_deviation_pairs(farg1) & +bind(C, name="_wrap_Measurement_deviation_pairs") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_energy_calibration(farg1) & +bind(C, name="_wrap_Measurement_energy_calibration") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_mutable_energy_calibration(farg1) & +bind(C, name="_wrap_Measurement_mutable_energy_calibration") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_channel_energies(farg1) & +bind(C, name="_wrap_Measurement_channel_energies") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_gamma_counts(farg1) & +bind(C, name="_wrap_Measurement_gamma_counts") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_neutron_counts(farg1) & +bind(C, name="_wrap_Measurement_neutron_counts") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_location_state(farg1) & +bind(C, name="_wrap_Measurement_location_state") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_Measurement_set_title(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_title") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_start_time(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_start_time") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_remarks(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_remarks") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_parse_warnings(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_parse_warnings") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_source_type(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_source_type") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_position(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_Measurement_set_position") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_DOUBLE), intent(in) :: farg2 +real(C_DOUBLE), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +end subroutine + +subroutine swigc_Measurement_set_sample_number(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_sample_number") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_occupancy_status(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_occupancy_status") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_detector_name(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_detector_name") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_detector_number(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_detector_number") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_neutron_counts__SWIG_0(farg1, farg2, farg3) & +bind(C, name="_wrap_Measurement_set_neutron_counts__SWIG_0") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +real(C_FLOAT), intent(in) :: farg3 +end subroutine + +subroutine swigc_Measurement_set_neutron_counts__SWIG_1(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_neutron_counts__SWIG_1") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_pcf_tag(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_pcf_tag") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +character(C_CHAR), intent(in) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_source_description(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_source_description") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_measurement_description(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_measurement_description") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +function swigc_Measurement_num_gamma_channels(farg1) & +bind(C, name="_wrap_Measurement_num_gamma_channels") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_find_gamma_channel(farg1, farg2) & +bind(C, name="_wrap_Measurement_find_gamma_channel") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_gamma_channel_content(farg1, farg2) & +bind(C, name="_wrap_Measurement_gamma_channel_content") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +real(C_FLOAT) :: fresult +end function + +function swigc_Measurement_gamma_channel_lower(farg1, farg2) & +bind(C, name="_wrap_Measurement_gamma_channel_lower") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +real(C_FLOAT) :: fresult +end function + +function swigc_Measurement_gamma_channel_center(farg1, farg2) & +bind(C, name="_wrap_Measurement_gamma_channel_center") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +real(C_FLOAT) :: fresult +end function + +function swigc_Measurement_gamma_channel_upper(farg1, farg2) & +bind(C, name="_wrap_Measurement_gamma_channel_upper") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +real(C_FLOAT) :: fresult +end function + +function swigc_Measurement_gamma_channel_width(farg1, farg2) & +bind(C, name="_wrap_Measurement_gamma_channel_width") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +real(C_FLOAT) :: fresult +end function + +function swigc_Measurement_gamma_integral(farg1, farg2, farg3) & +bind(C, name="_wrap_Measurement_gamma_integral") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +real(C_FLOAT), intent(in) :: farg3 +real(C_DOUBLE) :: fresult +end function + +function swigc_Measurement_gamma_channels_sum(farg1, farg2, farg3) & +bind(C, name="_wrap_Measurement_gamma_channels_sum") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +integer(C_INT), intent(in) :: farg3 +real(C_DOUBLE) :: fresult +end function + +function swigc_Measurement_gamma_channel_energies(farg1) & +bind(C, name="_wrap_Measurement_gamma_channel_energies") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_gamma_channel_contents(farg1) & +bind(C, name="_wrap_Measurement_gamma_channel_contents") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_gamma_energy_min(farg1) & +bind(C, name="_wrap_Measurement_gamma_energy_min") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +function swigc_Measurement_gamma_energy_max(farg1) & +bind(C, name="_wrap_Measurement_gamma_energy_max") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +function swigc_Measurement_derived_data_properties(farg1) & +bind(C, name="_wrap_Measurement_derived_data_properties") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_Measurement_rpm_panel_number(farg1) & +bind(C, name="_wrap_Measurement_rpm_panel_number") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_rpm_column_number(farg1) & +bind(C, name="_wrap_Measurement_rpm_column_number") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_rpm_mca_number(farg1) & +bind(C, name="_wrap_Measurement_rpm_mca_number") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_write_2006_N42_xml(farg1, farg2) & +bind(C, name="_wrap_Measurement_write_2006_N42_xml") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_write_csv(farg1, farg2) & +bind(C, name="_wrap_Measurement_write_csv") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_write_txt(farg1, farg2) & +bind(C, name="_wrap_Measurement_write_txt") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +subroutine swigc_Measurement_reset(farg1) & +bind(C, name="_wrap_Measurement_reset") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +subroutine swigc_Measurement_rebin(farg1, farg2) & +bind(C, name="_wrap_Measurement_rebin") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_energy_calibration(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_energy_calibration") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_ecal(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_ecal") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_info_from_2006_N42_spectrum_node(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_info_from_2006_N42_spectrum_node") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_Measurement_gamma_count_at(farg1, farg2) & +bind(C, name="_wrap_Measurement_gamma_count_at") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +real(C_FLOAT) :: fresult +end function + +function swigc_Measurement_get_num_channels(farg1) & +bind(C, name="_wrap_Measurement_get_num_channels") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_Measurement_get_start_time_string(farg1) & +bind(C, name="_wrap_Measurement_get_start_time_string") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_Measurement_set_start_time_from_string(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_start_time_from_string") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +subroutine swigc_Measurement_set_neutron_count(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_neutron_count") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +end subroutine + +function swigc_Measurement_get_neutron_count(farg1) & +bind(C, name="_wrap_Measurement_get_neutron_count") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +subroutine swigc_Measurement_set_spectrum(farg1, farg2) & +bind(C, name="_wrap_Measurement_set_spectrum") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +subroutine swigc_Measurement_get_spectrum(farg1, farg2) & +bind(C, name="_wrap_Measurement_get_spectrum") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +subroutine swigc_Measurement_op_assign__(farg1, farg2) & +bind(C, name="_wrap_Measurement_op_assign__") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_new_SpecFile__SWIG_0() & +bind(C, name="_wrap_new_SpecFile__SWIG_0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper) :: fresult +end function + +function swigc_new_SpecFile__SWIG_1(farg1) & +bind(C, name="_wrap_new_SpecFile__SWIG_1") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_delete_SpecFile(farg1) & +bind(C, name="_wrap_delete_SpecFile") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +end subroutine + +function swigc_SpecFile_load_file__SWIG_0(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_SpecFile_load_file__SWIG_0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT), intent(in) :: farg3 +type(SwigArrayWrapper) :: farg4 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_file__SWIG_1(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_load_file__SWIG_1") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT), intent(in) :: farg3 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_parse_warnings(farg1) & +bind(C, name="_wrap_SpecFile_parse_warnings") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_modified(farg1) & +bind(C, name="_wrap_SpecFile_modified") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +subroutine swigc_SpecFile_reset_modified(farg1) & +bind(C, name="_wrap_SpecFile_reset_modified") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +function swigc_SpecFile_modified_since_decode(farg1) & +bind(C, name="_wrap_SpecFile_modified_since_decode") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +subroutine swigc_SpecFile_reset_modified_since_decode(farg1) & +bind(C, name="_wrap_SpecFile_reset_modified_since_decode") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +function swigc_SpecFile_gamma_live_time(farg1) & +bind(C, name="_wrap_SpecFile_gamma_live_time") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +function swigc_SpecFile_gamma_real_time(farg1) & +bind(C, name="_wrap_SpecFile_gamma_real_time") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +function swigc_SpecFile_gamma_count_sum(farg1) & +bind(C, name="_wrap_SpecFile_gamma_count_sum") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_DOUBLE) :: fresult +end function + +function swigc_SpecFile_neutron_counts_sum(farg1) & +bind(C, name="_wrap_SpecFile_neutron_counts_sum") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_DOUBLE) :: fresult +end function + +function swigc_SpecFile_filename(farg1) & +bind(C, name="_wrap_SpecFile_filename") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_SpecFile_detector_names(farg1) & +bind(C, name="_wrap_SpecFile_detector_names") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_detector_numbers(farg1) & +bind(C, name="_wrap_SpecFile_detector_numbers") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_gamma_detector_names(farg1) & +bind(C, name="_wrap_SpecFile_gamma_detector_names") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_neutron_detector_names(farg1) & +bind(C, name="_wrap_SpecFile_neutron_detector_names") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_uuid(farg1) & +bind(C, name="_wrap_SpecFile_uuid") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_SpecFile_remarks(farg1) & +bind(C, name="_wrap_SpecFile_remarks") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_lane_number(farg1) & +bind(C, name="_wrap_SpecFile_lane_number") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_measurement_location_name(farg1) & +bind(C, name="_wrap_SpecFile_measurement_location_name") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_SpecFile_inspection(farg1) & +bind(C, name="_wrap_SpecFile_inspection") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_SpecFile_measurement_operator(farg1) & +bind(C, name="_wrap_SpecFile_measurement_operator") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_SpecFile_sample_numbers(farg1) & +bind(C, name="_wrap_SpecFile_sample_numbers") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_num_measurements(farg1) & +bind(C, name="_wrap_SpecFile_num_measurements") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_detector_type(farg1) & +bind(C, name="_wrap_SpecFile_detector_type") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_instrument_type(farg1) & +bind(C, name="_wrap_SpecFile_instrument_type") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_SpecFile_manufacturer(farg1) & +bind(C, name="_wrap_SpecFile_manufacturer") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_SpecFile_instrument_model(farg1) & +bind(C, name="_wrap_SpecFile_instrument_model") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_SpecFile_instrument_id(farg1) & +bind(C, name="_wrap_SpecFile_instrument_id") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_SpecFile_measurements(farg1) & +bind(C, name="_wrap_SpecFile_measurements") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_measurement__SWIG_0(farg1, farg2) & +bind(C, name="_wrap_SpecFile_measurement__SWIG_0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_detectors_analysis(farg1) & +bind(C, name="_wrap_SpecFile_detectors_analysis") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_multimedia_data(farg1) & +bind(C, name="_wrap_SpecFile_multimedia_data") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_has_gps_info(farg1) & +bind(C, name="_wrap_SpecFile_has_gps_info") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_mean_latitude(farg1) & +bind(C, name="_wrap_SpecFile_mean_latitude") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_DOUBLE) :: fresult +end function + +function swigc_SpecFile_mean_longitude(farg1) & +bind(C, name="_wrap_SpecFile_mean_longitude") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_DOUBLE) :: fresult +end function + +function swigc_SpecFile_passthrough(farg1) & +bind(C, name="_wrap_SpecFile_passthrough") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_contains_derived_data(farg1) & +bind(C, name="_wrap_SpecFile_contains_derived_data") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_contains_non_derived_data(farg1) & +bind(C, name="_wrap_SpecFile_contains_non_derived_data") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +subroutine swigc_SpecFile_set_filename(farg1, farg2) & +bind(C, name="_wrap_SpecFile_set_filename") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +subroutine swigc_SpecFile_set_remarks__SWIG_0(farg1, farg2) & +bind(C, name="_wrap_SpecFile_set_remarks__SWIG_0") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_SpecFile_add_remark(farg1, farg2) & +bind(C, name="_wrap_SpecFile_add_remark") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +subroutine swigc_SpecFile_set_parse_warnings(farg1, farg2) & +bind(C, name="_wrap_SpecFile_set_parse_warnings") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_SpecFile_set_uuid(farg1, farg2) & +bind(C, name="_wrap_SpecFile_set_uuid") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +subroutine swigc_SpecFile_set_lane_number(farg1, farg2) & +bind(C, name="_wrap_SpecFile_set_lane_number") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +end subroutine + +subroutine swigc_SpecFile_set_measurement_location_name(farg1, farg2) & +bind(C, name="_wrap_SpecFile_set_measurement_location_name") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +subroutine swigc_SpecFile_set_inspection(farg1, farg2) & +bind(C, name="_wrap_SpecFile_set_inspection") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +subroutine swigc_SpecFile_set_instrument_type(farg1, farg2) & +bind(C, name="_wrap_SpecFile_set_instrument_type") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +subroutine swigc_SpecFile_set_detector_type(farg1, farg2) & +bind(C, name="_wrap_SpecFile_set_detector_type") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +end subroutine + +subroutine swigc_SpecFile_set_manufacturer(farg1, farg2) & +bind(C, name="_wrap_SpecFile_set_manufacturer") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +subroutine swigc_SpecFile_set_instrument_model(farg1, farg2) & +bind(C, name="_wrap_SpecFile_set_instrument_model") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +subroutine swigc_SpecFile_set_instrument_id(farg1, farg2) & +bind(C, name="_wrap_SpecFile_set_instrument_id") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +subroutine swigc_SpecFile_set_live_time(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_set_live_time") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +end subroutine + +subroutine swigc_SpecFile_set_real_time(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_set_real_time") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +end subroutine + +subroutine swigc_SpecFile_set_start_time(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_set_start_time") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +end subroutine + +subroutine swigc_SpecFile_set_remarks__SWIG_1(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_set_remarks__SWIG_1") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +end subroutine + +subroutine swigc_SpecFile_set_source_type(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_set_source_type") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +end subroutine + +subroutine swigc_SpecFile_set_position(farg1, farg2, farg3, farg4, farg5) & +bind(C, name="_wrap_SpecFile_set_position") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_DOUBLE), intent(in) :: farg2 +real(C_DOUBLE), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +type(SwigClassWrapper), intent(in) :: farg5 +end subroutine + +subroutine swigc_SpecFile_set_title(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_set_title") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +end subroutine + +subroutine swigc_SpecFile_set_contained_neutrons(farg1, farg2, farg3, farg4, farg5) & +bind(C, name="_wrap_SpecFile_set_contained_neutrons") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +real(C_FLOAT), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +real(C_FLOAT), intent(in) :: farg5 +end subroutine + +subroutine swigc_SpecFile_set_detectors_analysis(farg1, farg2) & +bind(C, name="_wrap_SpecFile_set_detectors_analysis") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_SpecFile_change_detector_name(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_change_detector_name") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +type(SwigArrayWrapper) :: farg3 +end subroutine + +subroutine swigc_SpecFile_change_sample_numbers(farg1, farg2) & +bind(C, name="_wrap_SpecFile_change_sample_numbers") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_SpecFile_add_measurement__SWIG_0(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_add_measurement__SWIG_0") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT), intent(in) :: farg3 +end subroutine + +subroutine swigc_SpecFile_add_measurement__SWIG_1(farg1, farg2) & +bind(C, name="_wrap_SpecFile_add_measurement__SWIG_1") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_SpecFile_remove_measurement(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_remove_measurement") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT), intent(in) :: farg3 +end subroutine + +subroutine swigc_SpecFile_remove_measurements(farg1, farg2) & +bind(C, name="_wrap_SpecFile_remove_measurements") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_SpecFile_clear_multimedia_data(farg1) & +bind(C, name="_wrap_SpecFile_clear_multimedia_data") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +subroutine swigc_SpecFile_add_multimedia_data(farg1, farg2) & +bind(C, name="_wrap_SpecFile_add_multimedia_data") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_SpecFile_set_multimedia_data(farg1, farg2) & +bind(C, name="_wrap_SpecFile_set_multimedia_data") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_SpecFile_occupancy_number_from_remarks(farg1) & +bind(C, name="_wrap_SpecFile_occupancy_number_from_remarks") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_sample_measurements(farg1, farg2) & +bind(C, name="_wrap_SpecFile_sample_measurements") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_measurement__SWIG_1(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_measurement__SWIG_1") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigArrayWrapper) :: farg3 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_measurement__SWIG_2(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_measurement__SWIG_2") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +integer(C_INT), intent(in) :: farg3 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_suggested_sum_energy_calibration(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_suggested_sum_energy_calibration") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_sum_measurements(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_SpecFile_sum_measurements") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_memmorysize(farg1) & +bind(C, name="_wrap_SpecFile_memmorysize") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_gamma_channel_counts(farg1) & +bind(C, name="_wrap_SpecFile_gamma_channel_counts") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_num_gamma_channels(farg1) & +bind(C, name="_wrap_SpecFile_num_gamma_channels") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_keep_n_bin_spectra_only(farg1, farg2) & +bind(C, name="_wrap_SpecFile_keep_n_bin_spectra_only") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_contained_neutron(farg1) & +bind(C, name="_wrap_SpecFile_contained_neutron") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_energy_cal_variants(farg1) & +bind(C, name="_wrap_SpecFile_energy_cal_variants") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_keep_energy_cal_variants(farg1, farg2) & +bind(C, name="_wrap_SpecFile_keep_energy_cal_variants") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_keep_derived_data_variant(farg1, farg2) & +bind(C, name="_wrap_SpecFile_keep_derived_data_variant") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_remove_detectors_data(farg1, farg2) & +bind(C, name="_wrap_SpecFile_remove_detectors_data") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_remove_neutron_measurements(farg1) & +bind(C, name="_wrap_SpecFile_remove_neutron_measurements") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_background_sample_number(farg1) & +bind(C, name="_wrap_SpecFile_background_sample_number") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_generate_psuedo_uuid(farg1) & +bind(C, name="_wrap_SpecFile_generate_psuedo_uuid") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_SpecFile_reset(farg1) & +bind(C, name="_wrap_SpecFile_reset") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +function swigc_SpecFile_load_N42_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_N42_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_pcf_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_pcf_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_spc_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_spc_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_chn_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_chn_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_iaea_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_iaea_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_binary_exploranium_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_binary_exploranium_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_micro_raider_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_micro_raider_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_txt_or_csv_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_txt_or_csv_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_cnf_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_cnf_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_tracs_mps_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_tracs_mps_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_aram_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_aram_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_spectroscopic_daily_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_spectroscopic_daily_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_amptek_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_amptek_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_ortec_listmode_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_ortec_listmode_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_lsrm_spe_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_lsrm_spe_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_tka_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_tka_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_multiact_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_multiact_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_phd_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_phd_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_lzs_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_lzs_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_radiacode_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_radiacode_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_xml_scan_data_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_xml_scan_data_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_json_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_json_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_caen_gxml_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_caen_gxml_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_N42(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_N42") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_N42_from_data__SWIG_0(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_N42_from_data__SWIG_0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_N42_from_data__SWIG_1(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_load_N42_from_data__SWIG_1") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +type(SwigArrayWrapper) :: farg3 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_iaea_spc(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_iaea_spc") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_binary_spc(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_binary_spc") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_N42_document(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_N42_document") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_micro_raider_from_data(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_micro_raider_from_data") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_binary_exploranium(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_binary_exploranium") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_pcf(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_pcf") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_txt_or_csv(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_txt_or_csv") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_Gr135_txt(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_Gr135_txt") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_spectroscopic_daily_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_spectroscopic_daily_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_srpm210_csv(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_srpm210_csv") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_D3S_raw(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_D3S_raw") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_amptek_mca(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_amptek_mca") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_ortec_listmode(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_ortec_listmode") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_lsrm_spe(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_lsrm_spe") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_tka(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_tka") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_multiact(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_multiact") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_phd(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_phd") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_lzs(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_lzs") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_radiacode(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_radiacode") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_radiacode_spectrogram(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_radiacode_spectrogram") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_xml_scan_data(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_xml_scan_data") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_iaea(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_iaea") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_chn(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_chn") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_cnf(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_cnf") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_tracs_mps(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_tracs_mps") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_aram(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_aram") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_json(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_json") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_load_from_caen_gxml(farg1, farg2) & +bind(C, name="_wrap_SpecFile_load_from_caen_gxml") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +subroutine swigc_SpecFile_cleanup_after_load__SWIG_0(farg1, farg2) & +bind(C, name="_wrap_SpecFile_cleanup_after_load__SWIG_0") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +end subroutine + +subroutine swigc_SpecFile_cleanup_after_load__SWIG_1(farg1) & +bind(C, name="_wrap_SpecFile_cleanup_after_load__SWIG_1") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +subroutine swigc_SpecFile_recalc_total_counts(farg1) & +bind(C, name="_wrap_SpecFile_recalc_total_counts") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +subroutine swigc_SpecFile_merge_neutron_meas_into_gamma_meas(farg1) & +bind(C, name="_wrap_SpecFile_merge_neutron_meas_into_gamma_meas") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +subroutine swigc_SpecFile_rebin_measurement(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_rebin_measurement") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +end subroutine + +subroutine swigc_SpecFile_rebin_all_measurements(farg1, farg2) & +bind(C, name="_wrap_SpecFile_rebin_all_measurements") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_SpecFile_set_energy_calibration_from_CALp_file(farg1, farg2) & +bind(C, name="_wrap_SpecFile_set_energy_calibration_from_CALp_file") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_SpecFile_detector_names_to_numbers(farg1, farg2) & +bind(C, name="_wrap_SpecFile_detector_names_to_numbers") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_SpecFile_write_to_file__SWIG_0(farg1, farg2, farg3) & +bind(C, name="_wrap_SpecFile_write_to_file__SWIG_0") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT), intent(in) :: farg3 +end subroutine + +subroutine swigc_SpecFile_write_to_file__SWIG_1(farg1, farg2, farg3, farg4, farg5) & +bind(C, name="_wrap_SpecFile_write_to_file__SWIG_1") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +integer(C_INT), intent(in) :: farg5 +end subroutine + +subroutine swigc_SpecFile_write_to_file__SWIG_2(farg1, farg2, farg3, farg4, farg5) & +bind(C, name="_wrap_SpecFile_write_to_file__SWIG_2") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +integer(C_INT), intent(in) :: farg5 +end subroutine + +subroutine swigc_SpecFile_write_to_file__SWIG_3(farg1, farg2, farg3, farg4, farg5) & +bind(C, name="_wrap_SpecFile_write_to_file__SWIG_3") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +integer(C_INT), intent(in) :: farg5 +end subroutine + +subroutine swigc_SpecFile_write__SWIG_0(farg1, farg2, farg3, farg4, farg5) & +bind(C, name="_wrap_SpecFile_write__SWIG_0") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +integer(C_INT), intent(in) :: farg5 +end subroutine + +subroutine swigc_SpecFile_write__SWIG_1(farg1, farg2, farg3, farg4, farg5) & +bind(C, name="_wrap_SpecFile_write__SWIG_1") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +integer(C_INT), intent(in) :: farg5 +end subroutine + +function swigc_SpecFile_write_pcf(farg1, farg2) & +bind(C, name="_wrap_SpecFile_write_pcf") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_write_2006_N42(farg1, farg2) & +bind(C, name="_wrap_SpecFile_write_2006_N42") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_write_csv(farg1, farg2) & +bind(C, name="_wrap_SpecFile_write_csv") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_write_txt(farg1, farg2) & +bind(C, name="_wrap_SpecFile_write_txt") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_write_integer_chn__SWIG_0(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_SpecFile_write_integer_chn__SWIG_0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_write_integer_chn__SWIG_1(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_SpecFile_write_integer_chn__SWIG_1") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_write_binary_spc(farg1, farg2, farg3, farg4, farg5) & +bind(C, name="_wrap_SpecFile_write_binary_spc") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +type(SwigClassWrapper), intent(in) :: farg5 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_write_ascii_spc(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_SpecFile_write_ascii_spc") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_write_binary_exploranium_gr130v0(farg1, farg2) & +bind(C, name="_wrap_SpecFile_write_binary_exploranium_gr130v0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_write_binary_exploranium_gr135v2(farg1, farg2) & +bind(C, name="_wrap_SpecFile_write_binary_exploranium_gr135v2") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_write_iaea_spe(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_SpecFile_write_iaea_spe") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_write_cnf(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_SpecFile_write_cnf") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_write_tka(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_SpecFile_write_tka") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_2012N42_VERSION_get() & +bind(C, name="_wrap_SpecFile_2012N42_VERSION_get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_create_2012_N42_xml(farg1) & +bind(C, name="_wrap_SpecFile_create_2012_N42_xml") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_write_2012_N42(farg1, farg2) & +bind(C, name="_wrap_SpecFile_write_2012_N42") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_SpecFile_mutex(farg1) & +bind(C, name="_wrap_SpecFile_mutex") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_measurement_at(farg1, farg2) & +bind(C, name="_wrap_SpecFile_measurement_at") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +function swigc_SpecFile_get_max_channel_count(farg1) & +bind(C, name="_wrap_SpecFile_get_max_channel_count") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +subroutine swigc_SpecFile_op_assign__(farg1, farg2) & +bind(C, name="_wrap_SpecFile_op_assign__") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_DetectorAnalysisResult_remark__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysisResult_remark__set") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +function swigc_DetectorAnalysisResult_remark__get(farg1) & +bind(C, name="_wrap_DetectorAnalysisResult_remark__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_DetectorAnalysisResult_nuclide__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysisResult_nuclide__set") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +function swigc_DetectorAnalysisResult_nuclide__get(farg1) & +bind(C, name="_wrap_DetectorAnalysisResult_nuclide__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_DetectorAnalysisResult_activity__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysisResult_activity__set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +end subroutine + +function swigc_DetectorAnalysisResult_activity__get(farg1) & +bind(C, name="_wrap_DetectorAnalysisResult_activity__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +subroutine swigc_DetectorAnalysisResult_nuclide_type__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysisResult_nuclide_type__set") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +function swigc_DetectorAnalysisResult_nuclide_type__get(farg1) & +bind(C, name="_wrap_DetectorAnalysisResult_nuclide_type__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_DetectorAnalysisResult_id_confidence__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysisResult_id_confidence__set") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +function swigc_DetectorAnalysisResult_id_confidence__get(farg1) & +bind(C, name="_wrap_DetectorAnalysisResult_id_confidence__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_DetectorAnalysisResult_distance__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysisResult_distance__set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +end subroutine + +function swigc_DetectorAnalysisResult_distance__get(farg1) & +bind(C, name="_wrap_DetectorAnalysisResult_distance__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +subroutine swigc_DetectorAnalysisResult_dose_rate__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysisResult_dose_rate__set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +end subroutine + +function swigc_DetectorAnalysisResult_dose_rate__get(farg1) & +bind(C, name="_wrap_DetectorAnalysisResult_dose_rate__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +subroutine swigc_DetectorAnalysisResult_real_time__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysisResult_real_time__set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +end subroutine + +function swigc_DetectorAnalysisResult_real_time__get(farg1) & +bind(C, name="_wrap_DetectorAnalysisResult_real_time__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +subroutine swigc_DetectorAnalysisResult_detector__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysisResult_detector__set") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +function swigc_DetectorAnalysisResult_detector__get(farg1) & +bind(C, name="_wrap_DetectorAnalysisResult_detector__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_new_DetectorAnalysisResult() & +bind(C, name="_wrap_new_DetectorAnalysisResult") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_DetectorAnalysisResult_reset(farg1) & +bind(C, name="_wrap_DetectorAnalysisResult_reset") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +function swigc_DetectorAnalysisResult_isEmpty(farg1) & +bind(C, name="_wrap_DetectorAnalysisResult_isEmpty") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +subroutine swigc_delete_DetectorAnalysisResult(farg1) & +bind(C, name="_wrap_delete_DetectorAnalysisResult") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +end subroutine + +subroutine swigc_DetectorAnalysisResult_op_assign__(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysisResult_op_assign__") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_DetectorAnalysis_remarks__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysis_remarks__set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_DetectorAnalysis_remarks__get(farg1) & +bind(C, name="_wrap_DetectorAnalysis_remarks__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_DetectorAnalysis_algorithm_name__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysis_algorithm_name__set") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +function swigc_DetectorAnalysis_algorithm_name__get(farg1) & +bind(C, name="_wrap_DetectorAnalysis_algorithm_name__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_DetectorAnalysis_algorithm_component_versions__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysis_algorithm_component_versions__set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_DetectorAnalysis_algorithm_component_versions__get(farg1) & +bind(C, name="_wrap_DetectorAnalysis_algorithm_component_versions__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_DetectorAnalysis_algorithm_creator__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysis_algorithm_creator__set") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +function swigc_DetectorAnalysis_algorithm_creator__get(farg1) & +bind(C, name="_wrap_DetectorAnalysis_algorithm_creator__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_DetectorAnalysis_algorithm_description__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysis_algorithm_description__set") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +function swigc_DetectorAnalysis_algorithm_description__get(farg1) & +bind(C, name="_wrap_DetectorAnalysis_algorithm_description__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_DetectorAnalysis_analysis_start_time__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysis_analysis_start_time__set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_DetectorAnalysis_analysis_start_time__get(farg1) & +bind(C, name="_wrap_DetectorAnalysis_analysis_start_time__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_DetectorAnalysis_analysis_computation_duration__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysis_analysis_computation_duration__set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +end subroutine + +function swigc_DetectorAnalysis_analysis_computation_duration__get(farg1) & +bind(C, name="_wrap_DetectorAnalysis_analysis_computation_duration__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +subroutine swigc_DetectorAnalysis_algorithm_result_description__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysis_algorithm_result_description__set") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +function swigc_DetectorAnalysis_algorithm_result_description__get(farg1) & +bind(C, name="_wrap_DetectorAnalysis_algorithm_result_description__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_DetectorAnalysis_results__set(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysis_results__set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_DetectorAnalysis_results__get(farg1) & +bind(C, name="_wrap_DetectorAnalysis_results__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_new_DetectorAnalysis() & +bind(C, name="_wrap_new_DetectorAnalysis") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_DetectorAnalysis_reset(farg1) & +bind(C, name="_wrap_DetectorAnalysis_reset") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +function swigc_DetectorAnalysis_is_empty(farg1) & +bind(C, name="_wrap_DetectorAnalysis_is_empty") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +subroutine swigc_delete_DetectorAnalysis(farg1) & +bind(C, name="_wrap_delete_DetectorAnalysis") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +end subroutine + +subroutine swigc_DetectorAnalysis_op_assign__(farg1, farg2) & +bind(C, name="_wrap_DetectorAnalysis_op_assign__") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_MultimediaData_remark__set(farg1, farg2) & +bind(C, name="_wrap_MultimediaData_remark__set") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +function swigc_MultimediaData_remark__get(farg1) & +bind(C, name="_wrap_MultimediaData_remark__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_MultimediaData_descriptions__set(farg1, farg2) & +bind(C, name="_wrap_MultimediaData_descriptions__set") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +function swigc_MultimediaData_descriptions__get(farg1) & +bind(C, name="_wrap_MultimediaData_descriptions__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_MultimediaData_data__set(farg1, farg2) & +bind(C, name="_wrap_MultimediaData_data__set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_MultimediaData_data__get(farg1) & +bind(C, name="_wrap_MultimediaData_data__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_MultimediaData_data_encoding__set(farg1, farg2) & +bind(C, name="_wrap_MultimediaData_data_encoding__set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +end subroutine + +function swigc_MultimediaData_data_encoding__get(farg1) & +bind(C, name="_wrap_MultimediaData_data_encoding__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +subroutine swigc_MultimediaData_capture_start_time__set(farg1, farg2) & +bind(C, name="_wrap_MultimediaData_capture_start_time__set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_MultimediaData_capture_start_time__get(farg1) & +bind(C, name="_wrap_MultimediaData_capture_start_time__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_MultimediaData_file_uri__set(farg1, farg2) & +bind(C, name="_wrap_MultimediaData_file_uri__set") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +function swigc_MultimediaData_file_uri__get(farg1) & +bind(C, name="_wrap_MultimediaData_file_uri__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_MultimediaData_mime_type__set(farg1, farg2) & +bind(C, name="_wrap_MultimediaData_mime_type__set") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: farg2 +end subroutine + +function swigc_MultimediaData_mime_type__get(farg1) & +bind(C, name="_wrap_MultimediaData_mime_type__get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_new_MultimediaData() & +bind(C, name="_wrap_new_MultimediaData") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_delete_MultimediaData(farg1) & +bind(C, name="_wrap_delete_MultimediaData") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +end subroutine + +subroutine swigc_MultimediaData_op_assign__(farg1, farg2) & +bind(C, name="_wrap_MultimediaData_op_assign__") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_pcf_det_name_to_dev_pair_index(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_pcf_det_name_to_dev_pair_index") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +type(C_PTR), value :: farg2 +type(C_PTR), value :: farg3 +type(C_PTR), value :: farg4 +integer(C_INT) :: fresult +end function + +function swigc_new_DevPair__SWIG_0() & +bind(C, name="_wrap_new_DevPair__SWIG_0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper) :: fresult +end function + +function swigc_new_DevPair__SWIG_1(farg1, farg2) & +bind(C, name="_wrap_new_DevPair__SWIG_1") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +real(C_FLOAT), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +function swigc_new_DevPair__SWIG_2(farg1) & +bind(C, name="_wrap_new_DevPair__SWIG_2") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_DevPair_first_set(farg1, farg2) & +bind(C, name="_wrap_DevPair_first_set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +end subroutine + +function swigc_DevPair_first_get(farg1) & +bind(C, name="_wrap_DevPair_first_get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +subroutine swigc_DevPair_second_set(farg1, farg2) & +bind(C, name="_wrap_DevPair_second_set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT), intent(in) :: farg2 +end subroutine + +function swigc_DevPair_second_get(farg1) & +bind(C, name="_wrap_DevPair_second_get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +subroutine swigc_delete_DevPair(farg1) & +bind(C, name="_wrap_delete_DevPair") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +end subroutine + +subroutine swigc_DevPair_op_assign__(farg1, farg2) & +bind(C, name="_wrap_DevPair_op_assign__") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_new_DeviationPairs__SWIG_0() & +bind(C, name="_wrap_new_DeviationPairs__SWIG_0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper) :: fresult +end function + +function swigc_new_DeviationPairs__SWIG_1(farg1) & +bind(C, name="_wrap_new_DeviationPairs__SWIG_1") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_new_DeviationPairs__SWIG_2(farg1) & +bind(C, name="_wrap_new_DeviationPairs__SWIG_2") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +integer(C_INT), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_new_DeviationPairs__SWIG_3(farg1, farg2) & +bind(C, name="_wrap_new_DeviationPairs__SWIG_3") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +integer(C_INT), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +function swigc_DeviationPairs_size(farg1) & +bind(C, name="_wrap_DeviationPairs_size") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_DeviationPairs_capacity(farg1) & +bind(C, name="_wrap_DeviationPairs_capacity") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_DeviationPairs_empty(farg1) & +bind(C, name="_wrap_DeviationPairs_empty") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_DeviationPairs_front(farg1) & +bind(C, name="_wrap_DeviationPairs_front") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_DeviationPairs_back(farg1) & +bind(C, name="_wrap_DeviationPairs_back") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_DeviationPairs_reserve(farg1, farg2) & +bind(C, name="_wrap_DeviationPairs_reserve") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +end subroutine + +subroutine swigc_DeviationPairs_resize__SWIG_0(farg1, farg2) & +bind(C, name="_wrap_DeviationPairs_resize__SWIG_0") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +end subroutine + +subroutine swigc_DeviationPairs_resize__SWIG_1(farg1, farg2, farg3) & +bind(C, name="_wrap_DeviationPairs_resize__SWIG_1") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +end subroutine + +subroutine swigc_DeviationPairs_push_back(farg1, farg2) & +bind(C, name="_wrap_DeviationPairs_push_back") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +subroutine swigc_DeviationPairs_pop_back(farg1) & +bind(C, name="_wrap_DeviationPairs_pop_back") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +subroutine swigc_DeviationPairs_clear(farg1) & +bind(C, name="_wrap_DeviationPairs_clear") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +end subroutine + +subroutine swigc_DeviationPairs_set(farg1, farg2, farg3) & +bind(C, name="_wrap_DeviationPairs_set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +end subroutine + +function swigc_DeviationPairs_get(farg1, farg2) & +bind(C, name="_wrap_DeviationPairs_get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_DeviationPairs_insert(farg1, farg2, farg3) & +bind(C, name="_wrap_DeviationPairs_insert") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +end subroutine + +subroutine swigc_DeviationPairs_erase__SWIG_0(farg1, farg2) & +bind(C, name="_wrap_DeviationPairs_erase__SWIG_0") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +end subroutine + +subroutine swigc_DeviationPairs_erase__SWIG_1(farg1, farg2, farg3) & +bind(C, name="_wrap_DeviationPairs_erase__SWIG_1") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +integer(C_INT), intent(in) :: farg3 +end subroutine + +function swigc_DeviationPairs_front_ref(farg1) & +bind(C, name="_wrap_DeviationPairs_front_ref") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_DeviationPairs_back_ref(farg1) & +bind(C, name="_wrap_DeviationPairs_back_ref") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_DeviationPairs_get_ref(farg1, farg2) & +bind(C, name="_wrap_DeviationPairs_get_ref") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_delete_DeviationPairs(farg1) & +bind(C, name="_wrap_delete_DeviationPairs") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +end subroutine + +subroutine swigc_DeviationPairs_op_assign__(farg1, farg2) & +bind(C, name="_wrap_DeviationPairs_op_assign__") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_EnergyCalibration_type(farg1) & +bind(C, name="_wrap_EnergyCalibration_type") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_EnergyCalibration_valid(farg1) & +bind(C, name="_wrap_EnergyCalibration_valid") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_EnergyCalibration_coefficients(farg1) & +bind(C, name="_wrap_EnergyCalibration_coefficients") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_EnergyCalibration_deviation_pairs(farg1) & +bind(C, name="_wrap_EnergyCalibration_deviation_pairs") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_EnergyCalibration_channel_energies(farg1) & +bind(C, name="_wrap_EnergyCalibration_channel_energies") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_EnergyCalibration_num_channels(farg1) & +bind(C, name="_wrap_EnergyCalibration_num_channels") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_new_EnergyCalibration() & +bind(C, name="_wrap_new_EnergyCalibration") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_EnergyCalibration_set_polynomial(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_EnergyCalibration_set_polynomial") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +end subroutine + +subroutine swigc_EnergyCalibration_set_default_polynomial(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_EnergyCalibration_set_default_polynomial") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +end subroutine + +subroutine swigc_EnergyCalibration_set_full_range_fraction(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_EnergyCalibration_set_full_range_fraction") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +end subroutine + +function swigc_EnergyCalibration_op_lt__(farg1, farg2) & +bind(C, name="_wrap_EnergyCalibration_op_lt__") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_EnergyCalibration_op_eq__(farg1, farg2) & +bind(C, name="_wrap_EnergyCalibration_op_eq__") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_EnergyCalibration_op_ne__(farg1, farg2) & +bind(C, name="_wrap_EnergyCalibration_op_ne__") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_EnergyCalibration_memmorysize(farg1) & +bind(C, name="_wrap_EnergyCalibration_memmorysize") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_EnergyCalibration_channel_for_energy(farg1, farg2) & +bind(C, name="_wrap_EnergyCalibration_channel_for_energy") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_DOUBLE), intent(in) :: farg2 +real(C_DOUBLE) :: fresult +end function + +function swigc_EnergyCalibration_energy_for_channel(farg1, farg2) & +bind(C, name="_wrap_EnergyCalibration_energy_for_channel") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_DOUBLE), intent(in) :: farg2 +real(C_DOUBLE) :: fresult +end function + +function swigc_EnergyCalibration_lower_energy(farg1) & +bind(C, name="_wrap_EnergyCalibration_lower_energy") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +function swigc_EnergyCalibration_upper_energy(farg1) & +bind(C, name="_wrap_EnergyCalibration_upper_energy") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +real(C_FLOAT) :: fresult +end function + +function swigc_EnergyCalibration_sm_min_channels_get() & +bind(C, name="_wrap_EnergyCalibration_sm_min_channels_get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: fresult +end function + +function swigc_EnergyCalibration_sm_max_channels_get() & +bind(C, name="_wrap_EnergyCalibration_sm_max_channels_get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: fresult +end function + +function swigc_EnergyCalibration_sm_polynomial_offset_limit_get() & +bind(C, name="_wrap_EnergyCalibration_sm_polynomial_offset_limit_get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: fresult +end function + +subroutine swigc_EnergyCalibration_check_lower_energies(farg1, farg2, farg3) & +bind(C, name="_wrap_EnergyCalibration_check_lower_energies") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +end subroutine + +function swigc_EnergyCalibration_mutable_deviation_pairs(farg1) & +bind(C, name="_wrap_EnergyCalibration_mutable_deviation_pairs") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_EnergyCalibration_m_type_set(farg1, farg2) & +bind(C, name="_wrap_EnergyCalibration_m_type_set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +end subroutine + +function swigc_EnergyCalibration_m_type_get(farg1) & +bind(C, name="_wrap_EnergyCalibration_m_type_get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT) :: fresult +end function + +subroutine swigc_EnergyCalibration_m_coefficients_set(farg1, farg2) & +bind(C, name="_wrap_EnergyCalibration_m_coefficients_set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_EnergyCalibration_m_coefficients_get(farg1) & +bind(C, name="_wrap_EnergyCalibration_m_coefficients_get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_EnergyCalibration_m_deviation_pairs_set(farg1, farg2) & +bind(C, name="_wrap_EnergyCalibration_m_deviation_pairs_set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_EnergyCalibration_m_deviation_pairs_get(farg1) & +bind(C, name="_wrap_EnergyCalibration_m_deviation_pairs_get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_EnergyCalibration_m_channel_energies_set(farg1, farg2) & +bind(C, name="_wrap_EnergyCalibration_m_channel_energies_set") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_EnergyCalibration_m_channel_energies_get(farg1) & +bind(C, name="_wrap_EnergyCalibration_m_channel_energies_get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +subroutine swigc_delete_EnergyCalibration(farg1) & +bind(C, name="_wrap_delete_EnergyCalibration") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +end subroutine + +subroutine swigc_EnergyCalibration_op_assign__(farg1, farg2) & +bind(C, name="_wrap_EnergyCalibration_op_assign__") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(inout) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_energy_cal_combine_channels(farg1, farg2) & +bind(C, name="_wrap_energy_cal_combine_channels") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +function swigc_polynomial_binning(farg1, farg2, farg3) & +bind(C, name="_wrap_polynomial_binning") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper) :: fresult +end function + +function swigc_fullrangefraction_binning__SWIG_0(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_fullrangefraction_binning__SWIG_0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +integer(C_INT), intent(in) :: farg4 +type(SwigClassWrapper) :: fresult +end function + +function swigc_fullrangefraction_binning__SWIG_1(farg1, farg2, farg3) & +bind(C, name="_wrap_fullrangefraction_binning__SWIG_1") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper) :: fresult +end function + +function swigc_fullrangefraction_energy(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_fullrangefraction_energy") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +real(C_DOUBLE), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +real(C_DOUBLE) :: fresult +end function + +function swigc_polynomial_energy(farg1, farg2, farg3) & +bind(C, name="_wrap_polynomial_energy") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +real(C_DOUBLE), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +real(C_DOUBLE) :: fresult +end function + +function swigc_deviation_pair_correction(farg1, farg2) & +bind(C, name="_wrap_deviation_pair_correction") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +real(C_DOUBLE), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +real(C_DOUBLE) :: fresult +end function + +function swigc_correction_due_to_dev_pairs(farg1, farg2) & +bind(C, name="_wrap_correction_due_to_dev_pairs") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +real(C_DOUBLE), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +real(C_DOUBLE) :: fresult +end function + +function swigc_apply_deviation_pair(farg1, farg2) & +bind(C, name="_wrap_apply_deviation_pair") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +function swigc_polynomial_coef_to_fullrangefraction(farg1, farg2) & +bind(C, name="_wrap_polynomial_coef_to_fullrangefraction") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +function swigc_fullrangefraction_coef_to_polynomial(farg1, farg2) & +bind(C, name="_wrap_fullrangefraction_coef_to_polynomial") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +function swigc_mid_channel_polynomial_to_fullrangeFraction(farg1, farg2) & +bind(C, name="_wrap_mid_channel_polynomial_to_fullrangeFraction") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +integer(C_INT), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +function swigc_calibration_is_valid(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_calibration_is_valid") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +integer(C_INT), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +integer(C_INT), intent(in) :: farg4 +integer(C_INT) :: fresult +end function + +function swigc_polynomial_cal_remove_first_channels(farg1, farg2) & +bind(C, name="_wrap_polynomial_cal_remove_first_channels") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +integer(C_INT), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +function swigc_find_fullrangefraction_channel__SWIG_0(farg1, farg2, farg3, farg4, farg5) & +bind(C, name="_wrap_find_fullrangefraction_channel__SWIG_0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +real(C_DOUBLE), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +real(C_DOUBLE), intent(in) :: farg5 +real(C_DOUBLE) :: fresult +end function + +function swigc_find_fullrangefraction_channel__SWIG_1(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_find_fullrangefraction_channel__SWIG_1") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +real(C_DOUBLE), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +real(C_DOUBLE) :: fresult +end function + +function swigc_find_polynomial_channel__SWIG_0(farg1, farg2, farg3, farg4, farg5) & +bind(C, name="_wrap_find_polynomial_channel__SWIG_0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +real(C_DOUBLE), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +real(C_DOUBLE), intent(in) :: farg5 +real(C_DOUBLE) :: fresult +end function + +function swigc_find_polynomial_channel__SWIG_1(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_find_polynomial_channel__SWIG_1") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +real(C_DOUBLE), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +integer(C_INT), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +real(C_DOUBLE) :: fresult +end function + +subroutine swigc_rebin_by_lower_edge(farg1, farg2, farg3, farg4) & +bind(C, name="_wrap_rebin_by_lower_edge") +use, intrinsic :: ISO_C_BINDING +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigClassWrapper), intent(in) :: farg3 +type(SwigClassWrapper), intent(in) :: farg4 +end subroutine + +function swigc_write_CALp_file(farg1, farg2, farg3) & +bind(C, name="_wrap_write_CALp_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigClassWrapper), intent(in) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +type(SwigArrayWrapper) :: farg3 +integer(C_INT) :: fresult +end function + +function swigc_remove_file(farg1) & +bind(C, name="_wrap_remove_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_is_file(farg1) & +bind(C, name="_wrap_is_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_rename_file(farg1, farg2) & +bind(C, name="_wrap_rename_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: fresult +end function + +function swigc_is_directory(farg1) & +bind(C, name="_wrap_is_directory") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_create_directory(farg1) & +bind(C, name="_wrap_create_directory") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_can_rw_in_directory(farg1) & +bind(C, name="_wrap_can_rw_in_directory") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_append_path(farg1, farg2) & +bind(C, name="_wrap_append_path") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +type(SwigArrayWrapper) :: farg2 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_filename(farg1) & +bind(C, name="_wrap_filename") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_parent_path(farg1) & +bind(C, name="_wrap_parent_path") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_file_extension(farg1) & +bind(C, name="_wrap_file_extension") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_file_size(farg1) & +bind(C, name="_wrap_file_size") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_temp_dir() & +bind(C, name="_wrap_temp_dir") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: fresult +end function + +function swigc_is_absolute_path(farg1) & +bind(C, name="_wrap_is_absolute_path") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +integer(C_INT) :: fresult +end function + +function swigc_get_working_path() & +bind(C, name="_wrap_get_working_path") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: fresult +end function + +function swigc_temp_file_name(farg1, farg2) & +bind(C, name="_wrap_temp_file_name") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +type(SwigArrayWrapper) :: farg2 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_sm_recursive_ls_max_depth_get() & +bind(C, name="_wrap_sm_recursive_ls_max_depth_get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: fresult +end function + +function swigc_sm_ls_max_results_get() & +bind(C, name="_wrap_sm_ls_max_results_get") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: fresult +end function + +function swigc_recursive_ls__SWIG_0(farg1, farg2) & +bind(C, name="_wrap_recursive_ls__SWIG_0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigArrayWrapper) :: farg1 +type(SwigArrayWrapper) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +function swigc_recursive_ls__SWIG_1(farg1) & +bind(C, name="_wrap_recursive_ls__SWIG_1") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigArrayWrapper) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_recursive_ls__SWIG_2(farg1, farg2, farg3) & +bind(C, name="_wrap_recursive_ls__SWIG_2") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigArrayWrapper) :: farg1 +type(C_FUNPTR), value :: farg2 +type(C_PTR), intent(in) :: farg3 +type(SwigClassWrapper) :: fresult +end function + +function swigc_ls_files_in_directory__SWIG_0(farg1, farg2) & +bind(C, name="_wrap_ls_files_in_directory__SWIG_0") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigArrayWrapper) :: farg1 +type(SwigArrayWrapper) :: farg2 +type(SwigClassWrapper) :: fresult +end function + +function swigc_ls_files_in_directory__SWIG_1(farg1) & +bind(C, name="_wrap_ls_files_in_directory__SWIG_1") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigArrayWrapper) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_ls_files_in_directory__SWIG_2(farg1, farg2, farg3) & +bind(C, name="_wrap_ls_files_in_directory__SWIG_2") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigArrayWrapper) :: farg1 +type(C_FUNPTR), value :: farg2 +type(C_PTR), intent(in) :: farg3 +type(SwigClassWrapper) :: fresult +end function + +function swigc_ls_directories_in_directory(farg1) & +bind(C, name="_wrap_ls_directories_in_directory") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigArrayWrapper) :: farg1 +type(SwigClassWrapper) :: fresult +end function + +function swigc_fs_relative(farg1, farg2) & +bind(C, name="_wrap_fs_relative") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +type(SwigArrayWrapper) :: farg2 +type(SwigArrayWrapper) :: fresult +end function + +function swigc_lexically_normalize_path(farg1) & +bind(C, name="_wrap_lexically_normalize_path") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +type(SwigArrayWrapper) :: fresult +end function + +subroutine swigc_load_file_data(farg1, farg2) & +bind(C, name="_wrap_load_file_data") +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +import :: swigclasswrapper +type(SwigArrayWrapper) :: farg1 +type(SwigClassWrapper), intent(in) :: farg2 +end subroutine + +function swigc_likely_not_spec_file(farg1) & +bind(C, name="_wrap_likely_not_spec_file") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +import :: swigarraywrapper +type(SwigArrayWrapper) :: farg1 +integer(C_INT) :: fresult +end function + +end interface + + +contains + ! MODULE SUBPROGRAMS +function swigf_new_FloatVector__SWIG_0() & +result(self) +use, intrinsic :: ISO_C_BINDING +type(FloatVector) :: self +type(SwigClassWrapper) :: fresult + +fresult = swigc_new_FloatVector__SWIG_0() +self%swigdata = fresult +end function + +function swigf_new_FloatVector__SWIG_1(other) & +result(self) +use, intrinsic :: ISO_C_BINDING +type(FloatVector) :: self +class(FloatVector), intent(in) :: other +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = other%swigdata +fresult = swigc_new_FloatVector__SWIG_1(farg1) +self%swigdata = fresult +end function + +function swigf_new_FloatVector__SWIG_2(count) & +result(self) +use, intrinsic :: ISO_C_BINDING +type(FloatVector) :: self +integer, intent(in) :: count +type(SwigClassWrapper) :: fresult +integer(C_SIZE_T) :: farg1 + +farg1 = int(count, C_INT) +fresult = swigc_new_FloatVector__SWIG_2(farg1) +self%swigdata = fresult +end function + +function swigf_new_FloatVector__SWIG_3(count, v) & +result(self) +use, intrinsic :: ISO_C_BINDING +type(FloatVector) :: self +integer, intent(in) :: count +real(C_FLOAT), intent(in) :: v +type(SwigClassWrapper) :: fresult +integer(C_SIZE_T) :: farg1 +real(C_FLOAT) :: farg2 + +farg1 = int(count, C_INT) +farg2 = v +fresult = swigc_new_FloatVector__SWIG_3(farg1, farg2) +self%swigdata = fresult +end function + +function swigf_FloatVector_size(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer :: swig_result +class(FloatVector), intent(in) :: self +integer(C_SIZE_T) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_FloatVector_size(farg1) +swig_result = int(fresult) +end function + +function swigf_FloatVector_capacity(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer :: swig_result +class(FloatVector), intent(in) :: self +integer(C_SIZE_T) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_FloatVector_capacity(farg1) +swig_result = int(fresult) +end function + + +subroutine SWIGTM_fout_bool(imout, fout) + use, intrinsic :: ISO_C_BINDING + integer(kind=C_INT), intent(in) :: imout + logical, intent(out) :: fout + fout = (imout /= 0) +end subroutine + +function swigf_FloatVector_empty(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(FloatVector), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_FloatVector_empty(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_FloatVector_front(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(FloatVector), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_FloatVector_front(farg1) +swig_result = fresult +end function + +function swigf_FloatVector_back(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(FloatVector), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_FloatVector_back(farg1) +swig_result = fresult +end function + +subroutine swigf_FloatVector_reserve(self, count) +use, intrinsic :: ISO_C_BINDING +class(FloatVector), intent(in) :: self +integer, intent(in) :: count +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 + +farg1 = self%swigdata +farg2 = int(count, C_INT) +call swigc_FloatVector_reserve(farg1, farg2) +end subroutine + +subroutine swigf_FloatVector_resize__SWIG_0(self, count) +use, intrinsic :: ISO_C_BINDING +class(FloatVector), intent(in) :: self +integer, intent(in) :: count +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 + +farg1 = self%swigdata +farg2 = int(count, C_INT) +call swigc_FloatVector_resize__SWIG_0(farg1, farg2) +end subroutine + +subroutine swigf_FloatVector_resize__SWIG_1(self, count, v) +use, intrinsic :: ISO_C_BINDING +class(FloatVector), intent(in) :: self +integer, intent(in) :: count +real(C_FLOAT), intent(in) :: v +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 +real(C_FLOAT) :: farg3 + +farg1 = self%swigdata +farg2 = int(count, C_INT) +farg3 = v +call swigc_FloatVector_resize__SWIG_1(farg1, farg2, farg3) +end subroutine + +subroutine swigf_FloatVector_push_back(self, v) +use, intrinsic :: ISO_C_BINDING +class(FloatVector), intent(in) :: self +real(C_FLOAT), intent(in) :: v +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 + +farg1 = self%swigdata +farg2 = v +call swigc_FloatVector_push_back(farg1, farg2) +end subroutine + +subroutine swigf_FloatVector_pop_back(self) +use, intrinsic :: ISO_C_BINDING +class(FloatVector), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_FloatVector_pop_back(farg1) +end subroutine + +subroutine swigf_FloatVector_clear(self) +use, intrinsic :: ISO_C_BINDING +class(FloatVector), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_FloatVector_clear(farg1) +end subroutine + +subroutine swigf_FloatVector_set(self, index, v) +use, intrinsic :: ISO_C_BINDING +class(FloatVector), intent(in) :: self +integer, intent(in) :: index +real(C_FLOAT), intent(in) :: v +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 +real(C_FLOAT) :: farg3 + +farg1 = self%swigdata +farg2 = int(index, C_INT) +farg3 = v +call swigc_FloatVector_set(farg1, farg2, farg3) +end subroutine + +function swigf_FloatVector_get(self, index) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(FloatVector), intent(in) :: self +integer, intent(in) :: index +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 + +farg1 = self%swigdata +farg2 = int(index, C_INT) +fresult = swigc_FloatVector_get(farg1, farg2) +swig_result = fresult +end function + +subroutine swigf_FloatVector_insert(self, index, v) +use, intrinsic :: ISO_C_BINDING +class(FloatVector), intent(in) :: self +integer, intent(in) :: index +real(C_FLOAT), intent(in) :: v +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 +real(C_FLOAT) :: farg3 + +farg1 = self%swigdata +farg2 = int(index, C_INT) +farg3 = v +call swigc_FloatVector_insert(farg1, farg2, farg3) +end subroutine + +subroutine swigf_FloatVector_erase__SWIG_0(self, index) +use, intrinsic :: ISO_C_BINDING +class(FloatVector), intent(in) :: self +integer, intent(in) :: index +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 + +farg1 = self%swigdata +farg2 = int(index, C_INT) +call swigc_FloatVector_erase__SWIG_0(farg1, farg2) +end subroutine + +subroutine swigf_FloatVector_erase__SWIG_1(self, start_index, stop_index) +use, intrinsic :: ISO_C_BINDING +class(FloatVector), intent(in) :: self +integer, intent(in) :: start_index +integer, intent(in) :: stop_index +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 +integer(C_SIZE_T) :: farg3 + +farg1 = self%swigdata +farg2 = int(start_index, C_INT) +farg3 = int(stop_index, C_INT) +call swigc_FloatVector_erase__SWIG_1(farg1, farg2, farg3) +end subroutine + +function swigf_FloatVector_front_ref(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT), pointer :: swig_result +class(FloatVector), intent(in) :: self +type(C_PTR) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_FloatVector_front_ref(farg1) +call c_f_pointer(fresult, swig_result) +end function + +function swigf_FloatVector_back_ref(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT), pointer :: swig_result +class(FloatVector), intent(in) :: self +type(C_PTR) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_FloatVector_back_ref(farg1) +call c_f_pointer(fresult, swig_result) +end function + +function swigf_FloatVector_get_ref(self, index) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT), pointer :: swig_result +class(FloatVector), intent(in) :: self +integer, intent(in) :: index +type(C_PTR) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 + +farg1 = self%swigdata +farg2 = int(index, C_INT) +fresult = swigc_FloatVector_get_ref(farg1, farg2) +call c_f_pointer(fresult, swig_result) +end function + +subroutine swigf_FloatVector_release(self) +use, intrinsic :: ISO_C_BINDING +class(FloatVector), intent(inout) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +if (btest(farg1%cmemflags, swig_cmem_own_bit)) then +call swigc_delete_FloatVector(farg1) +endif +farg1%cptr = C_NULL_PTR +farg1%cmemflags = 0 +self%swigdata = farg1 +end subroutine + +subroutine swigf_FloatVector_op_assign__(self, other) +use, intrinsic :: ISO_C_BINDING +class(FloatVector), intent(inout) :: self +type(FloatVector), intent(in) :: other +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = other%swigdata +call swigc_FloatVector_op_assign__(farg1, farg2) +self%swigdata = farg1 +end subroutine + +function swigf_new_MeasurementVector__SWIG_0() & +result(self) +use, intrinsic :: ISO_C_BINDING +type(MeasurementVector) :: self +type(SwigClassWrapper) :: fresult + +fresult = swigc_new_MeasurementVector__SWIG_0() +self%swigdata = fresult +end function + +function swigf_new_MeasurementVector__SWIG_1(other) & +result(self) +use, intrinsic :: ISO_C_BINDING +type(MeasurementVector) :: self +class(MeasurementVector), intent(in) :: other +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = other%swigdata +fresult = swigc_new_MeasurementVector__SWIG_1(farg1) +self%swigdata = fresult +end function + +function swigf_new_MeasurementVector__SWIG_2(count) & +result(self) +use, intrinsic :: ISO_C_BINDING +type(MeasurementVector) :: self +integer, intent(in) :: count +type(SwigClassWrapper) :: fresult +integer(C_SIZE_T) :: farg1 + +farg1 = int(count, C_INT) +fresult = swigc_new_MeasurementVector__SWIG_2(farg1) +self%swigdata = fresult +end function + +function swigf_new_MeasurementVector__SWIG_3(count, v) & +result(self) +use, intrinsic :: ISO_C_BINDING +type(MeasurementVector) :: self +integer, intent(in) :: count +class(Measurement), intent(in) :: v +type(SwigClassWrapper) :: fresult +integer(C_SIZE_T) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = int(count, C_INT) +farg2 = v%swigdata +fresult = swigc_new_MeasurementVector__SWIG_3(farg1, farg2) +self%swigdata = fresult +end function + +function swigf_MeasurementVector_size(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer :: swig_result +class(MeasurementVector), intent(in) :: self +integer(C_SIZE_T) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_MeasurementVector_size(farg1) +swig_result = int(fresult) +end function + +function swigf_MeasurementVector_capacity(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer :: swig_result +class(MeasurementVector), intent(in) :: self +integer(C_SIZE_T) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_MeasurementVector_capacity(farg1) +swig_result = int(fresult) +end function + +function swigf_MeasurementVector_empty(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(MeasurementVector), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_MeasurementVector_empty(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_MeasurementVector_front(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(Measurement) :: swig_result +class(MeasurementVector), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_MeasurementVector_front(farg1) +swig_result%swigdata = fresult +end function + +function swigf_MeasurementVector_back(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(Measurement) :: swig_result +class(MeasurementVector), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_MeasurementVector_back(farg1) +swig_result%swigdata = fresult +end function + +subroutine swigf_MeasurementVector_reserve(self, count) +use, intrinsic :: ISO_C_BINDING +class(MeasurementVector), intent(in) :: self +integer, intent(in) :: count +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 + +farg1 = self%swigdata +farg2 = int(count, C_INT) +call swigc_MeasurementVector_reserve(farg1, farg2) +end subroutine + +subroutine swigf_MeasurementVector_resize__SWIG_0(self, count) +use, intrinsic :: ISO_C_BINDING +class(MeasurementVector), intent(in) :: self +integer, intent(in) :: count +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 + +farg1 = self%swigdata +farg2 = int(count, C_INT) +call swigc_MeasurementVector_resize__SWIG_0(farg1, farg2) +end subroutine + +subroutine swigf_MeasurementVector_resize__SWIG_1(self, count, v) +use, intrinsic :: ISO_C_BINDING +class(MeasurementVector), intent(in) :: self +integer, intent(in) :: count +class(Measurement), intent(in) :: v +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = self%swigdata +farg2 = int(count, C_INT) +farg3 = v%swigdata +call swigc_MeasurementVector_resize__SWIG_1(farg1, farg2, farg3) +end subroutine + +subroutine swigf_MeasurementVector_push_back(self, v) +use, intrinsic :: ISO_C_BINDING +class(MeasurementVector), intent(in) :: self +class(Measurement), intent(in) :: v +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = v%swigdata +call swigc_MeasurementVector_push_back(farg1, farg2) +end subroutine + +subroutine swigf_MeasurementVector_pop_back(self) +use, intrinsic :: ISO_C_BINDING +class(MeasurementVector), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_MeasurementVector_pop_back(farg1) +end subroutine + +subroutine swigf_MeasurementVector_clear(self) +use, intrinsic :: ISO_C_BINDING +class(MeasurementVector), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_MeasurementVector_clear(farg1) +end subroutine + +subroutine swigf_MeasurementVector_set(self, index, v) +use, intrinsic :: ISO_C_BINDING +class(MeasurementVector), intent(in) :: self +integer, intent(in) :: index +class(Measurement), intent(in) :: v +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = self%swigdata +farg2 = int(index, C_INT) +farg3 = v%swigdata +call swigc_MeasurementVector_set(farg1, farg2, farg3) +end subroutine + +function swigf_MeasurementVector_get(self, index) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(Measurement) :: swig_result +class(MeasurementVector), intent(in) :: self +integer, intent(in) :: index +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 + +farg1 = self%swigdata +farg2 = int(index, C_INT) +fresult = swigc_MeasurementVector_get(farg1, farg2) +swig_result%swigdata = fresult +end function + +subroutine swigf_MeasurementVector_insert(self, index, v) +use, intrinsic :: ISO_C_BINDING +class(MeasurementVector), intent(in) :: self +integer, intent(in) :: index +class(Measurement), intent(in) :: v +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = self%swigdata +farg2 = int(index, C_INT) +farg3 = v%swigdata +call swigc_MeasurementVector_insert(farg1, farg2, farg3) +end subroutine + +subroutine swigf_MeasurementVector_erase__SWIG_0(self, index) +use, intrinsic :: ISO_C_BINDING +class(MeasurementVector), intent(in) :: self +integer, intent(in) :: index +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 + +farg1 = self%swigdata +farg2 = int(index, C_INT) +call swigc_MeasurementVector_erase__SWIG_0(farg1, farg2) +end subroutine + +subroutine swigf_MeasurementVector_erase__SWIG_1(self, start_index, stop_index) +use, intrinsic :: ISO_C_BINDING +class(MeasurementVector), intent(in) :: self +integer, intent(in) :: start_index +integer, intent(in) :: stop_index +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 +integer(C_SIZE_T) :: farg3 + +farg1 = self%swigdata +farg2 = int(start_index, C_INT) +farg3 = int(stop_index, C_INT) +call swigc_MeasurementVector_erase__SWIG_1(farg1, farg2, farg3) +end subroutine + +function swigf_MeasurementVector_front_ref(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(Measurement) :: swig_result +class(MeasurementVector), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_MeasurementVector_front_ref(farg1) +swig_result%swigdata = fresult +end function + +function swigf_MeasurementVector_back_ref(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(Measurement) :: swig_result +class(MeasurementVector), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_MeasurementVector_back_ref(farg1) +swig_result%swigdata = fresult +end function + +function swigf_MeasurementVector_get_ref(self, index) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(Measurement) :: swig_result +class(MeasurementVector), intent(in) :: self +integer, intent(in) :: index +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_SIZE_T) :: farg2 + +farg1 = self%swigdata +farg2 = int(index, C_INT) +fresult = swigc_MeasurementVector_get_ref(farg1, farg2) +swig_result%swigdata = fresult +end function + +subroutine swigf_MeasurementVector_release(self) +use, intrinsic :: ISO_C_BINDING +class(MeasurementVector), intent(inout) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +if (btest(farg1%cmemflags, swig_cmem_own_bit)) then +call swigc_delete_MeasurementVector(farg1) +endif +farg1%cptr = C_NULL_PTR +farg1%cmemflags = 0 +self%swigdata = farg1 +end subroutine + +subroutine swigf_MeasurementVector_op_assign__(self, other) +use, intrinsic :: ISO_C_BINDING +class(MeasurementVector), intent(inout) :: self +type(MeasurementVector), intent(in) :: other +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = other%swigdata +call swigc_MeasurementVector_op_assign__(farg1, farg2) +self%swigdata = farg1 +end subroutine + + +subroutine SWIGTM_fin_char_Sm_(finp, iminp, temp) + use, intrinsic :: ISO_C_BINDING + character(len=*), intent(in) :: finp + type(SwigArrayWrapper), intent(out) :: iminp + character(kind=C_CHAR), dimension(:), target, allocatable, intent(out) :: temp + integer :: i + + allocate(character(kind=C_CHAR) :: temp(len(finp) + 1)) + do i=1,len(finp) + temp(i) = char(ichar(finp(i:i)), kind=C_CHAR) + end do + i = len(finp) + 1 + temp(i) = C_NULL_CHAR ! C finp compatibility + iminp%data = c_loc(temp) + iminp%size = len(finp, kind=C_SIZE_T) +end subroutine + +function spectrumTypeFromDescription(descrip) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(SpectrumType) :: swig_result +character(len=*), intent(in) :: descrip +integer(C_INT) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(descrip, farg1, farg1_temp) +fresult = swigc_spectrumTypeFromDescription(farg1) +swig_result = fresult +end function + + +subroutine SWIGTM_fout_char_Sm_(imout, fout) + use, intrinsic :: ISO_C_BINDING + type(SwigArrayWrapper), intent(in) :: imout + character(len=:), allocatable, intent(out) :: fout + character(kind=C_CHAR), dimension(:), pointer :: chars + integer(kind=C_SIZE_T) :: i + call c_f_pointer(imout%data, chars, [imout%size]) + allocate(character(len=imout%size) :: fout) + do i=1, imout%size + fout(i:i) = char(ichar(chars(i))) + end do +end subroutine + +function suggestedNameEnding(type) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +integer(SaveSpectrumAsType), intent(in) :: type +type(SwigArrayWrapper) :: fresult +integer(C_INT) :: farg1 + +farg1 = type +fresult = swigc_suggestedNameEnding(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +if (.false.) call SWIG_free(fresult%data) +end function + +function swigf_is_candidate_n42_file__SWIG_0(data) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +character(len=*), intent(in) :: data +integer(C_INT) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(data, farg1, farg1_temp) +fresult = swigc_is_candidate_n42_file__SWIG_0(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_is_candidate_n42_file__SWIG_1(data, data_end) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +character(len=*), intent(in) :: data +character(len=*), intent(in) :: data_end +integer(C_INT) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +call SWIGTM_fin_char_Sm_(data, farg1, farg1_temp) +call SWIGTM_fin_char_Sm_(data_end, farg2, farg2_temp) +fresult = swigc_is_candidate_n42_file__SWIG_1(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function convert_n42_utf16_xml_to_utf8(data, data_end) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +character(len=*), intent(in) :: data +character(len=*), intent(in) :: data_end +type(SwigArrayWrapper) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +call SWIGTM_fin_char_Sm_(data, farg1, farg1_temp) +call SWIGTM_fin_char_Sm_(data_end, farg2, farg2_temp) +fresult = swigc_convert_n42_utf16_xml_to_utf8(farg1, farg2) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +if (.false.) call SWIG_free(fresult%data) +end function + +subroutine add_analysis_results_to_2012_N42(ana, radinstrumentdata, xmldocmutex) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysis), intent(in) :: ana +class(SWIGTYPE_p_rapidxml__xml_nodeT_char_t), intent(in) :: radinstrumentdata +class(SWIGTYPE_p_std__mutex), intent(in) :: xmldocmutex +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = ana%swigdata +farg2 = radinstrumentdata%swigdata +farg3 = xmldocmutex%swigdata +call swigc_add_analysis_results_to_2012_N42(farg1, farg2, farg3) +end subroutine + +subroutine set_analysis_info_from_n42(analysis_node, analysis) +use, intrinsic :: ISO_C_BINDING +class(SWIGTYPE_p_rapidxml__xml_nodeT_char_t), intent(in) :: analysis_node +class(DetectorAnalysis), intent(in) :: analysis +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = analysis_node%swigdata +farg2 = analysis%swigdata +call swigc_set_analysis_info_from_n42(farg1, farg2) +end subroutine + +function gamma_integral(hist, lowenergy, upperunergy) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +class(Measurement), intent(in) :: hist +real(C_FLOAT), intent(in) :: lowenergy +real(C_FLOAT), intent(in) :: upperunergy +real(C_DOUBLE) :: fresult +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 +real(C_FLOAT) :: farg3 + +farg1 = hist%swigdata +farg2 = lowenergy +farg3 = upperunergy +fresult = swigc_gamma_integral(farg1, farg2, farg3) +swig_result = fresult +end function + +function detectorTypeToString(type) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +integer(DetectorType), intent(in) :: type +type(SwigArrayWrapper) :: fresult +integer(C_INT) :: farg1 + +farg1 = type +fresult = swigc_detectorTypeToString(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_new_Measurement() & +result(self) +use, intrinsic :: ISO_C_BINDING +type(Measurement) :: self +type(SwigClassWrapper) :: fresult + +fresult = swigc_new_Measurement() +self%swigdata = fresult +end function + +subroutine swigf_Measurement_release(self) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(inout) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +if (btest(farg1%cmemflags, swig_cmem_own_bit)) then +call swigc_delete_Measurement(farg1) +endif +farg1%cptr = C_NULL_PTR +farg1%cmemflags = 0 +self%swigdata = farg1 +end subroutine + +function swigf_Measurement_memmorysize(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_memmorysize(farg1) +swig_result = fresult +end function + +function swigf_Measurement_live_time(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_live_time(farg1) +swig_result = fresult +end function + +subroutine swigf_Measurement_set_live_time(self, time) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +real(C_FLOAT), intent(in) :: time +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 + +farg1 = self%swigdata +farg2 = time +call swigc_Measurement_set_live_time(farg1, farg2) +end subroutine + +function swigf_Measurement_real_time(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_real_time(farg1) +swig_result = fresult +end function + +subroutine swigf_Measurement_set_real_time(self, time) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +real(C_FLOAT), intent(in) :: time +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 + +farg1 = self%swigdata +farg2 = time +call swigc_Measurement_set_real_time(farg1, farg2) +end subroutine + +function swigf_Measurement_contained_neutron(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_contained_neutron(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_Measurement_sample_number(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_sample_number(farg1) +swig_result = fresult +end function + +function swigf_Measurement_title(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(Measurement), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_title(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_Measurement_occupied(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(OccupancyStatus) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_occupied(farg1) +swig_result = fresult +end function + +function swigf_Measurement_gamma_count_sum(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +class(Measurement), intent(in) :: self +real(C_DOUBLE) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_gamma_count_sum(farg1) +swig_result = fresult +end function + +function swigf_Measurement_neutron_live_time(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_neutron_live_time(farg1) +swig_result = fresult +end function + +function swigf_Measurement_neutron_counts_sum(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +class(Measurement), intent(in) :: self +real(C_DOUBLE) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_neutron_counts_sum(farg1) +swig_result = fresult +end function + +function swigf_Measurement_speed(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_speed(farg1) +swig_result = fresult +end function + +function swigf_Measurement_dx(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_dx(farg1) +swig_result = fresult +end function + +function swigf_Measurement_dy(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_dy(farg1) +swig_result = fresult +end function + +function swigf_Measurement_latitude(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +class(Measurement), intent(in) :: self +real(C_DOUBLE) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_latitude(farg1) +swig_result = fresult +end function + +function swigf_Measurement_longitude(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +class(Measurement), intent(in) :: self +real(C_DOUBLE) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_longitude(farg1) +swig_result = fresult +end function + +function swigf_Measurement_has_gps_info(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_has_gps_info(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_Measurement_dose_rate(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_dose_rate(farg1) +swig_result = fresult +end function + +function swigf_Measurement_exposure_rate(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_exposure_rate(farg1) +swig_result = fresult +end function + +function swigf_Measurement_pcf_tag(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(C_CHAR) :: swig_result +class(Measurement), intent(in) :: self +character(C_CHAR) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_pcf_tag(farg1) +swig_result = fresult +end function + +function swigf_Measurement_source_description(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(Measurement), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_source_description(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_Measurement_measurement_description(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(Measurement), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_measurement_description(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_Measurement_position_time(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_position_time(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_detector_name(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(Measurement), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_detector_name(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +subroutine swigf_Measurement_update_detector_name_from_title(self) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_Measurement_update_detector_name_from_title(farg1) +end subroutine + +function swigf_Measurement_detector_number(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_detector_number(farg1) +swig_result = fresult +end function + +function swigf_Measurement_detector_type(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(Measurement), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_detector_type(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_Measurement_quality_status(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(QualityStatus) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_quality_status(farg1) +swig_result = fresult +end function + +function swigf_Measurement_source_type(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(SourceType) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_source_type(farg1) +swig_result = fresult +end function + +function swigf_Measurement_remarks(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_remarks(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_mutable_remarks(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_mutable_remarks(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_parse_warnings(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_parse_warnings(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_start_time(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_start_time(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_start_time_copy(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_start_time_copy(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_energy_calibration_model(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(SWIGTYPE_SpecUtils__EnergyCalType) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_energy_calibration_model(farg1) +swig_result = fresult +end function + +function swigf_Measurement_calibration_coeffs(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(FloatVector) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_calibration_coeffs(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_deviation_pairs(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(DeviationPairs) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_deviation_pairs(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_energy_calibration(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(EnergyCalibration) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_energy_calibration(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_mutable_energy_calibration(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(EnergyCalibration) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_mutable_energy_calibration(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_channel_energies(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__shared_ptrT_std__vectorT_float_t_const_t) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_channel_energies(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_gamma_counts(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__shared_ptrT_std__vectorT_float_t_const_t) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_gamma_counts(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_neutron_counts(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(FloatVector) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_neutron_counts(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_location_state(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__shared_ptrT_SpecUtils__LocationState_const_t) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_location_state(farg1) +swig_result%swigdata = fresult +end function + +subroutine swigf_Measurement_set_title(self, title) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +character(len=*), intent(in) :: title +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(title, farg2, farg2_temp) +call swigc_Measurement_set_title(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_start_time(self, timestamp) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +class(SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN), intent(in) :: timestamp +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = timestamp%swigdata +call swigc_Measurement_set_start_time(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_remarks(self, remarks) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +class(SWIGTYPE_p_std__vectorT_std__string_t), intent(in) :: remarks +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = remarks%swigdata +call swigc_Measurement_set_remarks(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_parse_warnings(self, warnings) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +class(SWIGTYPE_p_std__vectorT_std__string_t), intent(in) :: warnings +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = warnings%swigdata +call swigc_Measurement_set_parse_warnings(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_source_type(self, type) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +integer(SourceType), intent(in) :: type +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = type +call swigc_Measurement_set_source_type(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_position(self, longitude, latitude, pos_time) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +real(C_DOUBLE), intent(in) :: longitude +real(C_DOUBLE), intent(in) :: latitude +type(SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN), intent(in) :: pos_time +type(SwigClassWrapper) :: farg1 +real(C_DOUBLE) :: farg2 +real(C_DOUBLE) :: farg3 +type(SwigClassWrapper) :: farg4 + +farg1 = self%swigdata +farg2 = longitude +farg3 = latitude +farg4 = pos_time%swigdata +call swigc_Measurement_set_position(farg1, farg2, farg3, farg4) +end subroutine + +subroutine swigf_Measurement_set_sample_number(self, samplenum) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +integer(C_INT), intent(in) :: samplenum +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = samplenum +call swigc_Measurement_set_sample_number(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_occupancy_status(self, status) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +integer(OccupancyStatus), intent(in) :: status +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = status +call swigc_Measurement_set_occupancy_status(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_detector_name(self, name) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +character(len=*), intent(in) :: name +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(name, farg2, farg2_temp) +call swigc_Measurement_set_detector_name(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_detector_number(self, detnum) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +integer(C_INT), intent(in) :: detnum +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = detnum +call swigc_Measurement_set_detector_number(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_neutron_counts__SWIG_0(self, counts, neutron_live_time) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +class(FloatVector), intent(in) :: counts +real(C_FLOAT), intent(in) :: neutron_live_time +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +real(C_FLOAT) :: farg3 + +farg1 = self%swigdata +farg2 = counts%swigdata +farg3 = neutron_live_time +call swigc_Measurement_set_neutron_counts__SWIG_0(farg1, farg2, farg3) +end subroutine + +subroutine swigf_Measurement_set_neutron_counts__SWIG_1(self, counts) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +class(FloatVector), intent(in) :: counts +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = counts%swigdata +call swigc_Measurement_set_neutron_counts__SWIG_1(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_pcf_tag(self, tag_char) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +character(C_CHAR), intent(in) :: tag_char +type(SwigClassWrapper) :: farg1 +character(C_CHAR) :: farg2 + +farg1 = self%swigdata +farg2 = tag_char +call swigc_Measurement_set_pcf_tag(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_source_description(self, description) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +character(len=*), intent(in) :: description +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(description, farg2, farg2_temp) +call swigc_Measurement_set_source_description(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_measurement_description(self, description) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +character(len=*), intent(in) :: description +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(description, farg2, farg2_temp) +call swigc_Measurement_set_measurement_description(farg1, farg2) +end subroutine + +function swigf_Measurement_num_gamma_channels(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_num_gamma_channels(farg1) +swig_result = fresult +end function + +function swigf_Measurement_find_gamma_channel(self, energy) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(Measurement), intent(in) :: self +real(C_FLOAT), intent(in) :: energy +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 + +farg1 = self%swigdata +farg2 = energy +fresult = swigc_Measurement_find_gamma_channel(farg1, farg2) +swig_result = fresult +end function + +function swigf_Measurement_gamma_channel_content(self, channel) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT), intent(in) :: channel +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = channel +fresult = swigc_Measurement_gamma_channel_content(farg1, farg2) +swig_result = fresult +end function + +function swigf_Measurement_gamma_channel_lower(self, channel) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT), intent(in) :: channel +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = channel +fresult = swigc_Measurement_gamma_channel_lower(farg1, farg2) +swig_result = fresult +end function + +function swigf_Measurement_gamma_channel_center(self, channel) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT), intent(in) :: channel +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = channel +fresult = swigc_Measurement_gamma_channel_center(farg1, farg2) +swig_result = fresult +end function + +function swigf_Measurement_gamma_channel_upper(self, channel) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT), intent(in) :: channel +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = channel +fresult = swigc_Measurement_gamma_channel_upper(farg1, farg2) +swig_result = fresult +end function + +function swigf_Measurement_gamma_channel_width(self, channel) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT), intent(in) :: channel +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = channel +fresult = swigc_Measurement_gamma_channel_width(farg1, farg2) +swig_result = fresult +end function + +function swigf_Measurement_gamma_integral(self, lower_energy, upper_energy) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +class(Measurement), intent(in) :: self +real(C_FLOAT), intent(in) :: lower_energy +real(C_FLOAT), intent(in) :: upper_energy +real(C_DOUBLE) :: fresult +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 +real(C_FLOAT) :: farg3 + +farg1 = self%swigdata +farg2 = lower_energy +farg3 = upper_energy +fresult = swigc_Measurement_gamma_integral(farg1, farg2, farg3) +swig_result = fresult +end function + +function swigf_Measurement_gamma_channels_sum(self, startbin, endbin) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT), intent(in) :: startbin +integer(C_INT), intent(in) :: endbin +real(C_DOUBLE) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +integer(C_INT) :: farg3 + +farg1 = self%swigdata +farg2 = startbin +farg3 = endbin +fresult = swigc_Measurement_gamma_channels_sum(farg1, farg2, farg3) +swig_result = fresult +end function + +function swigf_Measurement_gamma_channel_energies(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__shared_ptrT_std__vectorT_float_t_const_t) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_gamma_channel_energies(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_gamma_channel_contents(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__shared_ptrT_std__vectorT_float_t_const_t) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_gamma_channel_contents(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_gamma_energy_min(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_gamma_energy_min(farg1) +swig_result = fresult +end function + +function swigf_Measurement_gamma_energy_max(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_gamma_energy_max(farg1) +swig_result = fresult +end function + +function swigf_Measurement_derived_data_properties(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_uint32_t) :: swig_result +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_derived_data_properties(farg1) +swig_result%swigdata = fresult +end function + +function swigf_Measurement_rpm_panel_number(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_rpm_panel_number(farg1) +swig_result = fresult +end function + +function swigf_Measurement_rpm_column_number(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_rpm_column_number(farg1) +swig_result = fresult +end function + +function swigf_Measurement_rpm_mca_number(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_rpm_mca_number(farg1) +swig_result = fresult +end function + +function swigf_Measurement_write_2006_N42_xml(self, ostr) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(Measurement), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: ostr +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = ostr%swigdata +fresult = swigc_Measurement_write_2006_N42_xml(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_Measurement_write_csv(self, ostr) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(Measurement), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: ostr +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = ostr%swigdata +fresult = swigc_Measurement_write_csv(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_Measurement_write_txt(self, ostr) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(Measurement), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: ostr +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = ostr%swigdata +fresult = swigc_Measurement_write_txt(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +subroutine swigf_Measurement_reset(self) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_Measurement_reset(farg1) +end subroutine + +subroutine swigf_Measurement_rebin(self, cal) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +class(EnergyCalibration), intent(in) :: cal +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = cal%swigdata +call swigc_Measurement_rebin(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_energy_calibration(self, cal) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +class(EnergyCalibration), intent(in) :: cal +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = cal%swigdata +call swigc_Measurement_set_energy_calibration(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_ecal(self, cal) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +class(EnergyCalibration), intent(in) :: cal +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = cal%swigdata +call swigc_Measurement_set_ecal(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_info_from_2006_N42_spectrum_node(self, spectrum) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +type(SWIGTYPE_p_p_rapidxml__xml_nodeT_char_t), intent(in) :: spectrum +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = spectrum%swigdata +call swigc_Measurement_set_info_from_2006_N42_spectrum_node(farg1, farg2) +end subroutine + +function swigf_Measurement_gamma_count_at(self, index) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT), intent(in) :: index +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = index +fresult = swigc_Measurement_gamma_count_at(farg1, farg2) +swig_result = fresult +end function + +function swigf_Measurement_get_num_channels(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(Measurement), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_get_num_channels(farg1) +swig_result = fresult +end function + +function swigf_Measurement_get_start_time_string(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(Measurement), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_get_start_time_string(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +subroutine swigf_Measurement_set_start_time_from_string(self, time_str) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +character(len=*), intent(in) :: time_str +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(time_str, farg2, farg2_temp) +call swigc_Measurement_set_start_time_from_string(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_set_neutron_count(self, count) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +real(C_FLOAT), intent(in) :: count +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 + +farg1 = self%swigdata +farg2 = count +call swigc_Measurement_set_neutron_count(farg1, farg2) +end subroutine + +function swigf_Measurement_get_neutron_count(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(Measurement), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_Measurement_get_neutron_count(farg1) +swig_result = fresult +end function + +subroutine SWIGTM_fin_float_Sb__SB_(finp, iminp) + use, intrinsic :: ISO_C_BINDING + real(C_FLOAT), dimension(:), intent(in), target :: finp + type(SwigArrayWrapper), intent(out) :: iminp + integer(C_SIZE_T) :: sz + real(C_FLOAT), pointer :: imtemp + + sz = size(finp, kind=C_SIZE_T) + if (sz > 0_c_size_t) then + imtemp => finp(1) + iminp%data = c_loc(imtemp) + else + iminp%data = c_null_ptr + end if + iminp%size = sz +end subroutine +subroutine swigf_Measurement_set_spectrum(self, spectrum) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +real(C_FLOAT), dimension(:), target :: spectrum +type(SwigClassWrapper) :: farg1 +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_float_Sb__SB_(spectrum, farg2) +call swigc_Measurement_set_spectrum(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_get_spectrum(self, spectrum) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(in) :: self +real(C_FLOAT), dimension(:), target :: spectrum +type(SwigClassWrapper) :: farg1 +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_float_Sb__SB_(spectrum, farg2) +call swigc_Measurement_get_spectrum(farg1, farg2) +end subroutine + +subroutine swigf_Measurement_op_assign__(self, other) +use, intrinsic :: ISO_C_BINDING +class(Measurement), intent(inout) :: self +type(Measurement), intent(in) :: other +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = other%swigdata +call swigc_Measurement_op_assign__(farg1, farg2) +self%swigdata = farg1 +end subroutine + +function swigf_new_SpecFile__SWIG_0() & +result(self) +use, intrinsic :: ISO_C_BINDING +type(SpecFile) :: self +type(SwigClassWrapper) :: fresult + +fresult = swigc_new_SpecFile__SWIG_0() +self%swigdata = fresult +end function + +function swigf_new_SpecFile__SWIG_1(rhs) & +result(self) +use, intrinsic :: ISO_C_BINDING +type(SpecFile) :: self +class(SpecFile), intent(in) :: rhs +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = rhs%swigdata +fresult = swigc_new_SpecFile__SWIG_1(farg1) +self%swigdata = fresult +end function + +subroutine swigf_SpecFile_release(self) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(inout) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +if (btest(farg1%cmemflags, swig_cmem_own_bit)) then +call swigc_delete_SpecFile(farg1) +endif +farg1%cptr = C_NULL_PTR +farg1%cmemflags = 0 +self%swigdata = farg1 +end subroutine + +function swigf_SpecFile_load_file__SWIG_0(self, filename, parser_type, file_ending_hint) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(ParserType), intent(in) :: parser_type +character(len=*), intent(in) :: file_ending_hint +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: farg3 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg4_temp +type(SwigArrayWrapper) :: farg4 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +farg3 = parser_type +call SWIGTM_fin_char_Sm_(file_ending_hint, farg4, farg4_temp) +fresult = swigc_SpecFile_load_file__SWIG_0(farg1, farg2, farg3, farg4) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_file__SWIG_1(self, filename, parser_type) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(ParserType), intent(in) :: parser_type +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: farg3 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +farg3 = parser_type +fresult = swigc_SpecFile_load_file__SWIG_1(farg1, farg2, farg3) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_parse_warnings(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_parse_warnings(farg1) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_modified(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_modified(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +subroutine swigf_SpecFile_reset_modified(self) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_SpecFile_reset_modified(farg1) +end subroutine + +function swigf_SpecFile_modified_since_decode(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_modified_since_decode(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +subroutine swigf_SpecFile_reset_modified_since_decode(self) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_SpecFile_reset_modified_since_decode(farg1) +end subroutine + +function swigf_SpecFile_gamma_live_time(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(SpecFile), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_gamma_live_time(farg1) +swig_result = fresult +end function + +function swigf_SpecFile_gamma_real_time(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(SpecFile), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_gamma_real_time(farg1) +swig_result = fresult +end function + +function swigf_SpecFile_gamma_count_sum(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +class(SpecFile), intent(in) :: self +real(C_DOUBLE) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_gamma_count_sum(farg1) +swig_result = fresult +end function + +function swigf_SpecFile_neutron_counts_sum(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +class(SpecFile), intent(in) :: self +real(C_DOUBLE) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_neutron_counts_sum(farg1) +swig_result = fresult +end function + +function swigf_SpecFile_filename(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(SpecFile), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_filename(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_SpecFile_detector_names(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_detector_names(farg1) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_detector_numbers(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_int_t) :: swig_result +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_detector_numbers(farg1) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_gamma_detector_names(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_gamma_detector_names(farg1) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_neutron_detector_names(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_neutron_detector_names(farg1) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_uuid(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(SpecFile), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_uuid(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_SpecFile_remarks(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_remarks(farg1) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_lane_number(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_lane_number(farg1) +swig_result = fresult +end function + +function swigf_SpecFile_measurement_location_name(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(SpecFile), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_measurement_location_name(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_SpecFile_inspection(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(SpecFile), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_inspection(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_SpecFile_measurement_operator(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(SpecFile), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_measurement_operator(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_SpecFile_sample_numbers(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2) :: swig_result +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_sample_numbers(farg1) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_num_measurements(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_num_measurements(farg1) +swig_result = fresult +end function + +function swigf_SpecFile_detector_type(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(DetectorType) :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_detector_type(farg1) +swig_result = fresult +end function + +function swigf_SpecFile_instrument_type(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(SpecFile), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_instrument_type(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_SpecFile_manufacturer(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(SpecFile), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_manufacturer(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_SpecFile_instrument_model(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(SpecFile), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_instrument_model(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_SpecFile_instrument_id(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(SpecFile), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_instrument_id(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_SpecFile_measurements(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__shared_ptrT_SpecUtils__MeasurVEY9A) :: swig_result +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_measurements(farg1) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_measurement__SWIG_0(self, num) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(Measurement) :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT), intent(in) :: num +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = num +fresult = swigc_SpecFile_measurement__SWIG_0(farg1, farg2) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_detectors_analysis(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__shared_ptrT_SpecUtils__DetectorAnalysis_const_t) :: swig_result +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_detectors_analysis(farg1) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_multimedia_data(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__shared_ptrT_SpecUtils__Multi1X71T7) :: swig_result +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_multimedia_data(farg1) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_has_gps_info(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_has_gps_info(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_mean_latitude(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +class(SpecFile), intent(in) :: self +real(C_DOUBLE) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_mean_latitude(farg1) +swig_result = fresult +end function + +function swigf_SpecFile_mean_longitude(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +class(SpecFile), intent(in) :: self +real(C_DOUBLE) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_mean_longitude(farg1) +swig_result = fresult +end function + +function swigf_SpecFile_passthrough(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_passthrough(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_contains_derived_data(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_contains_derived_data(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_contains_non_derived_data(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_contains_non_derived_data(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +subroutine swigf_SpecFile_set_filename(self, n) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: n +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(n, farg2, farg2_temp) +call swigc_SpecFile_set_filename(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_set_remarks__SWIG_0(self, n) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__vectorT_std__string_t), intent(in) :: n +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = n%swigdata +call swigc_SpecFile_set_remarks__SWIG_0(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_add_remark(self, remark) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: remark +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(remark, farg2, farg2_temp) +call swigc_SpecFile_add_remark(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_set_parse_warnings(self, warnings) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__vectorT_std__string_t), intent(in) :: warnings +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = warnings%swigdata +call swigc_SpecFile_set_parse_warnings(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_set_uuid(self, n) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: n +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(n, farg2, farg2_temp) +call swigc_SpecFile_set_uuid(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_set_lane_number(self, num) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +integer(C_INT), intent(in) :: num +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = num +call swigc_SpecFile_set_lane_number(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_set_measurement_location_name(self, n) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: n +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(n, farg2, farg2_temp) +call swigc_SpecFile_set_measurement_location_name(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_set_inspection(self, n) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: n +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(n, farg2, farg2_temp) +call swigc_SpecFile_set_inspection(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_set_instrument_type(self, n) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: n +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(n, farg2, farg2_temp) +call swigc_SpecFile_set_instrument_type(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_set_detector_type(self, type) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +integer(DetectorType), intent(in) :: type +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = type +call swigc_SpecFile_set_detector_type(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_set_manufacturer(self, n) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: n +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(n, farg2, farg2_temp) +call swigc_SpecFile_set_manufacturer(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_set_instrument_model(self, n) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: n +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(n, farg2, farg2_temp) +call swigc_SpecFile_set_instrument_model(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_set_instrument_id(self, n) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: n +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(n, farg2, farg2_temp) +call swigc_SpecFile_set_instrument_id(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_set_live_time(self, lt, measurement2) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +real(C_FLOAT), intent(in) :: lt +class(Measurement), intent(in) :: measurement2 +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = self%swigdata +farg2 = lt +farg3 = measurement2%swigdata +call swigc_SpecFile_set_live_time(farg1, farg2, farg3) +end subroutine + +subroutine swigf_SpecFile_set_real_time(self, rt, measurement2) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +real(C_FLOAT), intent(in) :: rt +class(Measurement), intent(in) :: measurement2 +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = self%swigdata +farg2 = rt +farg3 = measurement2%swigdata +call swigc_SpecFile_set_real_time(farg1, farg2, farg3) +end subroutine + +subroutine swigf_SpecFile_set_start_time(self, timestamp, measurement2) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN), intent(in) :: timestamp +class(Measurement), intent(in) :: measurement2 +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = self%swigdata +farg2 = timestamp%swigdata +farg3 = measurement2%swigdata +call swigc_SpecFile_set_start_time(farg1, farg2, farg3) +end subroutine + +subroutine swigf_SpecFile_set_remarks__SWIG_1(self, remarks, measurement2) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__vectorT_std__string_t), intent(in) :: remarks +class(Measurement), intent(in) :: measurement2 +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = self%swigdata +farg2 = remarks%swigdata +farg3 = measurement2%swigdata +call swigc_SpecFile_set_remarks__SWIG_1(farg1, farg2, farg3) +end subroutine + +subroutine swigf_SpecFile_set_source_type(self, type, measurement2) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +integer(SourceType), intent(in) :: type +class(Measurement), intent(in) :: measurement2 +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = self%swigdata +farg2 = type +farg3 = measurement2%swigdata +call swigc_SpecFile_set_source_type(farg1, farg2, farg3) +end subroutine + +subroutine swigf_SpecFile_set_position(self, longitude, latitude, position_time, measurement4) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +real(C_DOUBLE), intent(in) :: longitude +real(C_DOUBLE), intent(in) :: latitude +type(SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN), intent(in) :: position_time +class(Measurement), intent(in) :: measurement4 +type(SwigClassWrapper) :: farg1 +real(C_DOUBLE) :: farg2 +real(C_DOUBLE) :: farg3 +type(SwigClassWrapper) :: farg4 +type(SwigClassWrapper) :: farg5 + +farg1 = self%swigdata +farg2 = longitude +farg3 = latitude +farg4 = position_time%swigdata +farg5 = measurement4%swigdata +call swigc_SpecFile_set_position(farg1, farg2, farg3, farg4, farg5) +end subroutine + +subroutine swigf_SpecFile_set_title(self, title, measurement2) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: title +class(Measurement), intent(in) :: measurement2 +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(title, farg2, farg2_temp) +farg3 = measurement2%swigdata +call swigc_SpecFile_set_title(farg1, farg2, farg3) +end subroutine + + +subroutine SWIGTM_fin_bool(finp, iminp) + use, intrinsic :: ISO_C_BINDING + logical, intent(in) :: finp + integer(kind=C_INT), intent(out) :: iminp + if (finp .eqv. .true.) then + iminp = 1 + else + iminp = 0 + end if +end subroutine + +subroutine swigf_SpecFile_set_contained_neutrons(self, contained, counts, measurement3, neutron_live_time) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +logical, intent(in) :: contained +real(C_FLOAT), intent(in) :: counts +class(Measurement), intent(in) :: measurement3 +real(C_FLOAT), intent(in) :: neutron_live_time +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +real(C_FLOAT) :: farg3 +type(SwigClassWrapper) :: farg4 +real(C_FLOAT) :: farg5 + +farg1 = self%swigdata +call SWIGTM_fin_bool(contained, farg2) +farg3 = counts +farg4 = measurement3%swigdata +farg5 = neutron_live_time +call swigc_SpecFile_set_contained_neutrons(farg1, farg2, farg3, farg4, farg5) +end subroutine + +subroutine swigf_SpecFile_set_detectors_analysis(self, ana) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(DetectorAnalysis), intent(in) :: ana +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = ana%swigdata +call swigc_SpecFile_set_detectors_analysis(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_change_detector_name(self, original_name, new_name) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: original_name +character(len=*), intent(in) :: new_name +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg3_temp +type(SwigArrayWrapper) :: farg3 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(original_name, farg2, farg2_temp) +call SWIGTM_fin_char_Sm_(new_name, farg3, farg3_temp) +call swigc_SpecFile_change_detector_name(farg1, farg2, farg3) +end subroutine + +subroutine swigf_SpecFile_change_sample_numbers(self, from_to_sample_nums) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__vectorT_std__pairT_int_int_t_t), intent(in) :: from_to_sample_nums +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = from_to_sample_nums%swigdata +call swigc_SpecFile_change_sample_numbers(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_add_measurement__SWIG_0(self, meas, docleanup) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(Measurement), intent(in) :: meas +logical, intent(in) :: docleanup +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +integer(C_INT) :: farg3 + +farg1 = self%swigdata +farg2 = meas%swigdata +call SWIGTM_fin_bool(docleanup, farg3) +call swigc_SpecFile_add_measurement__SWIG_0(farg1, farg2, farg3) +end subroutine + +subroutine swigf_SpecFile_add_measurement__SWIG_1(self, meas) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(Measurement), intent(in) :: meas +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = meas%swigdata +call swigc_SpecFile_add_measurement__SWIG_1(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_remove_measurement(self, meas, docleanup) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(Measurement), intent(in) :: meas +logical, intent(in) :: docleanup +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +integer(C_INT) :: farg3 + +farg1 = self%swigdata +farg2 = meas%swigdata +call SWIGTM_fin_bool(docleanup, farg3) +call swigc_SpecFile_remove_measurement(farg1, farg2, farg3) +end subroutine + +subroutine swigf_SpecFile_remove_measurements(self, meas) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__vectorT_std__shared_ptrT_SpecUtils__MeasurVEY9A), intent(in) :: meas +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = meas%swigdata +call swigc_SpecFile_remove_measurements(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_clear_multimedia_data(self) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_SpecFile_clear_multimedia_data(farg1) +end subroutine + +subroutine swigf_SpecFile_add_multimedia_data(self, data) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(MultimediaData), intent(in) :: data +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = data%swigdata +call swigc_SpecFile_add_multimedia_data(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_set_multimedia_data(self, data) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__vectorT_std__shared_ptrT_SpecUtils__Multi1X71T7), intent(in) :: data +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = data%swigdata +call swigc_SpecFile_set_multimedia_data(farg1, farg2) +end subroutine + +function swigf_SpecFile_occupancy_number_from_remarks(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_occupancy_number_from_remarks(farg1) +swig_result = fresult +end function + +function swigf_SpecFile_sample_measurements(self, sample_number) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__shared_ptrT_SpecUtils__MeasurVEY9A) :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT), intent(in) :: sample_number +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = sample_number +fresult = swigc_SpecFile_sample_measurements(farg1, farg2) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_measurement__SWIG_1(self, sample_number, det_name) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(Measurement) :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT), intent(in) :: sample_number +character(len=*), intent(in) :: det_name +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg3_temp +type(SwigArrayWrapper) :: farg3 + +farg1 = self%swigdata +farg2 = sample_number +call SWIGTM_fin_char_Sm_(det_name, farg3, farg3_temp) +fresult = swigc_SpecFile_measurement__SWIG_1(farg1, farg2, farg3) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_measurement__SWIG_2(self, sample_number, detector_number) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(Measurement) :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT), intent(in) :: sample_number +integer(C_INT), intent(in) :: detector_number +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +integer(C_INT) :: farg3 + +farg1 = self%swigdata +farg2 = sample_number +farg3 = detector_number +fresult = swigc_SpecFile_measurement__SWIG_2(farg1, farg2, farg3) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_suggested_sum_energy_calibration(self, sample_numbers, detector_names) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(EnergyCalibration) :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: sample_numbers +class(SWIGTYPE_p_std__vectorT_std__string_t), intent(in) :: detector_names +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = self%swigdata +farg2 = sample_numbers%swigdata +farg3 = detector_names%swigdata +fresult = swigc_SpecFile_suggested_sum_energy_calibration(farg1, farg2, farg3) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_sum_measurements(self, sample_numbers, detector_names, energy_cal) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(Measurement) :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: sample_numbers +class(SWIGTYPE_p_std__vectorT_std__string_t), intent(in) :: detector_names +class(EnergyCalibration), intent(in) :: energy_cal +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 + +farg1 = self%swigdata +farg2 = sample_numbers%swigdata +farg3 = detector_names%swigdata +farg4 = energy_cal%swigdata +fresult = swigc_SpecFile_sum_measurements(farg1, farg2, farg3, farg4) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_memmorysize(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_memmorysize(farg1) +swig_result = fresult +end function + +function swigf_SpecFile_gamma_channel_counts(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__setT_size_t_std__lessT_size_t_t_std__allocYIIZM) :: swig_result +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_gamma_channel_counts(farg1) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_num_gamma_channels(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_num_gamma_channels(farg1) +swig_result = fresult +end function + +function swigf_SpecFile_keep_n_bin_spectra_only(self, nbin) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT), intent(in) :: nbin +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = nbin +fresult = swigc_SpecFile_keep_n_bin_spectra_only(farg1, farg2) +swig_result = fresult +end function + +function swigf_SpecFile_contained_neutron(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_contained_neutron(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_energy_cal_variants(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__setT_std__string_std__lessT_std__string_t1Q4VKZ) :: swig_result +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_energy_cal_variants(farg1) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_keep_energy_cal_variants(self, variants) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__setT_std__string_std__lessT_std__string_t1Q4VKZ), intent(in) :: variants +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = variants%swigdata +fresult = swigc_SpecFile_keep_energy_cal_variants(farg1, farg2) +swig_result = fresult +end function + +function swigf_SpecFile_keep_derived_data_variant(self, tokeep) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(SpecFile), intent(in) :: self +integer(SpecFile_DerivedVariantToKeep), intent(in) :: tokeep +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = tokeep +fresult = swigc_SpecFile_keep_derived_data_variant(farg1, farg2) +swig_result = fresult +end function + +function swigf_SpecFile_remove_detectors_data(self, dets_to_remove) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__setT_std__string_std__lessT_std__string_t1Q4VKZ), intent(in) :: dets_to_remove +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = dets_to_remove%swigdata +fresult = swigc_SpecFile_remove_detectors_data(farg1, farg2) +swig_result = fresult +end function + +function swigf_SpecFile_remove_neutron_measurements(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_remove_neutron_measurements(farg1) +swig_result = fresult +end function + +function swigf_SpecFile_background_sample_number(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_background_sample_number(farg1) +swig_result = fresult +end function + +function swigf_SpecFile_generate_psuedo_uuid(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(SpecFile), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_generate_psuedo_uuid(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +subroutine swigf_SpecFile_reset(self) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_SpecFile_reset(farg1) +end subroutine + +function swigf_SpecFile_load_N42_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_N42_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_pcf_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_pcf_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_spc_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_spc_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_chn_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_chn_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_iaea_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_iaea_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_binary_exploranium_file(self, file_name) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: file_name +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(file_name, farg2, farg2_temp) +fresult = swigc_SpecFile_load_binary_exploranium_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_micro_raider_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_micro_raider_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_txt_or_csv_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_txt_or_csv_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_cnf_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_cnf_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_tracs_mps_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_tracs_mps_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_aram_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_aram_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_spectroscopic_daily_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_spectroscopic_daily_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_amptek_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_amptek_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_ortec_listmode_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_ortec_listmode_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_lsrm_spe_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_lsrm_spe_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_tka_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_tka_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_multiact_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_multiact_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_phd_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_phd_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_lzs_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_lzs_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_radiacode_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_radiacode_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_xml_scan_data_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_xml_scan_data_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_json_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_json_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_caen_gxml_file(self, filename) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +fresult = swigc_SpecFile_load_caen_gxml_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_N42(self, istr) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: istr +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = istr%swigdata +fresult = swigc_SpecFile_load_from_N42(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_N42_from_data__SWIG_0(self, data) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: data +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(data, farg2, farg2_temp) +fresult = swigc_SpecFile_load_N42_from_data__SWIG_0(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_N42_from_data__SWIG_1(self, data, data_end) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: data +character(len=*), intent(in) :: data_end +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg3_temp +type(SwigArrayWrapper) :: farg3 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(data, farg2, farg2_temp) +call SWIGTM_fin_char_Sm_(data_end, farg3, farg3_temp) +fresult = swigc_SpecFile_load_N42_from_data__SWIG_1(farg1, farg2, farg3) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_iaea_spc(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_iaea_spc(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_binary_spc(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_binary_spc(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_N42_document(self, document_node) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_rapidxml__xml_nodeT_char_t), intent(in) :: document_node +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = document_node%swigdata +fresult = swigc_SpecFile_load_from_N42_document(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_micro_raider_from_data(self, data) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: data +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(data, farg2, farg2_temp) +fresult = swigc_SpecFile_load_from_micro_raider_from_data(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_binary_exploranium(self, istr) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: istr +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = istr%swigdata +fresult = swigc_SpecFile_load_from_binary_exploranium(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_pcf(self, istr) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: istr +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = istr%swigdata +fresult = swigc_SpecFile_load_from_pcf(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_txt_or_csv(self, istr) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: istr +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = istr%swigdata +fresult = swigc_SpecFile_load_from_txt_or_csv(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_Gr135_txt(self, istr) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: istr +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = istr%swigdata +fresult = swigc_SpecFile_load_from_Gr135_txt(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_spectroscopic_daily_file(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_spectroscopic_daily_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_srpm210_csv(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_srpm210_csv(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_D3S_raw(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_D3S_raw(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_amptek_mca(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_amptek_mca(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_ortec_listmode(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_ortec_listmode(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_lsrm_spe(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_lsrm_spe(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_tka(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_tka(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_multiact(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_multiact(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_phd(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_phd(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_lzs(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_lzs(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_radiacode(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_radiacode(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_radiacode_spectrogram(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_radiacode_spectrogram(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_xml_scan_data(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_xml_scan_data(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_iaea(self, istr) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: istr +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = istr%swigdata +fresult = swigc_SpecFile_load_from_iaea(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_chn(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_chn(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_cnf(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_cnf(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_tracs_mps(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_tracs_mps(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_aram(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_aram(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_json(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_json(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_load_from_caen_gxml(self, input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +fresult = swigc_SpecFile_load_from_caen_gxml(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +subroutine swigf_SpecFile_cleanup_after_load__SWIG_0(self, flags) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +integer(C_INT), intent(in) :: flags +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = flags +call swigc_SpecFile_cleanup_after_load__SWIG_0(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_cleanup_after_load__SWIG_1(self) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_SpecFile_cleanup_after_load__SWIG_1(farg1) +end subroutine + +subroutine swigf_SpecFile_recalc_total_counts(self) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_SpecFile_recalc_total_counts(farg1) +end subroutine + +subroutine swigf_SpecFile_merge_neutron_meas_into_gamma_meas(self) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_SpecFile_merge_neutron_meas_into_gamma_meas(farg1) +end subroutine + +subroutine swigf_SpecFile_rebin_measurement(self, cal, measurement2) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(EnergyCalibration), intent(in) :: cal +class(Measurement), intent(in) :: measurement2 +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = self%swigdata +farg2 = cal%swigdata +farg3 = measurement2%swigdata +call swigc_SpecFile_rebin_measurement(farg1, farg2, farg3) +end subroutine + +subroutine swigf_SpecFile_rebin_all_measurements(self, cal) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(EnergyCalibration), intent(in) :: cal +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = cal%swigdata +call swigc_SpecFile_rebin_all_measurements(farg1, farg2) +end subroutine + +subroutine swigf_SpecFile_set_energy_calibration_from_CALp_file(self, input) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__istream), intent(in) :: input +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = input%swigdata +call swigc_SpecFile_set_energy_calibration_from_CALp_file(farg1, farg2) +end subroutine + +function swigf_SpecFile_detector_names_to_numbers(self, det_names) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2) :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__vectorT_std__string_t), intent(in) :: det_names +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = det_names%swigdata +fresult = swigc_SpecFile_detector_names_to_numbers(farg1, farg2) +swig_result%swigdata = fresult +end function + +subroutine swigf_SpecFile_write_to_file__SWIG_0(self, filename, format) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +integer(SaveSpectrumAsType), intent(in) :: format +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 +integer(C_INT) :: farg3 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +farg3 = format +call swigc_SpecFile_write_to_file__SWIG_0(farg1, farg2, farg3) +end subroutine + +subroutine swigf_SpecFile_write_to_file__SWIG_1(self, filename, sample_nums, det_nums, format) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +type(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: sample_nums +type(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: det_nums +integer(SaveSpectrumAsType), intent(in) :: format +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 +integer(C_INT) :: farg5 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +farg3 = sample_nums%swigdata +farg4 = det_nums%swigdata +farg5 = format +call swigc_SpecFile_write_to_file__SWIG_1(farg1, farg2, farg3, farg4, farg5) +end subroutine + +subroutine swigf_SpecFile_write_to_file__SWIG_2(self, filename, sample_nums, det_nums, format) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +type(SWIGTYPE_p_std__vectorT_int_t), intent(in) :: sample_nums +type(SWIGTYPE_p_std__vectorT_int_t), intent(in) :: det_nums +integer(SaveSpectrumAsType), intent(in) :: format +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 +integer(C_INT) :: farg5 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +farg3 = sample_nums%swigdata +farg4 = det_nums%swigdata +farg5 = format +call swigc_SpecFile_write_to_file__SWIG_2(farg1, farg2, farg3, farg4, farg5) +end subroutine + +subroutine swigf_SpecFile_write_to_file__SWIG_3(self, filename, sample_nums, det_names, format) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +character(len=*), intent(in) :: filename +class(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: sample_nums +class(SWIGTYPE_p_std__vectorT_std__string_t), intent(in) :: det_names +integer(SaveSpectrumAsType), intent(in) :: format +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 +integer(C_INT) :: farg5 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(filename, farg2, farg2_temp) +farg3 = sample_nums%swigdata +farg4 = det_names%swigdata +farg5 = format +call swigc_SpecFile_write_to_file__SWIG_3(farg1, farg2, farg3, farg4, farg5) +end subroutine + +subroutine swigf_SpecFile_write__SWIG_0(self, strm, sample_nums, det_nums, format) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: strm +type(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: sample_nums +type(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: det_nums +integer(SaveSpectrumAsType), intent(in) :: format +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 +integer(C_INT) :: farg5 + +farg1 = self%swigdata +farg2 = strm%swigdata +farg3 = sample_nums%swigdata +farg4 = det_nums%swigdata +farg5 = format +call swigc_SpecFile_write__SWIG_0(farg1, farg2, farg3, farg4, farg5) +end subroutine + +subroutine swigf_SpecFile_write__SWIG_1(self, strm, sample_nums, det_names, format) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: strm +type(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: sample_nums +class(SWIGTYPE_p_std__vectorT_std__string_t), intent(in) :: det_names +integer(SaveSpectrumAsType), intent(in) :: format +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 +integer(C_INT) :: farg5 + +farg1 = self%swigdata +farg2 = strm%swigdata +farg3 = sample_nums%swigdata +farg4 = det_names%swigdata +farg5 = format +call swigc_SpecFile_write__SWIG_1(farg1, farg2, farg3, farg4, farg5) +end subroutine + +function swigf_SpecFile_write_pcf(self, ostr) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: ostr +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = ostr%swigdata +fresult = swigc_SpecFile_write_pcf(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_write_2006_N42(self, ostr) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: ostr +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = ostr%swigdata +fresult = swigc_SpecFile_write_2006_N42(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_write_csv(self, ostr) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: ostr +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = ostr%swigdata +fresult = swigc_SpecFile_write_csv(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_write_txt(self, ostr) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: ostr +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = ostr%swigdata +fresult = swigc_SpecFile_write_txt(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_write_integer_chn__SWIG_0(self, ostr, sample_nums, det_nums) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: ostr +type(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: sample_nums +class(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: det_nums +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 + +farg1 = self%swigdata +farg2 = ostr%swigdata +farg3 = sample_nums%swigdata +farg4 = det_nums%swigdata +fresult = swigc_SpecFile_write_integer_chn__SWIG_0(farg1, farg2, farg3, farg4) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_write_integer_chn__SWIG_1(self, ostr, sample_nums, det_names) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: ostr +type(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: sample_nums +class(SWIGTYPE_p_std__vectorT_std__string_t), intent(in) :: det_names +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 + +farg1 = self%swigdata +farg2 = ostr%swigdata +farg3 = sample_nums%swigdata +farg4 = det_names%swigdata +fresult = swigc_SpecFile_write_integer_chn__SWIG_1(farg1, farg2, farg3, farg4) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_write_binary_spc(self, ostr, type, sample_nums, det_nums) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: ostr +integer(SpecFile_SpcBinaryType), intent(in) :: type +type(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: sample_nums +class(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: det_nums +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +integer(C_INT) :: farg3 +type(SwigClassWrapper) :: farg4 +type(SwigClassWrapper) :: farg5 + +farg1 = self%swigdata +farg2 = ostr%swigdata +farg3 = type +farg4 = sample_nums%swigdata +farg5 = det_nums%swigdata +fresult = swigc_SpecFile_write_binary_spc(farg1, farg2, farg3, farg4, farg5) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_write_ascii_spc(self, output, sample_nums, det_nums) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: output +type(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: sample_nums +class(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: det_nums +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 + +farg1 = self%swigdata +farg2 = output%swigdata +farg3 = sample_nums%swigdata +farg4 = det_nums%swigdata +fresult = swigc_SpecFile_write_ascii_spc(farg1, farg2, farg3, farg4) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_write_binary_exploranium_gr130v0(self, output) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: output +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = output%swigdata +fresult = swigc_SpecFile_write_binary_exploranium_gr130v0(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_write_binary_exploranium_gr135v2(self, output) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: output +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = output%swigdata +fresult = swigc_SpecFile_write_binary_exploranium_gr135v2(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_write_iaea_spe(self, output, sample_nums, det_nums) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: output +type(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: sample_nums +class(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: det_nums +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 + +farg1 = self%swigdata +farg2 = output%swigdata +farg3 = sample_nums%swigdata +farg4 = det_nums%swigdata +fresult = swigc_SpecFile_write_iaea_spe(farg1, farg2, farg3, farg4) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_write_cnf(self, output, sample_nums, det_nums) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: output +type(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: sample_nums +class(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: det_nums +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 + +farg1 = self%swigdata +farg2 = output%swigdata +farg3 = sample_nums%swigdata +farg4 = det_nums%swigdata +fresult = swigc_SpecFile_write_cnf(farg1, farg2, farg3, farg4) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_write_tka(self, output, sample_nums, det_nums) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: output +type(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: sample_nums +class(SWIGTYPE_p_std__setT_int_std__lessT_int_t_std__allocatorT10FDJ2), intent(in) :: det_nums +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 + +farg1 = self%swigdata +farg2 = output%swigdata +farg3 = sample_nums%swigdata +farg4 = det_nums%swigdata +fresult = swigc_SpecFile_write_tka(farg1, farg2, farg3, farg4) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function get_SpecFile_2012N42_VERSION() & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +integer(C_INT) :: fresult + +fresult = swigc_SpecFile_2012N42_VERSION_get() +swig_result = fresult +end function + +function swigf_SpecFile_create_2012_N42_xml(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__shared_ptrT_rapidxml__xml_documentT_char_t_t) :: swig_result +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_create_2012_N42_xml(farg1) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_write_2012_N42(self, ostr) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SpecFile), intent(in) :: self +class(SWIGTYPE_p_std__ostream), intent(in) :: ostr +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = ostr%swigdata +fresult = swigc_SpecFile_write_2012_N42(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_SpecFile_mutex(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__recursive_mutex) :: swig_result +class(SpecFile), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_mutex(farg1) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_measurement_at(self, index) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(Measurement) :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT), intent(in) :: index +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = index +fresult = swigc_SpecFile_measurement_at(farg1, farg2) +swig_result%swigdata = fresult +end function + +function swigf_SpecFile_get_max_channel_count(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(SpecFile), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_SpecFile_get_max_channel_count(farg1) +swig_result = fresult +end function + +subroutine swigf_SpecFile_op_assign__(self, other) +use, intrinsic :: ISO_C_BINDING +class(SpecFile), intent(inout) :: self +type(SpecFile), intent(in) :: other +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = other%swigdata +call swigc_SpecFile_op_assign__(farg1, farg2) +self%swigdata = farg1 +end subroutine + +subroutine swigf_DetectorAnalysisResult_remark__set(self, remark_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysisResult), intent(in) :: self +character(len=*), intent(in) :: remark_ +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(remark_, farg2, farg2_temp) +call swigc_DetectorAnalysisResult_remark__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysisResult_remark__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(DetectorAnalysisResult), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysisResult_remark__get(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +subroutine swigf_DetectorAnalysisResult_nuclide__set(self, nuclide_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysisResult), intent(in) :: self +character(len=*), intent(in) :: nuclide_ +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(nuclide_, farg2, farg2_temp) +call swigc_DetectorAnalysisResult_nuclide__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysisResult_nuclide__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(DetectorAnalysisResult), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysisResult_nuclide__get(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +subroutine swigf_DetectorAnalysisResult_activity__set(self, activity_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysisResult), intent(in) :: self +real(C_FLOAT), intent(in) :: activity_ +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 + +farg1 = self%swigdata +farg2 = activity_ +call swigc_DetectorAnalysisResult_activity__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysisResult_activity__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(DetectorAnalysisResult), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysisResult_activity__get(farg1) +swig_result = fresult +end function + +subroutine swigf_DetectorAnalysisResult_nuclide_type__set(self, nuclide_type_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysisResult), intent(in) :: self +character(len=*), intent(in) :: nuclide_type_ +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(nuclide_type_, farg2, farg2_temp) +call swigc_DetectorAnalysisResult_nuclide_type__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysisResult_nuclide_type__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(DetectorAnalysisResult), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysisResult_nuclide_type__get(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +subroutine swigf_DetectorAnalysisResult_id_confidence__set(self, id_confidence_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysisResult), intent(in) :: self +character(len=*), intent(in) :: id_confidence_ +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(id_confidence_, farg2, farg2_temp) +call swigc_DetectorAnalysisResult_id_confidence__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysisResult_id_confidence__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(DetectorAnalysisResult), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysisResult_id_confidence__get(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +subroutine swigf_DetectorAnalysisResult_distance__set(self, distance_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysisResult), intent(in) :: self +real(C_FLOAT), intent(in) :: distance_ +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 + +farg1 = self%swigdata +farg2 = distance_ +call swigc_DetectorAnalysisResult_distance__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysisResult_distance__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(DetectorAnalysisResult), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysisResult_distance__get(farg1) +swig_result = fresult +end function + +subroutine swigf_DetectorAnalysisResult_dose_rate__set(self, dose_rate_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysisResult), intent(in) :: self +real(C_FLOAT), intent(in) :: dose_rate_ +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 + +farg1 = self%swigdata +farg2 = dose_rate_ +call swigc_DetectorAnalysisResult_dose_rate__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysisResult_dose_rate__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(DetectorAnalysisResult), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysisResult_dose_rate__get(farg1) +swig_result = fresult +end function + +subroutine swigf_DetectorAnalysisResult_real_time__set(self, real_time_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysisResult), intent(in) :: self +real(C_FLOAT), intent(in) :: real_time_ +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 + +farg1 = self%swigdata +farg2 = real_time_ +call swigc_DetectorAnalysisResult_real_time__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysisResult_real_time__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(DetectorAnalysisResult), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysisResult_real_time__get(farg1) +swig_result = fresult +end function + +subroutine swigf_DetectorAnalysisResult_detector__set(self, detector_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysisResult), intent(in) :: self +character(len=*), intent(in) :: detector_ +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(detector_, farg2, farg2_temp) +call swigc_DetectorAnalysisResult_detector__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysisResult_detector__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(DetectorAnalysisResult), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysisResult_detector__get(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_new_DetectorAnalysisResult() & +result(self) +use, intrinsic :: ISO_C_BINDING +type(DetectorAnalysisResult) :: self +type(SwigClassWrapper) :: fresult + +fresult = swigc_new_DetectorAnalysisResult() +self%swigdata = fresult +end function + +subroutine swigf_DetectorAnalysisResult_reset(self) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysisResult), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_DetectorAnalysisResult_reset(farg1) +end subroutine + +function swigf_DetectorAnalysisResult_isEmpty(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(DetectorAnalysisResult), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysisResult_isEmpty(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +subroutine swigf_DetectorAnalysisResult_release(self) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysisResult), intent(inout) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +if (btest(farg1%cmemflags, swig_cmem_own_bit)) then +call swigc_delete_DetectorAnalysisResult(farg1) +endif +farg1%cptr = C_NULL_PTR +farg1%cmemflags = 0 +self%swigdata = farg1 +end subroutine + +subroutine swigf_DetectorAnalysisResult_op_assign__(self, other) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysisResult), intent(inout) :: self +type(DetectorAnalysisResult), intent(in) :: other +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = other%swigdata +call swigc_DetectorAnalysisResult_op_assign__(farg1, farg2) +self%swigdata = farg1 +end subroutine + +subroutine swigf_DetectorAnalysis_remarks__set(self, remarks_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysis), intent(in) :: self +class(SWIGTYPE_p_std__vectorT_std__string_t), intent(in) :: remarks_ +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = remarks_%swigdata +call swigc_DetectorAnalysis_remarks__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysis_remarks__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +class(DetectorAnalysis), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysis_remarks__get(farg1) +swig_result%swigdata = fresult +end function + +subroutine swigf_DetectorAnalysis_algorithm_name__set(self, algorithm_name_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysis), intent(in) :: self +character(len=*), intent(in) :: algorithm_name_ +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(algorithm_name_, farg2, farg2_temp) +call swigc_DetectorAnalysis_algorithm_name__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysis_algorithm_name__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(DetectorAnalysis), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysis_algorithm_name__get(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +subroutine swigf_DetectorAnalysis_algorithm_component_versions__set(self, algorithm_component_versions_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysis), intent(in) :: self +class(SWIGTYPE_p_std__vectorT_std__pairT_std__string_std__string_t_t), intent(in) :: algorithm_component_versions_ +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = algorithm_component_versions_%swigdata +call swigc_DetectorAnalysis_algorithm_component_versions__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysis_algorithm_component_versions__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__pairT_std__string_std__string_t_t) :: swig_result +class(DetectorAnalysis), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysis_algorithm_component_versions__get(farg1) +swig_result%swigdata = fresult +end function + +subroutine swigf_DetectorAnalysis_algorithm_creator__set(self, algorithm_creator_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysis), intent(in) :: self +character(len=*), intent(in) :: algorithm_creator_ +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(algorithm_creator_, farg2, farg2_temp) +call swigc_DetectorAnalysis_algorithm_creator__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysis_algorithm_creator__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(DetectorAnalysis), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysis_algorithm_creator__get(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +subroutine swigf_DetectorAnalysis_algorithm_description__set(self, algorithm_description_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysis), intent(in) :: self +character(len=*), intent(in) :: algorithm_description_ +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(algorithm_description_, farg2, farg2_temp) +call swigc_DetectorAnalysis_algorithm_description__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysis_algorithm_description__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(DetectorAnalysis), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysis_algorithm_description__get(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +subroutine swigf_DetectorAnalysis_analysis_start_time__set(self, analysis_start_time_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysis), intent(in) :: self +type(SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN), intent(in) :: analysis_start_time_ +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = analysis_start_time_%swigdata +call swigc_DetectorAnalysis_analysis_start_time__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysis_analysis_start_time__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN) :: swig_result +class(DetectorAnalysis), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysis_analysis_start_time__get(farg1) +swig_result%swigdata = fresult +end function + +subroutine swigf_DetectorAnalysis_analysis_computation_duration__set(self, analysis_computation_duration_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysis), intent(in) :: self +real(C_FLOAT), intent(in) :: analysis_computation_duration_ +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 + +farg1 = self%swigdata +farg2 = analysis_computation_duration_ +call swigc_DetectorAnalysis_analysis_computation_duration__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysis_analysis_computation_duration__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(DetectorAnalysis), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysis_analysis_computation_duration__get(farg1) +swig_result = fresult +end function + +subroutine swigf_DetectorAnalysis_algorithm_result_description__set(self, algorithm_result_description_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysis), intent(in) :: self +character(len=*), intent(in) :: algorithm_result_description_ +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(algorithm_result_description_, farg2, farg2_temp) +call swigc_DetectorAnalysis_algorithm_result_description__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysis_algorithm_result_description__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(DetectorAnalysis), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysis_algorithm_result_description__get(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +subroutine swigf_DetectorAnalysis_results__set(self, results_) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysis), intent(in) :: self +class(SWIGTYPE_p_std__vectorT_SpecUtils__DetectorAnalysisResult_t), intent(in) :: results_ +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = results_%swigdata +call swigc_DetectorAnalysis_results__set(farg1, farg2) +end subroutine + +function swigf_DetectorAnalysis_results__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_SpecUtils__DetectorAnalysisResult_t) :: swig_result +class(DetectorAnalysis), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysis_results__get(farg1) +swig_result%swigdata = fresult +end function + +function swigf_new_DetectorAnalysis() & +result(self) +use, intrinsic :: ISO_C_BINDING +type(DetectorAnalysis) :: self +type(SwigClassWrapper) :: fresult + +fresult = swigc_new_DetectorAnalysis() +self%swigdata = fresult +end function + +subroutine swigf_DetectorAnalysis_reset(self) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysis), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_DetectorAnalysis_reset(farg1) +end subroutine + +function swigf_DetectorAnalysis_is_empty(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(DetectorAnalysis), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DetectorAnalysis_is_empty(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +subroutine swigf_DetectorAnalysis_release(self) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysis), intent(inout) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +if (btest(farg1%cmemflags, swig_cmem_own_bit)) then +call swigc_delete_DetectorAnalysis(farg1) +endif +farg1%cptr = C_NULL_PTR +farg1%cmemflags = 0 +self%swigdata = farg1 +end subroutine + +subroutine swigf_DetectorAnalysis_op_assign__(self, other) +use, intrinsic :: ISO_C_BINDING +class(DetectorAnalysis), intent(inout) :: self +type(DetectorAnalysis), intent(in) :: other +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = other%swigdata +call swigc_DetectorAnalysis_op_assign__(farg1, farg2) +self%swigdata = farg1 +end subroutine + +subroutine swigf_MultimediaData_remark__set(self, remark_) +use, intrinsic :: ISO_C_BINDING +class(MultimediaData), intent(in) :: self +character(len=*), intent(in) :: remark_ +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(remark_, farg2, farg2_temp) +call swigc_MultimediaData_remark__set(farg1, farg2) +end subroutine + +function swigf_MultimediaData_remark__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(MultimediaData), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_MultimediaData_remark__get(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +subroutine swigf_MultimediaData_descriptions__set(self, descriptions_) +use, intrinsic :: ISO_C_BINDING +class(MultimediaData), intent(in) :: self +character(len=*), intent(in) :: descriptions_ +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(descriptions_, farg2, farg2_temp) +call swigc_MultimediaData_descriptions__set(farg1, farg2) +end subroutine + +function swigf_MultimediaData_descriptions__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(MultimediaData), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_MultimediaData_descriptions__get(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +subroutine swigf_MultimediaData_data__set(self, data_) +use, intrinsic :: ISO_C_BINDING +class(MultimediaData), intent(in) :: self +class(SWIGTYPE_p_std__vectorT_char_t), intent(in) :: data_ +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = data_%swigdata +call swigc_MultimediaData_data__set(farg1, farg2) +end subroutine + +function swigf_MultimediaData_data__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_char_t) :: swig_result +class(MultimediaData), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_MultimediaData_data__get(farg1) +swig_result%swigdata = fresult +end function + +subroutine swigf_MultimediaData_data_encoding__set(self, data_encoding_) +use, intrinsic :: ISO_C_BINDING +class(MultimediaData), intent(in) :: self +integer(MultimediaData_EncodingType), intent(in) :: data_encoding_ +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = data_encoding_ +call swigc_MultimediaData_data_encoding__set(farg1, farg2) +end subroutine + +function swigf_MultimediaData_data_encoding__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(MultimediaData_EncodingType) :: swig_result +class(MultimediaData), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_MultimediaData_data_encoding__get(farg1) +swig_result = fresult +end function + +subroutine swigf_MultimediaData_capture_start_time__set(self, capture_start_time_) +use, intrinsic :: ISO_C_BINDING +class(MultimediaData), intent(in) :: self +type(SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN), intent(in) :: capture_start_time_ +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = capture_start_time_%swigdata +call swigc_MultimediaData_capture_start_time__set(farg1, farg2) +end subroutine + +function swigf_MultimediaData_capture_start_time__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__chrono__time_pointT_std__chrono__system_c1Q0CUN) :: swig_result +class(MultimediaData), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_MultimediaData_capture_start_time__get(farg1) +swig_result%swigdata = fresult +end function + +subroutine swigf_MultimediaData_file_uri__set(self, file_uri_) +use, intrinsic :: ISO_C_BINDING +class(MultimediaData), intent(in) :: self +character(len=*), intent(in) :: file_uri_ +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(file_uri_, farg2, farg2_temp) +call swigc_MultimediaData_file_uri__set(farg1, farg2) +end subroutine + +function swigf_MultimediaData_file_uri__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(MultimediaData), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_MultimediaData_file_uri__get(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +subroutine swigf_MultimediaData_mime_type__set(self, mime_type_) +use, intrinsic :: ISO_C_BINDING +class(MultimediaData), intent(in) :: self +character(len=*), intent(in) :: mime_type_ +type(SwigClassWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +farg1 = self%swigdata +call SWIGTM_fin_char_Sm_(mime_type_, farg2, farg2_temp) +call swigc_MultimediaData_mime_type__set(farg1, farg2) +end subroutine + +function swigf_MultimediaData_mime_type__get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +class(MultimediaData), intent(in) :: self +type(SwigArrayWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_MultimediaData_mime_type__get(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function swigf_new_MultimediaData() & +result(self) +use, intrinsic :: ISO_C_BINDING +type(MultimediaData) :: self +type(SwigClassWrapper) :: fresult + +fresult = swigc_new_MultimediaData() +self%swigdata = fresult +end function + +subroutine swigf_MultimediaData_release(self) +use, intrinsic :: ISO_C_BINDING +class(MultimediaData), intent(inout) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +if (btest(farg1%cmemflags, swig_cmem_own_bit)) then +call swigc_delete_MultimediaData(farg1) +endif +farg1%cptr = C_NULL_PTR +farg1%cmemflags = 0 +self%swigdata = farg1 +end subroutine + +subroutine swigf_MultimediaData_op_assign__(self, other) +use, intrinsic :: ISO_C_BINDING +class(MultimediaData), intent(inout) :: self +type(MultimediaData), intent(in) :: other +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = other%swigdata +call swigc_MultimediaData_op_assign__(farg1, farg2) +self%swigdata = farg1 +end subroutine + +function pcf_det_name_to_dev_pair_index(name, col, panel, mca) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +character(len=*), intent(in) :: name +integer(C_INT), target, intent(inout) :: col +integer(C_INT), target, intent(inout) :: panel +integer(C_INT), target, intent(inout) :: mca +integer(C_INT) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 +type(C_PTR) :: farg2 +type(C_PTR) :: farg3 +type(C_PTR) :: farg4 + +call SWIGTM_fin_char_Sm_(name, farg1, farg1_temp) +farg2 = c_loc(col) +farg3 = c_loc(panel) +farg4 = c_loc(mca) +fresult = swigc_pcf_det_name_to_dev_pair_index(farg1, farg2, farg3, farg4) +swig_result = fresult +end function + +function swigf_new_DevPair__SWIG_0() & +result(self) +use, intrinsic :: ISO_C_BINDING +type(DevPair) :: self +type(SwigClassWrapper) :: fresult + +fresult = swigc_new_DevPair__SWIG_0() +self%swigdata = fresult +end function + +function swigf_new_DevPair__SWIG_1(first, second) & +result(self) +use, intrinsic :: ISO_C_BINDING +type(DevPair) :: self +real(C_FLOAT), intent(in) :: first +real(C_FLOAT), intent(in) :: second +type(SwigClassWrapper) :: fresult +real(C_FLOAT) :: farg1 +real(C_FLOAT) :: farg2 + +farg1 = first +farg2 = second +fresult = swigc_new_DevPair__SWIG_1(farg1, farg2) +self%swigdata = fresult +end function + +function swigf_new_DevPair__SWIG_2(p) & +result(self) +use, intrinsic :: ISO_C_BINDING +type(DevPair) :: self +class(DevPair), intent(in) :: p +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = p%swigdata +fresult = swigc_new_DevPair__SWIG_2(farg1) +self%swigdata = fresult +end function + +subroutine swigf_DevPair_first_set(self, first) +use, intrinsic :: ISO_C_BINDING +class(DevPair), intent(in) :: self +real(C_FLOAT), intent(in) :: first +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 + +farg1 = self%swigdata +farg2 = first +call swigc_DevPair_first_set(farg1, farg2) +end subroutine + +function swigf_DevPair_first_get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(DevPair), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DevPair_first_get(farg1) +swig_result = fresult +end function + +subroutine swigf_DevPair_second_set(self, second) +use, intrinsic :: ISO_C_BINDING +class(DevPair), intent(in) :: self +real(C_FLOAT), intent(in) :: second +type(SwigClassWrapper) :: farg1 +real(C_FLOAT) :: farg2 + +farg1 = self%swigdata +farg2 = second +call swigc_DevPair_second_set(farg1, farg2) +end subroutine + +function swigf_DevPair_second_get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(DevPair), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DevPair_second_get(farg1) +swig_result = fresult +end function + +subroutine swigf_DevPair_release(self) +use, intrinsic :: ISO_C_BINDING +class(DevPair), intent(inout) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +if (btest(farg1%cmemflags, swig_cmem_own_bit)) then +call swigc_delete_DevPair(farg1) +endif +farg1%cptr = C_NULL_PTR +farg1%cmemflags = 0 +self%swigdata = farg1 +end subroutine + +subroutine swigf_DevPair_op_assign__(self, other) +use, intrinsic :: ISO_C_BINDING +class(DevPair), intent(inout) :: self +type(DevPair), intent(in) :: other +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = other%swigdata +call swigc_DevPair_op_assign__(farg1, farg2) +self%swigdata = farg1 +end subroutine + +function swigf_new_DeviationPairs__SWIG_0() & +result(self) +use, intrinsic :: ISO_C_BINDING +type(DeviationPairs) :: self +type(SwigClassWrapper) :: fresult + +fresult = swigc_new_DeviationPairs__SWIG_0() +self%swigdata = fresult +end function + +function swigf_new_DeviationPairs__SWIG_1(other) & +result(self) +use, intrinsic :: ISO_C_BINDING +type(DeviationPairs) :: self +class(DeviationPairs), intent(in) :: other +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = other%swigdata +fresult = swigc_new_DeviationPairs__SWIG_1(farg1) +self%swigdata = fresult +end function + +function swigf_new_DeviationPairs__SWIG_2(count) & +result(self) +use, intrinsic :: ISO_C_BINDING +type(DeviationPairs) :: self +integer, intent(in) :: count +type(SwigClassWrapper) :: fresult +integer(C_INT) :: farg1 + +farg1 = int(count, C_INT) +fresult = swigc_new_DeviationPairs__SWIG_2(farg1) +self%swigdata = fresult +end function + +function swigf_new_DeviationPairs__SWIG_3(count, v) & +result(self) +use, intrinsic :: ISO_C_BINDING +type(DeviationPairs) :: self +integer, intent(in) :: count +class(DevPair), intent(in) :: v +type(SwigClassWrapper) :: fresult +integer(C_INT) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = int(count, C_INT) +farg2 = v%swigdata +fresult = swigc_new_DeviationPairs__SWIG_3(farg1, farg2) +self%swigdata = fresult +end function + +function swigf_DeviationPairs_size(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer :: swig_result +class(DeviationPairs), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DeviationPairs_size(farg1) +swig_result = int(fresult) +end function + +function swigf_DeviationPairs_capacity(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer :: swig_result +class(DeviationPairs), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DeviationPairs_capacity(farg1) +swig_result = int(fresult) +end function + +function swigf_DeviationPairs_empty(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(DeviationPairs), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DeviationPairs_empty(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_DeviationPairs_front(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(DevPair) :: swig_result +class(DeviationPairs), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DeviationPairs_front(farg1) +swig_result%swigdata = fresult +end function + +function swigf_DeviationPairs_back(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(DevPair) :: swig_result +class(DeviationPairs), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DeviationPairs_back(farg1) +swig_result%swigdata = fresult +end function + +subroutine swigf_DeviationPairs_reserve(self, count) +use, intrinsic :: ISO_C_BINDING +class(DeviationPairs), intent(in) :: self +integer, intent(in) :: count +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = int(count, C_INT) +call swigc_DeviationPairs_reserve(farg1, farg2) +end subroutine + +subroutine swigf_DeviationPairs_resize__SWIG_0(self, count) +use, intrinsic :: ISO_C_BINDING +class(DeviationPairs), intent(in) :: self +integer, intent(in) :: count +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = int(count, C_INT) +call swigc_DeviationPairs_resize__SWIG_0(farg1, farg2) +end subroutine + +subroutine swigf_DeviationPairs_resize__SWIG_1(self, count, v) +use, intrinsic :: ISO_C_BINDING +class(DeviationPairs), intent(in) :: self +integer, intent(in) :: count +class(DevPair), intent(in) :: v +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = self%swigdata +farg2 = int(count, C_INT) +farg3 = v%swigdata +call swigc_DeviationPairs_resize__SWIG_1(farg1, farg2, farg3) +end subroutine + +subroutine swigf_DeviationPairs_push_back(self, v) +use, intrinsic :: ISO_C_BINDING +class(DeviationPairs), intent(in) :: self +class(DevPair), intent(in) :: v +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = v%swigdata +call swigc_DeviationPairs_push_back(farg1, farg2) +end subroutine + +subroutine swigf_DeviationPairs_pop_back(self) +use, intrinsic :: ISO_C_BINDING +class(DeviationPairs), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_DeviationPairs_pop_back(farg1) +end subroutine + +subroutine swigf_DeviationPairs_clear(self) +use, intrinsic :: ISO_C_BINDING +class(DeviationPairs), intent(in) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +call swigc_DeviationPairs_clear(farg1) +end subroutine + +subroutine swigf_DeviationPairs_set(self, index, v) +use, intrinsic :: ISO_C_BINDING +class(DeviationPairs), intent(in) :: self +integer, intent(in) :: index +class(DevPair), intent(in) :: v +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = self%swigdata +farg2 = int(index, C_INT) +farg3 = v%swigdata +call swigc_DeviationPairs_set(farg1, farg2, farg3) +end subroutine + +function swigf_DeviationPairs_get(self, index) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(DevPair) :: swig_result +class(DeviationPairs), intent(in) :: self +integer, intent(in) :: index +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = int(index, C_INT) +fresult = swigc_DeviationPairs_get(farg1, farg2) +swig_result%swigdata = fresult +end function + +subroutine swigf_DeviationPairs_insert(self, index, v) +use, intrinsic :: ISO_C_BINDING +class(DeviationPairs), intent(in) :: self +integer, intent(in) :: index +class(DevPair), intent(in) :: v +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = self%swigdata +farg2 = int(index, C_INT) +farg3 = v%swigdata +call swigc_DeviationPairs_insert(farg1, farg2, farg3) +end subroutine + +subroutine swigf_DeviationPairs_erase__SWIG_0(self, index) +use, intrinsic :: ISO_C_BINDING +class(DeviationPairs), intent(in) :: self +integer, intent(in) :: index +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = int(index, C_INT) +call swigc_DeviationPairs_erase__SWIG_0(farg1, farg2) +end subroutine + +subroutine swigf_DeviationPairs_erase__SWIG_1(self, start_index, stop_index) +use, intrinsic :: ISO_C_BINDING +class(DeviationPairs), intent(in) :: self +integer, intent(in) :: start_index +integer, intent(in) :: stop_index +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +integer(C_INT) :: farg3 + +farg1 = self%swigdata +farg2 = int(start_index, C_INT) +farg3 = int(stop_index, C_INT) +call swigc_DeviationPairs_erase__SWIG_1(farg1, farg2, farg3) +end subroutine + +function swigf_DeviationPairs_front_ref(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(DevPair) :: swig_result +class(DeviationPairs), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DeviationPairs_front_ref(farg1) +swig_result%swigdata = fresult +end function + +function swigf_DeviationPairs_back_ref(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(DevPair) :: swig_result +class(DeviationPairs), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_DeviationPairs_back_ref(farg1) +swig_result%swigdata = fresult +end function + +function swigf_DeviationPairs_get_ref(self, index) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(DevPair) :: swig_result +class(DeviationPairs), intent(in) :: self +integer, intent(in) :: index +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = int(index, C_INT) +fresult = swigc_DeviationPairs_get_ref(farg1, farg2) +swig_result%swigdata = fresult +end function + +subroutine swigf_DeviationPairs_release(self) +use, intrinsic :: ISO_C_BINDING +class(DeviationPairs), intent(inout) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +if (btest(farg1%cmemflags, swig_cmem_own_bit)) then +call swigc_delete_DeviationPairs(farg1) +endif +farg1%cptr = C_NULL_PTR +farg1%cmemflags = 0 +self%swigdata = farg1 +end subroutine + +subroutine swigf_DeviationPairs_op_assign__(self, other) +use, intrinsic :: ISO_C_BINDING +class(DeviationPairs), intent(inout) :: self +type(DeviationPairs), intent(in) :: other +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = other%swigdata +call swigc_DeviationPairs_op_assign__(farg1, farg2) +self%swigdata = farg1 +end subroutine + +function swigf_EnergyCalibration_type(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(EnergyCalType) :: swig_result +class(EnergyCalibration), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_EnergyCalibration_type(farg1) +swig_result = fresult +end function + +function swigf_EnergyCalibration_valid(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(EnergyCalibration), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_EnergyCalibration_valid(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_EnergyCalibration_coefficients(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(FloatVector) :: swig_result +class(EnergyCalibration), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_EnergyCalibration_coefficients(farg1) +swig_result%swigdata = fresult +end function + +function swigf_EnergyCalibration_deviation_pairs(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(DeviationPairs) :: swig_result +class(EnergyCalibration), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_EnergyCalibration_deviation_pairs(farg1) +swig_result%swigdata = fresult +end function + +function swigf_EnergyCalibration_channel_energies(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__shared_ptrT_std__vectorT_float_t_const_t) :: swig_result +class(EnergyCalibration), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_EnergyCalibration_channel_energies(farg1) +swig_result%swigdata = fresult +end function + +function swigf_EnergyCalibration_num_channels(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(EnergyCalibration), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_EnergyCalibration_num_channels(farg1) +swig_result = fresult +end function + +function swigf_new_EnergyCalibration() & +result(self) +use, intrinsic :: ISO_C_BINDING +type(EnergyCalibration) :: self +type(SwigClassWrapper) :: fresult + +fresult = swigc_new_EnergyCalibration() +self%swigdata = fresult +end function + +subroutine swigf_EnergyCalibration_set_polynomial(self, num_channels, coeffs, dev_pairs) +use, intrinsic :: ISO_C_BINDING +class(EnergyCalibration), intent(in) :: self +integer(C_INT), intent(in) :: num_channels +class(FloatVector), intent(in) :: coeffs +class(DeviationPairs), intent(in) :: dev_pairs +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 + +farg1 = self%swigdata +farg2 = num_channels +farg3 = coeffs%swigdata +farg4 = dev_pairs%swigdata +call swigc_EnergyCalibration_set_polynomial(farg1, farg2, farg3, farg4) +end subroutine + +subroutine swigf_EnergyCalibration_set_default_polynomial(self, num_channels, coeffs, dev_pairs) +use, intrinsic :: ISO_C_BINDING +class(EnergyCalibration), intent(in) :: self +integer(C_INT), intent(in) :: num_channels +class(FloatVector), intent(in) :: coeffs +class(DeviationPairs), intent(in) :: dev_pairs +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 + +farg1 = self%swigdata +farg2 = num_channels +farg3 = coeffs%swigdata +farg4 = dev_pairs%swigdata +call swigc_EnergyCalibration_set_default_polynomial(farg1, farg2, farg3, farg4) +end subroutine + +subroutine swigf_EnergyCalibration_set_full_range_fraction(self, num_channels, coeffs, dev_pairs) +use, intrinsic :: ISO_C_BINDING +class(EnergyCalibration), intent(in) :: self +integer(C_INT), intent(in) :: num_channels +class(FloatVector), intent(in) :: coeffs +class(DeviationPairs), intent(in) :: dev_pairs +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 + +farg1 = self%swigdata +farg2 = num_channels +farg3 = coeffs%swigdata +farg4 = dev_pairs%swigdata +call swigc_EnergyCalibration_set_full_range_fraction(farg1, farg2, farg3, farg4) +end subroutine + +function swigf_EnergyCalibration_op_lt__(self, rhs) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(EnergyCalibration), intent(in) :: self +class(EnergyCalibration), intent(in) :: rhs +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = rhs%swigdata +fresult = swigc_EnergyCalibration_op_lt__(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_EnergyCalibration_op_eq__(self, rhs) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(EnergyCalibration), intent(in) :: self +class(EnergyCalibration), intent(in) :: rhs +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = rhs%swigdata +fresult = swigc_EnergyCalibration_op_eq__(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_EnergyCalibration_op_ne__(self, rhs) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(EnergyCalibration), intent(in) :: self +class(EnergyCalibration), intent(in) :: rhs +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = rhs%swigdata +fresult = swigc_EnergyCalibration_op_ne__(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function swigf_EnergyCalibration_memmorysize(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +class(EnergyCalibration), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_EnergyCalibration_memmorysize(farg1) +swig_result = fresult +end function + +function swigf_EnergyCalibration_channel_for_energy(self, energy) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +class(EnergyCalibration), intent(in) :: self +real(C_DOUBLE), intent(in) :: energy +real(C_DOUBLE) :: fresult +type(SwigClassWrapper) :: farg1 +real(C_DOUBLE) :: farg2 + +farg1 = self%swigdata +farg2 = energy +fresult = swigc_EnergyCalibration_channel_for_energy(farg1, farg2) +swig_result = fresult +end function + +function swigf_EnergyCalibration_energy_for_channel(self, channel) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +class(EnergyCalibration), intent(in) :: self +real(C_DOUBLE), intent(in) :: channel +real(C_DOUBLE) :: fresult +type(SwigClassWrapper) :: farg1 +real(C_DOUBLE) :: farg2 + +farg1 = self%swigdata +farg2 = channel +fresult = swigc_EnergyCalibration_energy_for_channel(farg1, farg2) +swig_result = fresult +end function + +function swigf_EnergyCalibration_lower_energy(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(EnergyCalibration), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_EnergyCalibration_lower_energy(farg1) +swig_result = fresult +end function + +function swigf_EnergyCalibration_upper_energy(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +class(EnergyCalibration), intent(in) :: self +real(C_FLOAT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_EnergyCalibration_upper_energy(farg1) +swig_result = fresult +end function + +function swigf_EnergyCalibration_sm_min_channels_get() & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +integer(C_INT) :: fresult + +fresult = swigc_EnergyCalibration_sm_min_channels_get() +swig_result = fresult +end function + +function swigf_EnergyCalibration_sm_max_channels_get() & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +integer(C_INT) :: fresult + +fresult = swigc_EnergyCalibration_sm_max_channels_get() +swig_result = fresult +end function + +function swigf_EnergyCalibration_sm_polynomial_offset_limit_get() & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_FLOAT) :: swig_result +real(C_FLOAT) :: fresult + +fresult = swigc_EnergyCalibration_sm_polynomial_offset_limit_get() +swig_result = fresult +end function + +subroutine swigf_EnergyCalibration_check_lower_energies(self, nchannels, energies) +use, intrinsic :: ISO_C_BINDING +class(EnergyCalibration), intent(in) :: self +integer(C_INT), intent(in) :: nchannels +class(FloatVector), intent(in) :: energies +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = self%swigdata +farg2 = nchannels +farg3 = energies%swigdata +call swigc_EnergyCalibration_check_lower_energies(farg1, farg2, farg3) +end subroutine + +function swigf_EnergyCalibration_mutable_deviation_pairs(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(DeviationPairs) :: swig_result +class(EnergyCalibration), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_EnergyCalibration_mutable_deviation_pairs(farg1) +swig_result%swigdata = fresult +end function + +subroutine swigf_EnergyCalibration_m_type_set(self, m_type) +use, intrinsic :: ISO_C_BINDING +class(EnergyCalibration), intent(in) :: self +integer(EnergyCalType), intent(in) :: m_type +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = self%swigdata +farg2 = m_type +call swigc_EnergyCalibration_m_type_set(farg1, farg2) +end subroutine + +function swigf_EnergyCalibration_m_type_get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(EnergyCalType) :: swig_result +class(EnergyCalibration), intent(in) :: self +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_EnergyCalibration_m_type_get(farg1) +swig_result = fresult +end function + +subroutine swigf_EnergyCalibration_m_coefficients_set(self, m_coefficients) +use, intrinsic :: ISO_C_BINDING +class(EnergyCalibration), intent(in) :: self +class(FloatVector), intent(in) :: m_coefficients +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = m_coefficients%swigdata +call swigc_EnergyCalibration_m_coefficients_set(farg1, farg2) +end subroutine + +function swigf_EnergyCalibration_m_coefficients_get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(FloatVector) :: swig_result +class(EnergyCalibration), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_EnergyCalibration_m_coefficients_get(farg1) +swig_result%swigdata = fresult +end function + +subroutine swigf_EnergyCalibration_m_deviation_pairs_set(self, m_deviation_pairs) +use, intrinsic :: ISO_C_BINDING +class(EnergyCalibration), intent(in) :: self +class(DeviationPairs), intent(in) :: m_deviation_pairs +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = m_deviation_pairs%swigdata +call swigc_EnergyCalibration_m_deviation_pairs_set(farg1, farg2) +end subroutine + +function swigf_EnergyCalibration_m_deviation_pairs_get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(DeviationPairs) :: swig_result +class(EnergyCalibration), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_EnergyCalibration_m_deviation_pairs_get(farg1) +swig_result%swigdata = fresult +end function + +subroutine swigf_EnergyCalibration_m_channel_energies_set(self, m_channel_energies) +use, intrinsic :: ISO_C_BINDING +class(EnergyCalibration), intent(in) :: self +class(SWIGTYPE_p_std__shared_ptrT_std__vectorT_float_t_const_t), intent(in) :: m_channel_energies +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = m_channel_energies%swigdata +call swigc_EnergyCalibration_m_channel_energies_set(farg1, farg2) +end subroutine + +function swigf_EnergyCalibration_m_channel_energies_get(self) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__shared_ptrT_std__vectorT_float_t_const_t) :: swig_result +class(EnergyCalibration), intent(in) :: self +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +fresult = swigc_EnergyCalibration_m_channel_energies_get(farg1) +swig_result%swigdata = fresult +end function + +subroutine swigf_EnergyCalibration_release(self) +use, intrinsic :: ISO_C_BINDING +class(EnergyCalibration), intent(inout) :: self +type(SwigClassWrapper) :: farg1 + +farg1 = self%swigdata +if (btest(farg1%cmemflags, swig_cmem_own_bit)) then +call swigc_delete_EnergyCalibration(farg1) +endif +farg1%cptr = C_NULL_PTR +farg1%cmemflags = 0 +self%swigdata = farg1 +end subroutine + +subroutine swigf_EnergyCalibration_op_assign__(self, other) +use, intrinsic :: ISO_C_BINDING +class(EnergyCalibration), intent(inout) :: self +type(EnergyCalibration), intent(in) :: other +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = self%swigdata +farg2 = other%swigdata +call swigc_EnergyCalibration_op_assign__(farg1, farg2) +self%swigdata = farg1 +end subroutine + +function energy_cal_combine_channels(orig_cal, num_channel_combine) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(EnergyCalibration) :: swig_result +class(EnergyCalibration), intent(in) :: orig_cal +integer(C_INT), intent(in) :: num_channel_combine +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = orig_cal%swigdata +farg2 = num_channel_combine +fresult = swigc_energy_cal_combine_channels(farg1, farg2) +swig_result%swigdata = fresult +end function + +function polynomial_binning(coeffs, nchannel, deviation_pairs) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__shared_ptrT_std__vectorT_float_t_const_t) :: swig_result +class(FloatVector), intent(in) :: coeffs +integer(C_INT), intent(in) :: nchannel +class(DeviationPairs), intent(in) :: deviation_pairs +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = coeffs%swigdata +farg2 = nchannel +farg3 = deviation_pairs%swigdata +fresult = swigc_polynomial_binning(farg1, farg2, farg3) +swig_result%swigdata = fresult +end function + +function swigf_fullrangefraction_binning__SWIG_0(coeffs, nchannel, dev_pairs, include_upper_energy) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__shared_ptrT_std__vectorT_float_t_const_t) :: swig_result +class(FloatVector), intent(in) :: coeffs +integer(C_INT), intent(in) :: nchannel +class(DeviationPairs), intent(in) :: dev_pairs +logical, intent(in) :: include_upper_energy +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +type(SwigClassWrapper) :: farg3 +integer(C_INT) :: farg4 + +farg1 = coeffs%swigdata +farg2 = nchannel +farg3 = dev_pairs%swigdata +call SWIGTM_fin_bool(include_upper_energy, farg4) +fresult = swigc_fullrangefraction_binning__SWIG_0(farg1, farg2, farg3, farg4) +swig_result%swigdata = fresult +end function + +function swigf_fullrangefraction_binning__SWIG_1(coeffs, nchannel, dev_pairs) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__shared_ptrT_std__vectorT_float_t_const_t) :: swig_result +class(FloatVector), intent(in) :: coeffs +integer(C_INT), intent(in) :: nchannel +class(DeviationPairs), intent(in) :: dev_pairs +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = coeffs%swigdata +farg2 = nchannel +farg3 = dev_pairs%swigdata +fresult = swigc_fullrangefraction_binning__SWIG_1(farg1, farg2, farg3) +swig_result%swigdata = fresult +end function + +function fullrangefraction_energy(channel_number, coeffs, nchannel, deviation_pairs) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +real(C_DOUBLE), intent(in) :: channel_number +class(FloatVector), intent(in) :: coeffs +integer(C_INT), intent(in) :: nchannel +class(DeviationPairs), intent(in) :: deviation_pairs +real(C_DOUBLE) :: fresult +real(C_DOUBLE) :: farg1 +type(SwigClassWrapper) :: farg2 +integer(C_INT) :: farg3 +type(SwigClassWrapper) :: farg4 + +farg1 = channel_number +farg2 = coeffs%swigdata +farg3 = nchannel +farg4 = deviation_pairs%swigdata +fresult = swigc_fullrangefraction_energy(farg1, farg2, farg3, farg4) +swig_result = fresult +end function + +function polynomial_energy(channel_number, coeffs, deviation_pairs) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +real(C_DOUBLE), intent(in) :: channel_number +class(FloatVector), intent(in) :: coeffs +class(DeviationPairs), intent(in) :: deviation_pairs +real(C_DOUBLE) :: fresult +real(C_DOUBLE) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 + +farg1 = channel_number +farg2 = coeffs%swigdata +farg3 = deviation_pairs%swigdata +fresult = swigc_polynomial_energy(farg1, farg2, farg3) +swig_result = fresult +end function + +function deviation_pair_correction(polynomial_energy0, dev_pairs) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +real(C_DOUBLE), intent(in) :: polynomial_energy0 +class(DeviationPairs), intent(in) :: dev_pairs +real(C_DOUBLE) :: fresult +real(C_DOUBLE) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = polynomial_energy0 +farg2 = dev_pairs%swigdata +fresult = swigc_deviation_pair_correction(farg1, farg2) +swig_result = fresult +end function + +function correction_due_to_dev_pairs(true_energy, dev_pairs) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +real(C_DOUBLE), intent(in) :: true_energy +class(DeviationPairs), intent(in) :: dev_pairs +real(C_DOUBLE) :: fresult +real(C_DOUBLE) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = true_energy +farg2 = dev_pairs%swigdata +fresult = swigc_correction_due_to_dev_pairs(farg1, farg2) +swig_result = fresult +end function + +function apply_deviation_pair(binning, dev_pairs) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__shared_ptrT_std__vectorT_float_t_const_t) :: swig_result +class(FloatVector), intent(in) :: binning +class(DeviationPairs), intent(in) :: dev_pairs +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = binning%swigdata +farg2 = dev_pairs%swigdata +fresult = swigc_apply_deviation_pair(farg1, farg2) +swig_result%swigdata = fresult +end function + +function polynomial_coef_to_fullrangefraction(coeffs, nchannel) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(FloatVector) :: swig_result +class(FloatVector), intent(in) :: coeffs +integer(C_INT), intent(in) :: nchannel +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = coeffs%swigdata +farg2 = nchannel +fresult = swigc_polynomial_coef_to_fullrangefraction(farg1, farg2) +swig_result%swigdata = fresult +end function + +function fullrangefraction_coef_to_polynomial(coeffs, nchannel) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(FloatVector) :: swig_result +class(FloatVector), intent(in) :: coeffs +integer(C_INT), intent(in) :: nchannel +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = coeffs%swigdata +farg2 = nchannel +fresult = swigc_fullrangefraction_coef_to_polynomial(farg1, farg2) +swig_result%swigdata = fresult +end function + +function mid_channel_polynomial_to_fullrangeFraction(coeffs, nchannel) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(FloatVector) :: swig_result +class(FloatVector), intent(in) :: coeffs +integer(C_INT), intent(in) :: nchannel +type(SwigClassWrapper) :: fresult +type(SwigClassWrapper) :: farg1 +integer(C_INT) :: farg2 + +farg1 = coeffs%swigdata +farg2 = nchannel +fresult = swigc_mid_channel_polynomial_to_fullrangeFraction(farg1, farg2) +swig_result%swigdata = fresult +end function + +function calibration_is_valid(type, eqn, devpairs, nbin) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +integer(EnergyCalType), intent(in) :: type +class(FloatVector), intent(in) :: eqn +class(DeviationPairs), intent(in) :: devpairs +integer(C_INT), intent(in) :: nbin +integer(C_INT) :: fresult +integer(C_INT) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 +integer(C_INT) :: farg4 + +farg1 = type +farg2 = eqn%swigdata +farg3 = devpairs%swigdata +farg4 = nbin +fresult = swigc_calibration_is_valid(farg1, farg2, farg3, farg4) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function polynomial_cal_remove_first_channels(num_channels_remove, orig_coefs) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(FloatVector) :: swig_result +integer(C_INT), intent(in) :: num_channels_remove +class(FloatVector), intent(in) :: orig_coefs +type(SwigClassWrapper) :: fresult +integer(C_INT) :: farg1 +type(SwigClassWrapper) :: farg2 + +farg1 = num_channels_remove +farg2 = orig_coefs%swigdata +fresult = swigc_polynomial_cal_remove_first_channels(farg1, farg2) +swig_result%swigdata = fresult +end function + +function swigf_find_fullrangefraction_channel__SWIG_0(energy, coeffs, nchannel, deviation_pairs, accuracy) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +real(C_DOUBLE), intent(in) :: energy +class(FloatVector), intent(in) :: coeffs +integer(C_INT), intent(in) :: nchannel +class(DeviationPairs), intent(in) :: deviation_pairs +real(C_DOUBLE), intent(in) :: accuracy +real(C_DOUBLE) :: fresult +real(C_DOUBLE) :: farg1 +type(SwigClassWrapper) :: farg2 +integer(C_INT) :: farg3 +type(SwigClassWrapper) :: farg4 +real(C_DOUBLE) :: farg5 + +farg1 = energy +farg2 = coeffs%swigdata +farg3 = nchannel +farg4 = deviation_pairs%swigdata +farg5 = accuracy +fresult = swigc_find_fullrangefraction_channel__SWIG_0(farg1, farg2, farg3, farg4, farg5) +swig_result = fresult +end function + +function swigf_find_fullrangefraction_channel__SWIG_1(energy, coeffs, nchannel, deviation_pairs) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +real(C_DOUBLE), intent(in) :: energy +class(FloatVector), intent(in) :: coeffs +integer(C_INT), intent(in) :: nchannel +class(DeviationPairs), intent(in) :: deviation_pairs +real(C_DOUBLE) :: fresult +real(C_DOUBLE) :: farg1 +type(SwigClassWrapper) :: farg2 +integer(C_INT) :: farg3 +type(SwigClassWrapper) :: farg4 + +farg1 = energy +farg2 = coeffs%swigdata +farg3 = nchannel +farg4 = deviation_pairs%swigdata +fresult = swigc_find_fullrangefraction_channel__SWIG_1(farg1, farg2, farg3, farg4) +swig_result = fresult +end function + +function swigf_find_polynomial_channel__SWIG_0(energy, coeffs, nchannel, deviation_pairs, accuracy) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +real(C_DOUBLE), intent(in) :: energy +class(FloatVector), intent(in) :: coeffs +integer(C_INT), intent(in) :: nchannel +class(DeviationPairs), intent(in) :: deviation_pairs +real(C_DOUBLE), intent(in) :: accuracy +real(C_DOUBLE) :: fresult +real(C_DOUBLE) :: farg1 +type(SwigClassWrapper) :: farg2 +integer(C_INT) :: farg3 +type(SwigClassWrapper) :: farg4 +real(C_DOUBLE) :: farg5 + +farg1 = energy +farg2 = coeffs%swigdata +farg3 = nchannel +farg4 = deviation_pairs%swigdata +farg5 = accuracy +fresult = swigc_find_polynomial_channel__SWIG_0(farg1, farg2, farg3, farg4, farg5) +swig_result = fresult +end function + +function swigf_find_polynomial_channel__SWIG_1(energy, coeffs, nchannel, deviation_pairs) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +real(C_DOUBLE) :: swig_result +real(C_DOUBLE), intent(in) :: energy +class(FloatVector), intent(in) :: coeffs +integer(C_INT), intent(in) :: nchannel +class(DeviationPairs), intent(in) :: deviation_pairs +real(C_DOUBLE) :: fresult +real(C_DOUBLE) :: farg1 +type(SwigClassWrapper) :: farg2 +integer(C_INT) :: farg3 +type(SwigClassWrapper) :: farg4 + +farg1 = energy +farg2 = coeffs%swigdata +farg3 = nchannel +farg4 = deviation_pairs%swigdata +fresult = swigc_find_polynomial_channel__SWIG_1(farg1, farg2, farg3, farg4) +swig_result = fresult +end function + +subroutine rebin_by_lower_edge(original_energies, original_counts, new_energies, resulting_counts) +use, intrinsic :: ISO_C_BINDING +class(FloatVector), intent(in) :: original_energies +class(FloatVector), intent(in) :: original_counts +class(FloatVector), intent(in) :: new_energies +class(FloatVector), intent(in) :: resulting_counts +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +type(SwigClassWrapper) :: farg3 +type(SwigClassWrapper) :: farg4 + +farg1 = original_energies%swigdata +farg2 = original_counts%swigdata +farg3 = new_energies%swigdata +farg4 = resulting_counts%swigdata +call swigc_rebin_by_lower_edge(farg1, farg2, farg3, farg4) +end subroutine + +function write_CALp_file(output, cal, detector_name) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +class(SWIGTYPE_p_std__ostream), intent(in) :: output +class(EnergyCalibration), intent(in) :: cal +character(len=*), intent(in) :: detector_name +integer(C_INT) :: fresult +type(SwigClassWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg3_temp +type(SwigArrayWrapper) :: farg3 + +farg1 = output%swigdata +farg2 = cal%swigdata +call SWIGTM_fin_char_Sm_(detector_name, farg3, farg3_temp) +fresult = swigc_write_CALp_file(farg1, farg2, farg3) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function remove_file(name) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +character(len=*), intent(in) :: name +integer(C_INT) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(name, farg1, farg1_temp) +fresult = swigc_remove_file(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function is_file(name) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +character(len=*), intent(in) :: name +integer(C_INT) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(name, farg1, farg1_temp) +fresult = swigc_is_file(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function rename_file(source, destination) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +character(len=*), intent(in) :: source +character(len=*), intent(in) :: destination +integer(C_INT) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +call SWIGTM_fin_char_Sm_(source, farg1, farg1_temp) +call SWIGTM_fin_char_Sm_(destination, farg2, farg2_temp) +fresult = swigc_rename_file(farg1, farg2) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function is_directory(name) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +character(len=*), intent(in) :: name +integer(C_INT) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(name, farg1, farg1_temp) +fresult = swigc_is_directory(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function create_directory(name) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +character(len=*), intent(in) :: name +integer(C_INT) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(name, farg1, farg1_temp) +fresult = swigc_create_directory(farg1) +swig_result = fresult +end function + +function can_rw_in_directory(name) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +character(len=*), intent(in) :: name +integer(C_INT) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(name, farg1, farg1_temp) +fresult = swigc_can_rw_in_directory(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function append_path(base, name) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +character(len=*), intent(in) :: base +character(len=*), intent(in) :: name +type(SwigArrayWrapper) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +call SWIGTM_fin_char_Sm_(base, farg1, farg1_temp) +call SWIGTM_fin_char_Sm_(name, farg2, farg2_temp) +fresult = swigc_append_path(farg1, farg2) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function filename(path_and_name) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +character(len=*), intent(in) :: path_and_name +type(SwigArrayWrapper) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(path_and_name, farg1, farg1_temp) +fresult = swigc_filename(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function parent_path(path) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +character(len=*), intent(in) :: path +type(SwigArrayWrapper) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(path, farg1, farg1_temp) +fresult = swigc_parent_path(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function file_extension(path) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +character(len=*), intent(in) :: path +type(SwigArrayWrapper) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(path, farg1, farg1_temp) +fresult = swigc_file_extension(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function file_size(path) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +character(len=*), intent(in) :: path +integer(C_INT) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(path, farg1, farg1_temp) +fresult = swigc_file_size(farg1) +swig_result = fresult +end function + +function temp_dir() & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +type(SwigArrayWrapper) :: fresult + +fresult = swigc_temp_dir() +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function is_absolute_path(path) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +character(len=*), intent(in) :: path +integer(C_INT) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(path, farg1, farg1_temp) +fresult = swigc_is_absolute_path(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + +function get_working_path() & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +type(SwigArrayWrapper) :: fresult + +fresult = swigc_get_working_path() +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function temp_file_name(filebasename, directory) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +character(len=*), intent(in) :: filebasename +character(len=*), intent(in) :: directory +type(SwigArrayWrapper) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +call SWIGTM_fin_char_Sm_(filebasename, farg1, farg1_temp) +call SWIGTM_fin_char_Sm_(directory, farg2, farg2_temp) +fresult = swigc_temp_file_name(farg1, farg2) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function get_sm_recursive_ls_max_depth() & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +integer(C_INT) :: fresult + +fresult = swigc_sm_recursive_ls_max_depth_get() +swig_result = fresult +end function + +function get_sm_ls_max_results() & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +integer(C_INT) :: fresult + +fresult = swigc_sm_ls_max_results_get() +swig_result = fresult +end function + +function swigf_recursive_ls__SWIG_0(sourcedir, ending) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +character(len=*), intent(in) :: sourcedir +character(len=*), intent(in) :: ending +type(SwigClassWrapper) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +call SWIGTM_fin_char_Sm_(sourcedir, farg1, farg1_temp) +call SWIGTM_fin_char_Sm_(ending, farg2, farg2_temp) +fresult = swigc_recursive_ls__SWIG_0(farg1, farg2) +swig_result%swigdata = fresult +end function + +function swigf_recursive_ls__SWIG_1(sourcedir) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +character(len=*), intent(in) :: sourcedir +type(SwigClassWrapper) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(sourcedir, farg1, farg1_temp) +fresult = swigc_recursive_ls__SWIG_1(farg1) +swig_result%swigdata = fresult +end function + +function swigf_recursive_ls__SWIG_2(sourcedir, match_fcn, user_data) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +character(len=*), intent(in) :: sourcedir +procedure(SWIGTYPE_f_r_q_const__std__string_p_void__bool) :: match_fcn +type(C_PTR), intent(in) :: user_data +type(SwigClassWrapper) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 +type(C_FUNPTR) :: farg2 +type(C_PTR) :: farg3 + +call SWIGTM_fin_char_Sm_(sourcedir, farg1, farg1_temp) +farg2 = c_funloc(match_fcn) +farg3 = user_data +fresult = swigc_recursive_ls__SWIG_2(farg1, farg2, farg3) +swig_result%swigdata = fresult +end function + +function swigf_ls_files_in_directory__SWIG_0(sourcedir, ending) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +character(len=*), intent(in) :: sourcedir +character(len=*), intent(in) :: ending +type(SwigClassWrapper) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +call SWIGTM_fin_char_Sm_(sourcedir, farg1, farg1_temp) +call SWIGTM_fin_char_Sm_(ending, farg2, farg2_temp) +fresult = swigc_ls_files_in_directory__SWIG_0(farg1, farg2) +swig_result%swigdata = fresult +end function + +function swigf_ls_files_in_directory__SWIG_1(sourcedir) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +character(len=*), intent(in) :: sourcedir +type(SwigClassWrapper) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(sourcedir, farg1, farg1_temp) +fresult = swigc_ls_files_in_directory__SWIG_1(farg1) +swig_result%swigdata = fresult +end function + +function swigf_ls_files_in_directory__SWIG_2(sourcedir, match_fcn, match_data) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +character(len=*), intent(in) :: sourcedir +procedure(SWIGTYPE_f_r_q_const__std__string_p_void__bool) :: match_fcn +type(C_PTR), intent(in) :: match_data +type(SwigClassWrapper) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 +type(C_FUNPTR) :: farg2 +type(C_PTR) :: farg3 + +call SWIGTM_fin_char_Sm_(sourcedir, farg1, farg1_temp) +farg2 = c_funloc(match_fcn) +farg3 = match_data +fresult = swigc_ls_files_in_directory__SWIG_2(farg1, farg2, farg3) +swig_result%swigdata = fresult +end function + +function ls_directories_in_directory(src) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +type(SWIGTYPE_p_std__vectorT_std__string_t) :: swig_result +character(len=*), intent(in) :: src +type(SwigClassWrapper) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(src, farg1, farg1_temp) +fresult = swigc_ls_directories_in_directory(farg1) +swig_result%swigdata = fresult +end function + +function fs_relative(from_path, to_path) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +character(len=*), intent(in) :: from_path +character(len=*), intent(in) :: to_path +type(SwigArrayWrapper) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 +character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp +type(SwigArrayWrapper) :: farg2 + +call SWIGTM_fin_char_Sm_(from_path, farg1, farg1_temp) +call SWIGTM_fin_char_Sm_(to_path, farg2, farg2_temp) +fresult = swigc_fs_relative(farg1, farg2) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +function lexically_normalize_path(input) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +character(len=:), allocatable :: swig_result +character(len=*), intent(in) :: input +type(SwigArrayWrapper) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(input, farg1, farg1_temp) +fresult = swigc_lexically_normalize_path(farg1) +call SWIGTM_fout_char_Sm_(fresult, swig_result) +call SWIG_free(fresult%data) +end function + +subroutine load_file_data(filename0, data) +use, intrinsic :: ISO_C_BINDING +character(len=*), intent(in) :: filename0 +class(SWIGTYPE_p_std__vectorT_char_t), intent(in) :: data +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 +type(SwigClassWrapper) :: farg2 + +call SWIGTM_fin_char_Sm_(filename0, farg1, farg1_temp) +farg2 = data%swigdata +call swigc_load_file_data(farg1, farg2) +end subroutine + +function likely_not_spec_file(file) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +logical :: swig_result +character(len=*), intent(in) :: file +integer(C_INT) :: fresult +character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp +type(SwigArrayWrapper) :: farg1 + +call SWIGTM_fin_char_Sm_(file, farg1, farg1_temp) +fresult = swigc_likely_not_spec_file(farg1) +call SWIGTM_fout_bool(fresult, swig_result) +end function + + +end module diff --git a/bindings/swig/fortran/build-and-test.sh b/bindings/swig/fortran/build-and-test.sh new file mode 100644 index 0000000..2e2b4f9 --- /dev/null +++ b/bindings/swig/fortran/build-and-test.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +pushd /tmp + +rm -rf build + +cmake -S /mnt/c/Projects/code/SpecUtils \ + -B build \ + -DSpecUtils_BUILD_UNIT_TESTS=ON \ + -DSpecUtils_BUILD_REGRESSION_TEST=ON \ + -DSpecUtils_ENABLE_EQUALITY_CHECKS=ON \ + -DPERFORM_DEVELOPER_CHECKS=ON \ + -DSpecUtils_ENABLE_D3_CHART=OFF \ + -DSpecUtils_USING_NO_THREADING=ON \ + -DSpecUtils_D3_SUPPORT_FILE_STATIC=OFF \ + -DSpecUtils_ENABLE_URI_SPECTRA=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DSpecUtils_FLT_PARSE_METHOD=FastFloat \ + -DSpecUtils_FETCH_FAST_FLOAT=ON \ + -DSpecUtils_C_BINDINGS=ON \ + -DSpecUtils_FORTRAN_SWIG=ON + + cmake --build build -j 20 --config Release + + ctest --rerun-failed --output-on-failure --test-dir build -C Release + + popd \ No newline at end of file diff --git a/bindings/swig/fortran/swig-gen.sh b/bindings/swig/fortran/swig-gen.sh new file mode 100644 index 0000000..03438a8 --- /dev/null +++ b/bindings/swig/fortran/swig-gen.sh @@ -0,0 +1,13 @@ +#!/usr/bin/bash +export SWIG_LIB=/usr/local/share/swig/4.2.0/ +#export SWIG_LIB=/mnt/c/Tools/swig-fortran/Lib + +swig -I../../../ -fortran -c++ -outcurrentdir -debug-classes ./SpecUtilsFortran.i + +gad_dev=/mnt/c/Projects/code/gadras.worktrees/feature/406-spectra-file-io-out-of-fortran +cpp_wrap_dest=$gad_dev/CGADFunc/FileIO/src +fortran_wrap_dest=$gad_dev/GADRASw/src/SpectraFile + +cp SpecUtilsFortran_wrap.cxx $cpp_wrap_dest +cp SpecUtilsWrap.f90 $fortran_wrap_dest +#swig -fortran -c++ -outcurrentdir -debug-classes ./SpecUtilsFortran.i \ No newline at end of file diff --git a/bindings/swig/fortran/test_specutils_fortran.f90 b/bindings/swig/fortran/test_specutils_fortran.f90 new file mode 100644 index 0000000..943ce26 --- /dev/null +++ b/bindings/swig/fortran/test_specutils_fortran.f90 @@ -0,0 +1,287 @@ +program TestSpecUtils + use testdrive, only : error_type, check + use specutilswrap + implicit none + integer, parameter :: maxDevPairs = 20 + integer, parameter :: maxMCA = 8 + integer, parameter :: maxPanel = 8 + integer, parameter :: maxCol = 4 + + call SpecUtilsRoundTrip() + !call DerivationPairMap() + print *, "Success!" + contains + +subroutine SpecUtilsRoundTrip() + type(error_type), allocatable :: error + type(SpecFile) :: sf + type(Measurement) :: m + character(len=:), allocatable :: filePath + character(len=:), allocatable :: title + integer :: istat, i + real :: sum + logical :: success + real, dimension(:), allocatable :: spectrum + type(FloatVector) :: coeffsIn + type(DeviationPairs) :: devPairsIn + type(DevPair) :: devPairVal + type(EnergyCalibration) :: ecalIn + real :: devPairArray(2, maxDevPairs, maxMCA, maxPanel, maxCol) + + filePath = "spec-utils-round-trip.pcf" + if ( is_file(filePath) ) then + success = remove_file( filePath ) + call check( error, success ) + end if + + m = Measurement() + + call m%set_start_time_from_string("14-Nov-1995 12:17:41.43") + call m%set_title("SpecUtilsRoundTrip Det=Ba2") + call m%set_detector_name("Ba2"); + call m%set_measurement_description("TestDescription") + call m%set_source_description("TestSource") + call m%set_neutron_count(99.0) + call check(error, m%rpm_panel_number(), 2-1 ) + call check(error, m%rpm_column_number(), 1-1 ) + call check(error, m%rpm_mca_number(), 2-1 ) + + allocate( spectrum(128) ) + DO i = 1, 128 + spectrum(i) = i + END DO + call m%set_spectrum( spectrum ) + + call m%set_live_time(10.55) + call m%set_real_time(11.66) + + coeffsIn = FloatVector() + call coeffsIn%push_back(4.41) + call coeffsIn%push_back(3198.33) + call coeffsIn%push_back(1.0) + call coeffsIn%push_back(2.0) + + devPairsIn = DeviationPairs() + + do i=1,4 + devPairVal = DevPair(i+10.0, i*(-1.0)) + call devPairsIn%push_back(devPairVal) + call devPairVal%release() + end do + + ecalIn = EnergyCalibration() + call ecalIn%set_full_range_fraction(size(spectrum), coeffsIn, devPairsIn) + call m%set_energy_calibration(ecalIn) + + sf = SpecFile() + call sf%add_measurement(m) + call sf%write_to_file(filePath, SaveSpectrumAsType_Pcf) + + call SpecUtilsRoundTrip_Read(sf, filePath) + + ! call mapDevPairsToArray2(sf, devPairArray) + + ! call check( error, devPairArray(1, 1, 2, 2, 1), 11.0 ) + ! call check( error, devPairArray(2, 1, 2, 2, 1), -1.0 ) + + call sf%release() + call coeffsIn%release() + call devPairsIn%release() + call ecalIn%release() + call m%release() + +end subroutine + +subroutine SpecUtilsRoundTrip_Read(expectedSpecFile, filePath) + type(SpecFile), intent(in) :: expectedSpecFile + type(error_type), allocatable :: error + type(SpecFile) :: actualSpecFile + type(Measurement) :: expM, actM + character(len=:), allocatable, intent(in) :: filePath + character(len=:), allocatable :: title + integer :: istat, i, numChannels + logical :: success + real, dimension(:), allocatable :: expSpectrum, actSpectrum + type(EnergyCalibration) :: ecalAct, ecalExp + type(FloatVector) :: coeffsAct, coeffsExp + type(DeviationPairs) :: devPairsAct, devPairsExp + type(DevPair) :: devPairAct, devPairExp + + actualSpecFile = SpecFile() + success = actualSpecFile%load_file(filePath, ParserType_Pcf) + call check(error, success) + + expM = expectedSpecFile%measurement_at(1) + actM = actualSpecFile%measurement_at(1) + + call check(error, actM%title(), expM%title() ) + call check(error, actM%detector_name() .ne.'') + call check(error, actM%detector_name(), expM%detector_name()) + call check(error, actM%measurement_description() .ne. '' ) + call check(error, actM%measurement_description(), expM%measurement_description() ) + call check(error, actM%source_description() .ne. '' ) + call check(error, actM%source_description(), expM%source_description() ) + + ! Panel, column and mca numbers are 1-based + call check(error, actM%rpm_panel_number() >= 0 ) + call check(error, actM%rpm_panel_number(), expM%rpm_panel_number() ) + + call check(error, actM%rpm_column_number() >= 0 ) + call check(error, actM%rpm_column_number(), expM%rpm_column_number() ) + + call check(error, actM%rpm_mca_number() >= 0 ) + call check(error, actM%rpm_mca_number(), expM%rpm_mca_number() ) + + call check(error, actM%get_start_time_string(), expM%get_start_time_string() ) + call check(error, actM%live_time() .gt. 0.0) + call check(error, actM%live_time(), expM%live_time() ) + + call check(error, actM%get_neutron_count() .gt. 0.0 ) + call check(error, actM%get_neutron_count(), expM%get_neutron_count() ) + + numChannels = expM%get_num_channels() + allocate(expSpectrum(numChannels)) + call expM%get_spectrum(expSpectrum) + call check(error, size(expSpectrum), 128) + + numChannels = actM%get_num_channels() + allocate(actSpectrum(numChannels)) + call actM%get_spectrum(actSpectrum) + call check(error, size(actSpectrum), 128) + + do i=1, numChannels + call check( error, actSpectrum(i) .gt. 0 ) + call check( error, actSpectrum(i), expSpectrum(i) ) + end do + + ecalAct = actM%energy_calibration() + ecalExp = expM%energy_calibration() + + coeffsAct = ecalAct%coefficients() + coeffsExp = ecalExp%coefficients() + + do i = 1,coeffsExp%size() + call check(error, coeffsAct%get(i) .gt. 0.0) + call check(error, coeffsAct%get(i), coeffsExp%get(i)) + end do + + devPairsAct = ecalAct%deviation_pairs() + devPairsExp = ecalExp%deviation_pairs() + + do i = 1, devPairsExp%size() + devPairAct = devPairsAct%get(i) + devPairExp = devPairsExp%get(i) + + call check(error, devPairAct%get_first(), devPairExp%get_first()) + call check(error, devPairAct%get_second(), devPairExp%get_second()) + end do + + call ecalAct%release() + call ecalExp%release() + call expM%release() + call actM%release() + call actualSpecFile%release() +end subroutine + +subroutine getExpectedDeviationPair(col, panel, mca, devPair, first, second) + integer, intent(in) :: col, panel, mca, devPair + real, intent(out) :: first, second + integer :: totalPairs, pairVal + + ! Validate the indices to ensure they are within bounds + if (col >= maxCol .or. panel >= maxPanel .or. mca >= maxMCA .or. devPair >= maxDevPairs) then + print *, "Index out of range" + stop + end if + + ! Calculate the total number of pairs before the given indices + totalPairs = devPair-1 + (mca-1) * maxDevPairs + (panel-1) * maxDevPairs * maxMCA + (col-1) * maxDevPairs * maxMCA * maxPanel + + ! Calculate the pairVal + pairVal = 1 + 2 * totalPairs + + ! Calculate the first and second pair values + first = real(pairVal) + second = real(pairVal + 1) +end subroutine + +subroutine getDetectorName(panel, column, mca, isNeutron, detectorName) + integer, intent(in) :: panel, column, mca + logical, intent(in), optional :: isNeutron + character(len=20), intent(out) :: detectorName + character(len=1) :: panelChar, columnChar, mcaChar + + ! Validate input parameters + if (panel < 1 .or. column < 1 .or. mca < 1) then + print *, "Error: Panel, column, and MCA numbers must be greater than 0." + stop + end if + + ! Convert panel, column, and MCA to the appropriate characters + panelChar = char(iachar('A') + (panel - 1)) + columnChar = char(iachar('a') + (column - 1)) + mcaChar = char(iachar('1') + (mca - 1)) + + ! Construct the detector name + detectorName = panelChar // columnChar // mcaChar + + ! Append 'N' if it's a neutron detector + if (present(isNeutron) .and. isNeutron) then + detectorName = detectorName // 'N' + end if + +end subroutine + +! subroutine DerivationPairMap() +! type(error_type), allocatable :: error +! type(SpecFile) :: sf +! type(EnergyCalibrationExt) :: ecal +! type(Measurement) :: m +! type(DeviationPairs) :: devPairs +! type(DevPair) :: devPairAct, devPairExp, dp +! character(len=20) :: detectorName +! real :: devPairArray(2, maxDevPairs, maxMCA, maxPanel, maxCol) +! integer :: col_i, panel_j, mca_k, p +! real :: first, second +! integer :: pairVal +! integer :: col, panel, mca, devPair_i + +! sf = SpecFile() +! pairVal = 0 +! do col = 1, maxCol +! do panel = 1, maxPanel +! do mca = 1, maxMCA +! m = Measurement() +! devPairs = DeviationPairs() +! call getDetectorName(panel,col,mca,.false.,detectorName) +! call m%set_detector_name(detectorName) +! do devPair_i = 1, maxDevPairs +! dp = DevPair() +! pairVal = pairVal + 1 +! call dp%set_first(real(pairVal)) +! pairVal = pairVal + 1 +! call dp%set_second(real(pairVal)) +! call devPairs%push_back(dp) +! end do +! ecal = EnergyCalibrationExt() +! call ecal%set_dev_pairs(devPairs) +! call m%set_ecal(ecal) +! call sf%add_measurement(m) +! end do +! end do +! end do + +! call mapDevPairsToArray2(sf, devPairArray) + +! col =3 +! panel = 2 +! mca = 7 +! devPair_i = 19 +! call getExpectedDeviationPair(col, panel, mca, devPair_i, first, second) + +! call check( error, devPairArray(1,devPair_i,mca,panel,col), first) +! call check( error, devPairArray(2,devPair_i,mca,panel,col), second) + +! end subroutine + +end program \ No newline at end of file diff --git a/bindings/swig/fortran/testdrive.F90 b/bindings/swig/fortran/testdrive.F90 new file mode 100644 index 0000000..0cd6b83 --- /dev/null +++ b/bindings/swig/fortran/testdrive.F90 @@ -0,0 +1,1988 @@ +! This file is part of test-drive. +! SPDX-Identifier: Apache-2.0 OR MIT +! +! Licensed under either of Apache License, Version 2.0 or MIT license +! at your option; you may not use this file except in compliance with +! the License. +! +! Unless required by applicable law or agreed to in writing, software +! distributed under the License is distributed on an "AS IS" BASIS, +! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +! See the License for the specific language governing permissions and +! limitations under the License. + +!# Enable support for quadruple precision +#ifndef WITH_QP +#define WITH_QP 0 +#endif + +!# Enable support for extended double precision +#ifndef WITH_XDP +#define WITH_XDP 0 +#endif + +!> Provides a light-weight procedural testing framework for Fortran projects. +!> +!> Testsuites are defined by a [[collect_interface]] returning a set of +!> [[unittest_type]] objects. To create a new test use the [[new_unittest]] +!> constructor, which requires a test identifier and a procedure with a +!> [[test_interface]] compatible signature. The error status is communicated +!> by the allocation status of an [[error_type]]. +!> +!> The necessary boilerplate code to setup the test entry point is just +!> +!>```fortran +!>program tester +!> use, intrinsic :: iso_fortran_env, only : error_unit +!> use testdrive, only : run_testsuite, new_testsuite, testsuite_type +!> use test_suite1, only : collect_suite1 +!> use test_suite2, only : collect_suite2 +!> implicit none +!> integer :: stat, is +!> type(testsuite_type), allocatable :: testsuites(:) +!> character(len=*), parameter :: fmt = '("#", *(1x, a))' +!> +!> stat = 0 +!> +!> testsuites = [ & +!> new_testsuite("suite1", collect_suite1), & +!> new_testsuite("suite2", collect_suite2) & +!> ] +!> +!> do is = 1, size(testsuites) +!> write(error_unit, fmt) "Testing:", testsuites(is)%name +!> call run_testsuite(testsuites(is)%collect, error_unit, stat) +!> end do +!> +!> if (stat > 0) then +!> write(error_unit, '(i0, 1x, a)') stat, "test(s) failed!" +!> error stop +!> end if +!> +!>end program tester +!>``` +!> +!> Every test is defined in a separate module using a ``collect`` function, which +!> is exported and added to the ``testsuites`` array in the test runner. +!> All test have a simple interface with just an allocatable [[error_type]] as +!> output to provide the test results. +!> +!>```fortran +!>module test_suite1 +!> use testdrive, only : new_unittest, unittest_type, error_type, check +!> implicit none +!> private +!> +!> public :: collect_suite1 +!> +!>contains +!> +!>!> Collect all exported unit tests +!>subroutine collect_suite1(testsuite) +!> !> Collection of tests +!> type(unittest_type), allocatable, intent(out) :: testsuite(:) +!> +!> testsuite = [ & +!> new_unittest("valid", test_valid), & +!> new_unittest("invalid", test_invalid, should_fail=.true.) & +!> ] +!> +!>end subroutine collect_suite1 +!> +!>subroutine test_valid(error) +!> type(error_type), allocatable, intent(out) :: error +!> ! ... +!>end subroutine test_valid +!> +!>subroutine test_invalid(error) +!> type(error_type), allocatable, intent(out) :: error +!> ! ... +!>end subroutine test_invalid +!> +!>end module test_suite1 +!>``` +!> +!> For an example setup checkout the ``test/`` directory in this project. +module testdrive + use, intrinsic :: iso_fortran_env, only : error_unit + implicit none + private + + public :: run_testsuite, run_selected, new_unittest, new_testsuite + public :: select_test, select_suite + public :: unittest_type, testsuite_type, error_type + public :: check, test_failed, skip_test + public :: test_interface, collect_interface + public :: get_argument, get_variable, to_string + + + !> Single precision real numbers + integer, parameter :: sp = selected_real_kind(6) + + !> Double precision real numbers + integer, parameter :: dp = selected_real_kind(15) + +#if WITH_XDP + !> Extended double precision real numbers + integer, parameter :: xdp = selected_real_kind(18) +#endif + +#if WITH_QP + !> Quadruple precision real numbers + integer, parameter :: qp = selected_real_kind(33) +#endif + + !> Char length for integers + integer, parameter :: i1 = selected_int_kind(2) + + !> Short length for integers + integer, parameter :: i2 = selected_int_kind(4) + + !> Length of default integers + integer, parameter :: i4 = selected_int_kind(9) + + !> Long length for integers + integer, parameter :: i8 = selected_int_kind(18) + + !> Error code for success + integer, parameter :: success = 0 + + !> Error code for failure + integer, parameter :: fatal = 1 + + !> Error code for skipped test + integer, parameter :: skipped = 77 + + + !> Error message + type :: error_type + + !> Error code + integer :: stat = success + + !> Payload of the error + character(len=:), allocatable :: message + + contains + + !> Escalate uncaught errors + final :: escalate_error + + end type error_type + + + interface check + module procedure :: check_stat + module procedure :: check_logical + module procedure :: check_float_sp + module procedure :: check_float_dp +#if WITH_XDP + module procedure :: check_float_xdp +#endif +#if WITH_QP + module procedure :: check_float_qp +#endif + module procedure :: check_float_exceptional_sp + module procedure :: check_float_exceptional_dp +#if WITH_XDP + module procedure :: check_float_exceptional_xdp +#endif +#if WITH_QP + module procedure :: check_float_exceptional_qp +#endif + module procedure :: check_complex_sp + module procedure :: check_complex_dp +#if WITH_XDP + module procedure :: check_complex_xdp +#endif +#if WITH_QP + module procedure :: check_complex_qp +#endif + module procedure :: check_complex_exceptional_sp + module procedure :: check_complex_exceptional_dp +#if WITH_XDP + module procedure :: check_complex_exceptional_xdp +#endif +#if WITH_QP + module procedure :: check_complex_exceptional_qp +#endif + module procedure :: check_int_i1 + module procedure :: check_int_i2 + module procedure :: check_int_i4 + module procedure :: check_int_i8 + module procedure :: check_bool + module procedure :: check_string + end interface check + + + interface to_string + module procedure :: integer_i1_to_string + module procedure :: integer_i2_to_string + module procedure :: integer_i4_to_string + module procedure :: integer_i8_to_string + module procedure :: real_sp_to_string + module procedure :: real_dp_to_string +#if WITH_XDP + module procedure :: real_xdp_to_string +#endif +#if WITH_QP + module procedure :: real_qp_to_string +#endif + module procedure :: complex_sp_to_string + module procedure :: complex_dp_to_string +#if WITH_XDP + module procedure :: complex_xdp_to_string +#endif +#if WITH_QP + module procedure :: complex_qp_to_string +#endif + end interface to_string + + + !> Implementation of check for not a number value, in case a compiler does not + !> provide the IEEE intrinsic ``ieee_is_nan`` (currently this is Intel oneAPI on MacOS) + interface is_nan + module procedure :: is_nan_sp + module procedure :: is_nan_dp +#if WITH_XDP + module procedure :: is_nan_xdp +#endif +#if WITH_QP + module procedure :: is_nan_qp +#endif + end interface is_nan + + + abstract interface + !> Entry point for tests + subroutine test_interface(error) + import :: error_type + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + end subroutine test_interface + end interface + + + !> Declaration of a unit test + type :: unittest_type + + !> Name of the test + character(len=:), allocatable :: name + + !> Entry point of the test + procedure(test_interface), pointer, nopass :: test => null() + + !> Whether test is supposed to fail + logical :: should_fail = .false. + + end type unittest_type + + + abstract interface + !> Collect all tests + subroutine collect_interface(testsuite) + import :: unittest_type + + !> Collection of tests + type(unittest_type), allocatable, intent(out) :: testsuite(:) + + end subroutine collect_interface + end interface + + + !> Collection of unit tests + type :: testsuite_type + + !> Name of the testsuite + character(len=:), allocatable :: name + + !> Entry point of the test + procedure(collect_interface), pointer, nopass :: collect => null() + + end type testsuite_type + + + character(len=*), parameter :: fmt = '(1x, *(1x, a))' + + +contains + + + !> Driver for testsuite + recursive subroutine run_testsuite(collect, unit, stat, parallel) + + !> Collect tests + procedure(collect_interface) :: collect + + !> Unit for IO + integer, intent(in) :: unit + + !> Number of failed tests + integer, intent(inout) :: stat + + !> Run the tests in parallel + logical, intent(in), optional :: parallel + + type(unittest_type), allocatable :: testsuite(:) + integer :: it + logical :: parallel_ + + parallel_ = .true. + if(present(parallel)) parallel_ = parallel + + call collect(testsuite) + + !$omp parallel do schedule(dynamic) shared(testsuite, unit) reduction(+:stat) & + !$omp if (parallel_) + do it = 1, size(testsuite) + !$omp critical(testdrive_testsuite) + write(unit, '(1x, 3(1x, a), 1x, "(", i0, "/", i0, ")")') & + & "Starting", testsuite(it)%name, "...", it, size(testsuite) + !$omp end critical(testdrive_testsuite) + call run_unittest(testsuite(it), unit, stat) + end do + + end subroutine run_testsuite + + + !> Driver for selective testing + recursive subroutine run_selected(collect, name, unit, stat) + + !> Collect tests + procedure(collect_interface) :: collect + + !> Name of the selected test + character(len=*), intent(in) :: name + + !> Unit for IO + integer, intent(in) :: unit + + !> Number of failed tests + integer, intent(inout) :: stat + + type(unittest_type), allocatable :: testsuite(:) + integer :: it + + call collect(testsuite) + + it = select_test(testsuite, name) + + if (it > 0 .and. it <= size(testsuite)) then + call run_unittest(testsuite(it), unit, stat) + else + write(unit, fmt) "Available tests:" + do it = 1, size(testsuite) + write(unit, fmt) "-", testsuite(it)%name + end do + stat = -huge(it) + end if + + end subroutine run_selected + + + !> Run a selected unit test + recursive subroutine run_unittest(test, unit, stat) + + !> Unit test + type(unittest_type), intent(in) :: test + + !> Unit for IO + integer, intent(in) :: unit + + !> Number of failed tests + integer, intent(inout) :: stat + + type(error_type), allocatable :: error + character(len=:), allocatable :: message + + call test%test(error) + if (.not.test_skipped(error)) then + if (allocated(error) .neqv. test%should_fail) stat = stat + 1 + end if + call make_output(message, test, error) + !$omp critical(testdrive_testsuite) + write(unit, '(a)') message + !$omp end critical(testdrive_testsuite) + if (allocated(error)) then + call clear_error(error) + end if + + end subroutine run_unittest + + + pure function test_skipped(error) result(is_skipped) + + !> Error handling + type(error_type), intent(in), optional :: error + + !> Test was skipped + logical :: is_skipped + + is_skipped = .false. + if (present(error)) then + is_skipped = error%stat == skipped + end if + + end function test_skipped + + + !> Create output message for test (this procedure is pure and therefore cannot launch tests) + pure subroutine make_output(output, test, error) + + !> Output message for display + character(len=:), allocatable, intent(out) :: output + + !> Unit test + type(unittest_type), intent(in) :: test + + !> Error handling + type(error_type), intent(in), optional :: error + + character(len=:), allocatable :: label + character(len=*), parameter :: indent = repeat(" ", 7) // repeat(".", 3) // " " + + if (test_skipped(error)) then + output = indent // test%name // " [SKIPPED]" & + & // new_line("a") // " Message: " // error%message + return + end if + + if (present(error) .neqv. test%should_fail) then + if (test%should_fail) then + label = " [UNEXPECTED PASS]" + else + label = " [FAILED]" + end if + else + if (test%should_fail) then + label = " [EXPECTED FAIL]" + else + label = " [PASSED]" + end if + end if + output = indent // test%name // label + if (present(error)) then + output = output // new_line("a") // " Message: " // error%message + end if + end subroutine make_output + + + !> Select a unit test from all available tests + function select_test(tests, name) result(pos) + + !> Name identifying the test suite + character(len=*), intent(in) :: name + + !> Available unit tests + type(unittest_type) :: tests(:) + + !> Selected test suite + integer :: pos + + integer :: it + + pos = 0 + do it = 1, size(tests) + if (name == tests(it)%name) then + pos = it + exit + end if + end do + + end function select_test + + + !> Select a test suite from all available suites + function select_suite(suites, name) result(pos) + + !> Name identifying the test suite + character(len=*), intent(in) :: name + + !> Available test suites + type(testsuite_type) :: suites(:) + + !> Selected test suite + integer :: pos + + integer :: it + + pos = 0 + do it = 1, size(suites) + if (name == suites(it)%name) then + pos = it + exit + end if + end do + + end function select_suite + + + !> Register a new unit test + function new_unittest(name, test, should_fail) result(self) + + !> Name of the test + character(len=*), intent(in) :: name + + !> Entry point for the test + procedure(test_interface) :: test + + !> Whether test is supposed to error or not + logical, intent(in), optional :: should_fail + + !> Newly registered test + type(unittest_type) :: self + + self%name = name + self%test => test + if (present(should_fail)) self%should_fail = should_fail + + end function new_unittest + + + !> Register a new testsuite + function new_testsuite(name, collect) result(self) + + !> Name of the testsuite + character(len=*), intent(in) :: name + + !> Entry point to collect tests + procedure(collect_interface) :: collect + + !> Newly registered testsuite + type(testsuite_type) :: self + + self%name = name + self%collect => collect + + end function new_testsuite + + + subroutine check_stat(error, stat, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Status of operation + integer, intent(in) :: stat + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (stat /= success) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, "Non-zero exit code encountered", more) + end if + end if + + end subroutine check_stat + + + subroutine check_logical(error, expression, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Result of logical operator + logical, intent(in) :: expression + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (.not.expression) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, "Condition not fullfilled", more) + end if + end if + + end subroutine check_logical + + + subroutine check_float_dp(error, actual, expected, message, more, thr, rel) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + real(dp), intent(in) :: actual + + !> Expected floating point value + real(dp), intent(in) :: expected + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + !> Allowed threshold for matching floating point values + real(dp), intent(in), optional :: thr + + !> Check for relative errors instead + logical, intent(in), optional :: rel + + logical :: relative + real(dp) :: diff, threshold + + call check(error, actual, message, more) + if (allocated(error)) return + + if (present(thr)) then + threshold = thr + else + threshold = epsilon(expected) + end if + + if (present(rel)) then + relative = rel + else + relative = .false. + end if + + if (relative) then + diff = abs(actual - expected) / abs(expected) + else + diff = abs(actual - expected) + end if + + if (diff > threshold) then + if (present(message)) then + call test_failed(error, message, more) + else + if (relative) then + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(int(diff*100))//"%)", & + more) + else + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(diff)//")", & + more) + end if + end if + end if + + end subroutine check_float_dp + + + subroutine check_float_exceptional_dp(error, actual, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + real(dp), intent(in) :: actual + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (is_nan(actual)) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, "Exceptional value 'not a number' found", more) + end if + end if + + end subroutine check_float_exceptional_dp + + + subroutine check_float_sp(error, actual, expected, message, more, thr, rel) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + real(sp), intent(in) :: actual + + !> Expected floating point value + real(sp), intent(in) :: expected + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + !> Allowed threshold for matching floating point values + real(sp), intent(in), optional :: thr + + !> Check for relative errors instead + logical, intent(in), optional :: rel + + logical :: relative + real(sp) :: diff, threshold + + call check(error, actual, message, more) + if (allocated(error)) return + + if (present(thr)) then + threshold = thr + else + threshold = epsilon(expected) + end if + + if (present(rel)) then + relative = rel + else + relative = .false. + end if + + if (relative) then + diff = abs(actual - expected) / abs(expected) + else + diff = abs(actual - expected) + end if + + if (diff > threshold) then + if (present(message)) then + call test_failed(error, message, more) + else + if (relative) then + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(int(diff*100))//"%)", & + more) + else + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(diff)//")", & + more) + end if + end if + end if + + end subroutine check_float_sp + + + subroutine check_float_exceptional_sp(error, actual, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + real(sp), intent(in) :: actual + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (is_nan(actual)) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, "Exceptional value 'not a number' found", more) + end if + end if + + end subroutine check_float_exceptional_sp + + +#if WITH_XDP + subroutine check_float_xdp(error, actual, expected, message, more, thr, rel) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + real(xdp), intent(in) :: actual + + !> Expected floating point value + real(xdp), intent(in) :: expected + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + !> Allowed threshold for matching floating point values + real(xdp), intent(in), optional :: thr + + !> Check for relative errors instead + logical, intent(in), optional :: rel + + logical :: relative + real(xdp) :: diff, threshold + + call check(error, actual, message, more) + if (allocated(error)) return + + if (present(thr)) then + threshold = thr + else + threshold = epsilon(expected) + end if + + if (present(rel)) then + relative = rel + else + relative = .false. + end if + + if (relative) then + diff = abs(actual - expected) / abs(expected) + else + diff = abs(actual - expected) + end if + + if (diff > threshold) then + if (present(message)) then + call test_failed(error, message, more) + else + if (relative) then + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(int(diff*100))//"%)", & + more) + else + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(diff)//")", & + more) + end if + end if + end if + + end subroutine check_float_xdp + + + subroutine check_float_exceptional_xdp(error, actual, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + real(xdp), intent(in) :: actual + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (is_nan(actual)) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, "Exceptional value 'not a number' found", more) + end if + end if + + end subroutine check_float_exceptional_xdp +#endif + + +#if WITH_QP + subroutine check_float_qp(error, actual, expected, message, more, thr, rel) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + real(qp), intent(in) :: actual + + !> Expected floating point value + real(qp), intent(in) :: expected + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + !> Allowed threshold for matching floating point values + real(qp), intent(in), optional :: thr + + !> Check for relative errors instead + logical, intent(in), optional :: rel + + logical :: relative + real(qp) :: diff, threshold + + call check(error, actual, message, more) + if (allocated(error)) return + + if (present(thr)) then + threshold = thr + else + threshold = epsilon(expected) + end if + + if (present(rel)) then + relative = rel + else + relative = .false. + end if + + if (relative) then + diff = abs(actual - expected) / abs(expected) + else + diff = abs(actual - expected) + end if + + if (diff > threshold) then + if (present(message)) then + call test_failed(error, message, more) + else + if (relative) then + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(int(diff*100))//"%)", & + more) + else + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(diff)//")", & + more) + end if + end if + end if + + end subroutine check_float_qp + + + subroutine check_float_exceptional_qp(error, actual, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + real(qp), intent(in) :: actual + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (is_nan(actual)) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, "Exceptional value 'not a number' found", more) + end if + end if + + end subroutine check_float_exceptional_qp +#endif + + + subroutine check_complex_dp(error, actual, expected, message, more, thr, rel) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + complex(dp), intent(in) :: actual + + !> Expected floating point value + complex(dp), intent(in) :: expected + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + !> Allowed threshold for matching floating point values + real(dp), intent(in), optional :: thr + + !> Check for relative errors instead + logical, intent(in), optional :: rel + + logical :: relative + real(dp) :: diff, threshold + + call check(error, actual, message, more) + if (allocated(error)) return + + if (present(thr)) then + threshold = thr + else + threshold = epsilon(abs(expected)) + end if + + if (present(rel)) then + relative = rel + else + relative = .false. + end if + + if (relative) then + diff = abs(actual - expected) / abs(expected) + else + diff = abs(actual - expected) + end if + + if (diff > threshold) then + if (present(message)) then + call test_failed(error, message, more) + else + if (relative) then + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(int(diff*100))//"%)", & + more) + else + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(diff)//")", & + more) + end if + end if + end if + + end subroutine check_complex_dp + + + subroutine check_complex_exceptional_dp(error, actual, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + complex(dp), intent(in) :: actual + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (is_nan(real(actual)) .or. is_nan(aimag(actual))) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, "Exceptional value 'not a number' found", more) + end if + end if + + end subroutine check_complex_exceptional_dp + + + subroutine check_complex_sp(error, actual, expected, message, more, thr, rel) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + complex(sp), intent(in) :: actual + + !> Expected floating point value + complex(sp), intent(in) :: expected + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + !> Allowed threshold for matching floating point values + real(sp), intent(in), optional :: thr + + !> Check for relative errors instead + logical, intent(in), optional :: rel + + logical :: relative + real(sp) :: diff, threshold + + call check(error, actual, message, more) + if (allocated(error)) return + + if (present(thr)) then + threshold = thr + else + threshold = epsilon(abs(expected)) + end if + + if (present(rel)) then + relative = rel + else + relative = .false. + end if + + if (relative) then + diff = abs(actual - expected) / abs(expected) + else + diff = abs(actual - expected) + end if + + if (diff > threshold) then + if (present(message)) then + call test_failed(error, message, more) + else + if (relative) then + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(int(diff*100))//"%)", & + more) + else + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(diff)//")", & + more) + end if + end if + end if + + end subroutine check_complex_sp + + + subroutine check_complex_exceptional_sp(error, actual, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + complex(sp), intent(in) :: actual + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (is_nan(real(actual)) .or. is_nan(aimag(actual))) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, "Exceptional value 'not a number' found", more) + end if + end if + + end subroutine check_complex_exceptional_sp + + +#if WITH_XDP + subroutine check_complex_xdp(error, actual, expected, message, more, thr, rel) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + complex(xdp), intent(in) :: actual + + !> Expected floating point value + complex(xdp), intent(in) :: expected + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + !> Allowed threshold for matching floating point values + real(xdp), intent(in), optional :: thr + + !> Check for relative errors instead + logical, intent(in), optional :: rel + + logical :: relative + real(xdp) :: diff, threshold + + call check(error, actual, message, more) + if (allocated(error)) return + + if (present(thr)) then + threshold = thr + else + threshold = epsilon(abs(expected)) + end if + + if (present(rel)) then + relative = rel + else + relative = .false. + end if + + if (relative) then + diff = abs(actual - expected) / abs(expected) + else + diff = abs(actual - expected) + end if + + if (diff > threshold) then + if (present(message)) then + call test_failed(error, message, more) + else + if (relative) then + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(int(diff*100))//"%)", & + more) + else + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(diff)//")", & + more) + end if + end if + end if + + end subroutine check_complex_xdp + + + subroutine check_complex_exceptional_xdp(error, actual, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + complex(xdp), intent(in) :: actual + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (is_nan(real(actual)) .or. is_nan(aimag(actual))) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, "Exceptional value 'not a number' found", more) + end if + end if + + end subroutine check_complex_exceptional_xdp +#endif + + +#if WITH_QP + subroutine check_complex_qp(error, actual, expected, message, more, thr, rel) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + complex(qp), intent(in) :: actual + + !> Expected floating point value + complex(qp), intent(in) :: expected + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + !> Allowed threshold for matching floating point values + real(qp), intent(in), optional :: thr + + !> Check for relative errors instead + logical, intent(in), optional :: rel + + logical :: relative + real(qp) :: diff, threshold + + call check(error, actual, message, more) + if (allocated(error)) return + + if (present(thr)) then + threshold = thr + else + threshold = epsilon(abs(expected)) + end if + + if (present(rel)) then + relative = rel + else + relative = .false. + end if + + if (relative) then + diff = abs(actual - expected) / abs(expected) + else + diff = abs(actual - expected) + end if + + if (diff > threshold) then + if (present(message)) then + call test_failed(error, message, more) + else + if (relative) then + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(int(diff*100))//"%)", & + more) + else + call test_failed(error, & + "Floating point value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual)//" "//& + "(difference: "//to_string(diff)//")", & + more) + end if + end if + end if + + end subroutine check_complex_qp + + + subroutine check_complex_exceptional_qp(error, actual, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found floating point value + complex(qp), intent(in) :: actual + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (is_nan(real(actual)) .or. is_nan(aimag(actual))) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, "Exceptional value 'not a number' found", more) + end if + end if + + end subroutine check_complex_exceptional_qp +#endif + + + subroutine check_int_i1(error, actual, expected, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found integer value + integer(i1), intent(in) :: actual + + !> Expected integer value + integer(i1), intent(in) :: expected + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (expected /= actual) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, & + "Integer value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual), & + more) + end if + end if + + end subroutine check_int_i1 + + + subroutine check_int_i2(error, actual, expected, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found integer value + integer(i2), intent(in) :: actual + + !> Expected integer value + integer(i2), intent(in) :: expected + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (expected /= actual) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, & + "Integer value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual), & + more) + end if + end if + + end subroutine check_int_i2 + + + subroutine check_int_i4(error, actual, expected, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found integer value + integer(i4), intent(in) :: actual + + !> Expected integer value + integer(i4), intent(in) :: expected + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (expected /= actual) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, & + "Integer value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual), & + more) + end if + end if + + end subroutine check_int_i4 + + + subroutine check_int_i8(error, actual, expected, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found integer value + integer(i8), intent(in) :: actual + + !> Expected integer value + integer(i8), intent(in) :: expected + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (expected /= actual) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, & + "Integer value missmatch", & + "expected "//to_string(expected)//" but got "//to_string(actual), & + more) + end if + end if + + end subroutine check_int_i8 + + + subroutine check_bool(error, actual, expected, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found boolean value + logical, intent(in) :: actual + + !> Expected boolean value + logical, intent(in) :: expected + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (expected .neqv. actual) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, & + "Logical value missmatch", & + "expected "//merge("T", "F", expected)//" but got "//merge("T", "F", actual), & + more) + end if + end if + + end subroutine check_bool + + + subroutine check_string(error, actual, expected, message, more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> Found boolean value + character(len=*), intent(in) :: actual + + !> Expected boolean value + character(len=*), intent(in) :: expected + + !> A detailed message describing the error + character(len=*), intent(in), optional :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + if (expected /= actual) then + if (present(message)) then + call test_failed(error, message, more) + else + call test_failed(error, & + "Character value missmatch", & + "expected '"//expected//"' but got '"//actual//"'", & + more) + end if + end if + + end subroutine check_string + + + subroutine test_failed(error, message, more, and_more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> A detailed message describing the error + character(len=*), intent(in) :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + !> Another line of error message + character(len=*), intent(in), optional :: and_more + + character(len=*), parameter :: skip = new_line("a") // repeat(" ", 11) + + allocate(error) + error%stat = fatal + + error%message = message + if (present(more)) then + error%message = error%message // skip // more + end if + if (present(and_more)) then + error%message = error%message // skip // and_more + end if + + end subroutine test_failed + + + !> A test is skipped because certain requirements are not met to run the actual test + subroutine skip_test(error, message, more, and_more) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + !> A detailed message describing the error + character(len=*), intent(in) :: message + + !> Another line of error message + character(len=*), intent(in), optional :: more + + !> Another line of error message + character(len=*), intent(in), optional :: and_more + + call test_failed(error, message, more, and_more) + error%stat = skipped + + end subroutine skip_test + + + !> Obtain the command line argument at a given index + subroutine get_argument(idx, arg) + + !> Index of command line argument, range [0:command_argument_count()] + integer, intent(in) :: idx + + !> Command line argument + character(len=:), allocatable, intent(out) :: arg + + integer :: length, stat + + call get_command_argument(idx, length=length, status=stat) + if (stat /= success) return + + allocate(character(len=length) :: arg, stat=stat) + if (stat /= success) return + + if (length > 0) then + call get_command_argument(idx, arg, status=stat) + if (stat /= success) deallocate(arg) + end if + + end subroutine get_argument + + + !> Obtain the value of an environment variable + subroutine get_variable(var, val) + + !> Name of variable + character(len=*), intent(in) :: var + + !> Value of variable + character(len=:), allocatable, intent(out) :: val + + integer :: length, stat + + call get_environment_variable(var, length=length, status=stat) + if (stat /= success) return + + allocate(character(len=length) :: val, stat=stat) + if (stat /= success) return + + if (length > 0) then + call get_environment_variable(var, val, status=stat) + if (stat /= success) deallocate(val) + end if + + end subroutine get_variable + + + pure function integer_i1_to_string(val) result(string) + integer, parameter :: ik = i1 + !> Integer value to create string from + integer(ik), intent(in) :: val + !> String representation of integer + character(len=:), allocatable :: string + + integer, parameter :: buffer_len = range(val)+2 + character(len=buffer_len) :: buffer + integer :: pos + integer(ik) :: n + character(len=1), parameter :: numbers(-9:0) = & + ["9", "8", "7", "6", "5", "4", "3", "2", "1", "0"] + + if (val == 0_ik) then + string = numbers(0) + return + end if + + n = sign(val, -1_ik) + buffer = "" + pos = buffer_len + 1 + do while (n < 0_ik) + pos = pos - 1 + buffer(pos:pos) = numbers(mod(n, 10_ik)) + n = n/10_ik + end do + + if (val < 0_ik) then + pos = pos - 1 + buffer(pos:pos) = '-' + end if + + string = buffer(pos:) + end function integer_i1_to_string + + + pure function integer_i2_to_string(val) result(string) + integer, parameter :: ik = i2 + !> Integer value to create string from + integer(ik), intent(in) :: val + !> String representation of integer + character(len=:), allocatable :: string + + integer, parameter :: buffer_len = range(val)+2 + character(len=buffer_len) :: buffer + integer :: pos + integer(ik) :: n + character(len=1), parameter :: numbers(-9:0) = & + ["9", "8", "7", "6", "5", "4", "3", "2", "1", "0"] + + if (val == 0_ik) then + string = numbers(0) + return + end if + + n = sign(val, -1_ik) + buffer = "" + pos = buffer_len + 1 + do while (n < 0_ik) + pos = pos - 1 + buffer(pos:pos) = numbers(mod(n, 10_ik)) + n = n/10_ik + end do + + if (val < 0_ik) then + pos = pos - 1 + buffer(pos:pos) = '-' + end if + + string = buffer(pos:) + end function integer_i2_to_string + + + pure function integer_i4_to_string(val) result(string) + integer, parameter :: ik = i4 + !> Integer value to create string from + integer(ik), intent(in) :: val + !> String representation of integer + character(len=:), allocatable :: string + + integer, parameter :: buffer_len = range(val)+2 + character(len=buffer_len) :: buffer + integer :: pos + integer(ik) :: n + character(len=1), parameter :: numbers(-9:0) = & + ["9", "8", "7", "6", "5", "4", "3", "2", "1", "0"] + + if (val == 0_ik) then + string = numbers(0) + return + end if + + n = sign(val, -1_ik) + buffer = "" + pos = buffer_len + 1 + do while (n < 0_ik) + pos = pos - 1 + buffer(pos:pos) = numbers(mod(n, 10_ik)) + n = n/10_ik + end do + + if (val < 0_ik) then + pos = pos - 1 + buffer(pos:pos) = '-' + end if + + string = buffer(pos:) + end function integer_i4_to_string + + + pure function integer_i8_to_string(val) result(string) + integer, parameter :: ik = i8 + !> Integer value to create string from + integer(ik), intent(in) :: val + !> String representation of integer + character(len=:), allocatable :: string + + integer, parameter :: buffer_len = range(val)+2 + character(len=buffer_len) :: buffer + integer :: pos + integer(ik) :: n + character(len=1), parameter :: numbers(-9:0) = & + ["9", "8", "7", "6", "5", "4", "3", "2", "1", "0"] + + if (val == 0_ik) then + string = numbers(0) + return + end if + + n = sign(val, -1_ik) + buffer = "" + pos = buffer_len + 1 + do while (n < 0_ik) + pos = pos - 1 + buffer(pos:pos) = numbers(mod(n, 10_ik)) + n = n/10_ik + end do + + if (val < 0_ik) then + pos = pos - 1 + buffer(pos:pos) = '-' + end if + + string = buffer(pos:) + end function integer_i8_to_string + + + pure function real_sp_to_string(val) result(string) + real(sp), intent(in) :: val + character(len=:), allocatable :: string + integer, parameter :: buffer_len = 128 + character(len=buffer_len) :: buffer + + write(buffer, '(g0)') val + string = trim(buffer) + + end function real_sp_to_string + + + pure function real_dp_to_string(val) result(string) + real(dp), intent(in) :: val + character(len=:), allocatable :: string + integer, parameter :: buffer_len = 128 + character(len=buffer_len) :: buffer + + write(buffer, '(g0)') val + string = trim(buffer) + + end function real_dp_to_string + + +#if WITH_XDP + pure function real_xdp_to_string(val) result(string) + real(xdp), intent(in) :: val + character(len=:), allocatable :: string + integer, parameter :: buffer_len = 128 + character(len=buffer_len) :: buffer + + write(buffer, '(g0)') val + string = trim(buffer) + + end function real_xdp_to_string +#endif + + +#if WITH_QP + pure function real_qp_to_string(val) result(string) + real(qp), intent(in) :: val + character(len=:), allocatable :: string + integer, parameter :: buffer_len = 128 + character(len=buffer_len) :: buffer + + write(buffer, '(g0)') val + string = trim(buffer) + + end function real_qp_to_string +#endif + + + pure function complex_sp_to_string(val) result(string) + complex(sp), intent(in) :: val + character(len=:), allocatable :: string + + string = "("//to_string(real(val))//", "//to_string(aimag(val))//")" + + end function complex_sp_to_string + + + pure function complex_dp_to_string(val) result(string) + complex(dp), intent(in) :: val + character(len=:), allocatable :: string + + string = "("//to_string(real(val))//", "//to_string(aimag(val))//")" + + end function complex_dp_to_string + + +#if WITH_XDP + pure function complex_xdp_to_string(val) result(string) + complex(xdp), intent(in) :: val + character(len=:), allocatable :: string + + string = "("//to_string(real(val))//", "//to_string(aimag(val))//")" + + end function complex_xdp_to_string +#endif + + +#if WITH_QP + pure function complex_qp_to_string(val) result(string) + complex(qp), intent(in) :: val + character(len=:), allocatable :: string + + string = "("//to_string(real(val))//", "//to_string(aimag(val))//")" + + end function complex_qp_to_string +#endif + + + !> Clear error type after it has been handled. + subroutine clear_error(error) + + !> Error handling + type(error_type), intent(inout) :: error + + if (error%stat /= success) then + error%stat = success + end if + + if (allocated(error%message)) then + deallocate(error%message) + end if + + end subroutine clear_error + + + !> Finalizer of the error type, in case the error is not correctly cleared it will + !> be escalated at runtime in a fatal way + subroutine escalate_error(error) + + !> Error handling + type(error_type), intent(inout) :: error + + if (error%stat /= success) then + write(error_unit, '(a)') "[Fatal] Uncaught error" + if (allocated(error%message)) then + write(error_unit, '(a, 1x, i0, *(1x, a))') & + "Code:", error%stat, "Message:", error%message + end if + error stop + end if + + end subroutine escalate_error + + + !> Determine whether a value is not a number without requiring IEEE arithmetic support + elemental function is_nan_sp(val) result(is_nan) + !> Value to check + real(sp), intent(in) :: val + !> Value is not a number + logical :: is_nan + + is_nan = .not.((val <= huge(val) .and. val >= -huge(val)) .or. abs(val) > huge(val)) + end function is_nan_sp + + !> Determine whether a value is not a number without requiring IEEE arithmetic support + elemental function is_nan_dp(val) result(is_nan) + !> Value to check + real(dp), intent(in) :: val + !> Value is not a number + logical :: is_nan + + is_nan = .not.((val <= huge(val) .and. val >= -huge(val)) .or. abs(val) > huge(val)) + end function is_nan_dp + +#if WITH_XDP + !> Determine whether a value is not a number without requiring IEEE arithmetic support + elemental function is_nan_xdp(val) result(is_nan) + !> Value to check + real(xdp), intent(in) :: val + !> Value is not a number + logical :: is_nan + + is_nan = .not.((val <= huge(val) .and. val >= -huge(val)) .or. abs(val) > huge(val)) + end function is_nan_xdp +#endif + +#if WITH_QP + !> Determine whether a value is not a number without requiring IEEE arithmetic support + elemental function is_nan_qp(val) result(is_nan) + !> Value to check + real(qp), intent(in) :: val + !> Value is not a number + logical :: is_nan + + is_nan = .not.((val <= huge(val) .and. val >= -huge(val)) .or. abs(val) > huge(val)) + end function is_nan_qp +#endif + + +end module testdrive diff --git a/regression_test/CMakeLists.txt b/regression_test/CMakeLists.txt index 5cdb69e..86bb909 100644 --- a/regression_test/CMakeLists.txt +++ b/regression_test/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_policy(SET CMP0048 NEW) project(SpecUtilsRegressionTest VERSION 1) -cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5.0 FATAL_ERROR) if( NOT SpecUtils_ENABLE_EQUALITY_CHECKS ) message( FATAL_ERROR "SpecUtils_ENABLE_EQUALITY_CHECKS must be enabled when building regression_test executable" ) diff --git a/src/CubicSpline.cpp b/src/CubicSpline.cpp index b21c0e6..931df3b 100644 --- a/src/CubicSpline.cpp +++ b/src/CubicSpline.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include "SpecUtils/CubicSpline.h" @@ -96,7 +97,12 @@ create_cubic_spline( const std::vector> &data, // TODO: sort input for( size_t i = 0; i < ndata - 1; ++i ) { if( data[i].first >= data[i+1].first ) - throw std::runtime_error( "create_cubic_spline: input data not sorted." ); + { + std::ostringstream strm( "create_cubic_spline: input data not sorted."); + strm << "i: " << i << "; data[i].first: " << data[i].first << "; data[i+1].first: " << data[i+1].first; + throw std::runtime_error( strm.str() ); + } + } // Create tri-diagonal matrix that we will solve for. diff --git a/src/DateTime.cpp b/src/DateTime.cpp index 3423933..14b80ee 100644 --- a/src/DateTime.cpp +++ b/src/DateTime.cpp @@ -140,37 +140,56 @@ namespace SpecUtils }//to_common_string - std::string to_vax_string( const SpecUtils::time_point_t &t ) + std::string to_vax_string( SpecUtils::time_point_t t ) { //Ex. "19-Sep-2014 14:12:01.62" if( is_special(t) ) return ""; - const auto t_as_days = date::floor(t); - const date::year_month_day t_ymd = date::year_month_day{t_as_days}; - const date::hh_mm_ss time_of_day = date::make_time(t - t_as_days); + auto t_as_days = date::floor(t); + date::year_month_day t_ymd = date::year_month_day{t_as_days}; + date::hh_mm_ss time_of_day = date::make_time(t - t_as_days); + + auto microsecs = date::round( time_of_day.subseconds() ); + // We'll round to nearest hundredth; not really sure if rounding, or truncating is the proper thing to do. + int hundreth = static_cast( std::round( microsecs.count() / 10000.0 ) ); //round to nearest hundredth of a second + + // If `microsecs` is 999995 or larger, then `hundreth` will round up to 100, which we dont want, + // so we'll add some microseconds, and recompute things, to get the rounding correct + assert( (hundreth <= 100) && (hundreth >= 0) ); + if( hundreth >= 100 ) + { + t += chrono::microseconds(5000); + t_as_days = date::floor(t); + t_ymd = date::year_month_day{t_as_days}; + time_of_day = date::make_time(t - t_as_days); + microsecs = date::round( time_of_day.subseconds() ); + hundreth = static_cast( std::round( microsecs.count() / 10000.0 ) ); + } + assert( (hundreth <= 99) && (hundreth >= 0) ); + const int year = static_cast( t_ymd.year() ); const int day = static_cast( static_cast( t_ymd.day() ) ); - int hour = static_cast( time_of_day.hours().count() ); + const int hour = static_cast( time_of_day.hours().count() ); const int mins = static_cast( time_of_day.minutes().count() ); const int secs = static_cast( time_of_day.seconds().count() ); const char * const month = month_number_to_Str( static_cast(t_ymd.month()) ); - const auto microsecs = date::round( time_of_day.subseconds() ); - // We'll round to nearest hundredth; not really sure if rounding, or truncating is the proper thing to do. - const int hundreth = static_cast( std::round( microsecs.count() / 10000.0 ) ); //round to nearest hundredth of a second - char buffer[32]; + char buffer[32] = { '\0' }; snprintf( buffer, sizeof(buffer), "%02i-%s-%04i %02i:%02i:%02i.%02i", day, month, year, hour, mins, secs, hundreth ); - - // For development, check if we can get the same answer using the date library - string answer = date::format("%d-%b-%Y %H:%M:%S", date::floor(t)); - char fractional[32]; - snprintf(fractional, sizeof(fractional), ".%02i", hundreth); - answer += fractional; - assert( answer == buffer ); +#ifndef NDEBUG + {// Begin check if we can get the same answer using the date library + // Note though that `t` has been adjusted if it rounds to 100 hundreths of a seconds + string answer = date::format("%d-%b-%Y %H:%M:%S", date::floor(t)); + char fractional[32]; + snprintf(fractional, sizeof(fractional), ".%02i", hundreth); + answer += fractional; + assert( answer == buffer ); + }// End check if we can get the same answer using the date library +#endif #if(PERFORM_DEVELOPER_CHECKS) if( strlen(buffer) != 23 ) diff --git a/src/SpecFile.cpp b/src/SpecFile.cpp index 9fddf0f..97d9fc3 100644 --- a/src/SpecFile.cpp +++ b/src/SpecFile.cpp @@ -45,6 +45,8 @@ #include #include #include +#include // For strerror +#include // For errno #if( PERFORM_DEVELOPER_CHECKS ) #include @@ -85,6 +87,7 @@ // https://eigen.tuxfamily.org/ (MPL2) can probably simply use Eigen::Map #if( defined(__x86_64__) || defined(__i386__) ) #include +#include "SpecFile.h" #else static_assert( 0, "SpecUtils_USE_SIMD is currently only enabled for i386/x86" ); #endif @@ -496,7 +499,7 @@ std::shared_ptr SpecFile::measurement( const size_t n = measurements_.size(); if( num >= n ) - throw std::runtime_error( "SpecFile::measurement(size_t): invalid index" ); + throw std::runtime_error( "SpecFile::measurement(size_t): invalid index: " + std::to_string(num) + "; num_measurements: " + std::to_string(n)); return measurements_[num]; } @@ -721,6 +724,11 @@ const std::string &Measurement::detector_name() const return detector_name_; } +void Measurement::update_detector_name_from_title() +{ + detector_name_ = detector_name_from_remark( title() ); +} + int Measurement::detector_number() const { return detector_number_; @@ -896,14 +904,17 @@ void Measurement::set_occupancy_status( const OccupancyStatus status ) void Measurement::set_detector_name( const std::string &name ) -{ - detector_name_ = name; +{ + detector_name_ = trim_copy(name); } void Measurement::set_detector_number( const int detnum ) { detector_number_ = detnum; + std::ostringstream sstrm; + sstrm << detnum; + set_detector_name(sstrm.str()); } @@ -912,31 +923,35 @@ void Measurement::set_gamma_counts( std::shared_ptr> co { live_time_ = livetime; real_time_ = realtime; + set_gamma_counts(counts); +}//set_gamma_counts + +void Measurement::set_gamma_counts(std::shared_ptr counts) +{ gamma_count_sum_ = 0.0; - - //const size_t oldnchan = gamma_counts_ ? gamma_counts_->size() : 0u; - - if( !counts ) + + // const size_t oldnchan = gamma_counts_ ? gamma_counts_->size() : 0u; + + if (!counts) counts = std::make_shared>(); gamma_counts_ = counts; - for( const float val : *counts ) + for (const float val : *counts) gamma_count_sum_ += val; - - assert( energy_calibration_ ); - + + assert(energy_calibration_); + const auto &cal = *energy_calibration_; const size_t newnchan = gamma_counts_->size(); const size_t calnchan = cal.num_channels(); - - if( (newnchan != calnchan) && (cal.type() != EnergyCalType::LowerChannelEdge) ) + + if ((newnchan != calnchan) && (cal.type() != EnergyCalType::LowerChannelEdge)) { - //We could preserve the old coefficients for Polynomial and FRF, and just create a new - // calibration... it isnt clear if we should do that, or just clear out the calibration... + // We could preserve the old coefficients for Polynomial and FRF, and just create a new + // calibration... it isnt clear if we should do that, or just clear out the calibration... energy_calibration_ = std::make_shared(); } -}//set_gamma_counts - - +} + void Measurement::set_neutron_counts( const std::vector &counts, const float live_time ) { neutron_counts_ = counts; @@ -1110,7 +1125,7 @@ uint32_t Measurement::derived_data_properties() const return derived_data_properties_; } - + double gamma_integral( const std::shared_ptr &hist, const float minEnergy, const float maxEnergy ) { @@ -1592,6 +1607,8 @@ void Measurement::reset() dose_rate_ = exposure_rate_ = -1.0f; pcf_tag_ = '\0'; + source_description_.clear(); + measurement_description_.clear(); location_.reset(); }//void reset() @@ -1636,6 +1653,30 @@ void Measurement::set_pcf_tag( const char tag_char ) pcf_tag_ = tag_char; } + +void Measurement::set_source_description( const std::string &description ) +{ + source_description_ = description; +} + + +const string &Measurement::source_description() const +{ + return source_description_; +} + + +void Measurement::set_measurement_description( const std::string &description ) +{ + measurement_description_ = description; +} + + +const string &Measurement::measurement_description() const +{ + return measurement_description_; +} + void Measurement::combine_gamma_channels( const size_t ncombine ) { @@ -1854,7 +1895,7 @@ void SpecFile::combine_gamma_channels( const size_t ncombine, { std::unique_lock scoped_lock( mutex_ ); - std::shared_ptr m = measurement( meas ); + std::shared_ptr m = unconstify_measurement( meas ); if( !m ) throw runtime_error( "SpecFile::combine_gamma_channels(): measurement" " passed in is not owned by this SpecFile." ); @@ -2048,7 +2089,7 @@ void SpecFile::truncate_gamma_channels( const size_t keep_first_channel, std::unique_lock scoped_lock( mutex_ ); - std::shared_ptr m = measurement( meas ); + std::shared_ptr m = unconstify_measurement( meas ); if( !m ) throw runtime_error( "SpecFile::truncate_gamma_channels(): measurement" " passed in is not owned by this SpecFile." ); @@ -2069,7 +2110,7 @@ void SpecFile::truncate_gamma_channels( const size_t keep_first_channel, -std::shared_ptr SpecFile::measurement( std::shared_ptr meas ) +std::shared_ptr SpecFile::unconstify_measurement( std::shared_ptr meas ) { std::unique_lock scoped_lock( mutex_ ); @@ -2095,7 +2136,7 @@ void SpecFile::set_live_time( const float lt, { std::unique_lock scoped_lock( mutex_ ); - std::shared_ptr ptr = measurement( meas ); + std::shared_ptr ptr = unconstify_measurement( meas ); if( !ptr ) throw runtime_error( "SpecFile::set_live_time(...): measurement" " passed in didnt belong to this SpecFile" ); @@ -2111,7 +2152,7 @@ void SpecFile::set_real_time( const float rt, std::shared_ptr { std::unique_lock scoped_lock( mutex_ ); - std::shared_ptr ptr = measurement( meas ); + std::shared_ptr ptr = unconstify_measurement( meas ); if( !ptr ) throw runtime_error( "SpecFile::set_real_time(...): measurement" " passed in didnt belong to this SpecFile" ); @@ -2385,7 +2426,7 @@ void SpecFile::set_start_time( const time_point_t ×tamp, const std::shared_ptr meas ) { std::unique_lock scoped_lock( mutex_ ); - std::shared_ptr ptr = measurement( meas ); + std::shared_ptr ptr = unconstify_measurement( meas ); if( !ptr ) throw runtime_error( "SpecFile::set_start_time(...): measurement" " passed in didnt belong to this SpecFile" ); @@ -2398,7 +2439,7 @@ void SpecFile::set_remarks( const std::vector &remarks, const std::shared_ptr meas ) { std::unique_lock scoped_lock( mutex_ ); - std::shared_ptr ptr = measurement( meas ); + std::shared_ptr ptr = unconstify_measurement( meas ); if( !ptr ) throw runtime_error( "SpecFile::set_remarks(...): measurement" " passed in didnt belong to this SpecFile" ); @@ -2411,7 +2452,7 @@ void SpecFile::set_source_type( const SourceType type, const std::shared_ptr meas ) { std::unique_lock scoped_lock( mutex_ ); - std::shared_ptr ptr = measurement( meas ); + std::shared_ptr ptr = unconstify_measurement( meas ); if( !ptr ) throw runtime_error( "SpecFile::set_source_type(...): measurement" " passed in didnt belong to this SpecFile" ); @@ -2426,7 +2467,7 @@ void SpecFile::set_position( double longitude, double latitude, const std::shared_ptr meas ) { std::unique_lock scoped_lock( mutex_ ); - std::shared_ptr ptr = measurement( meas ); + std::shared_ptr ptr = unconstify_measurement( meas ); if( !ptr ) throw runtime_error( "SpecFile::set_position(...): measurement" " passed in didnt belong to this SpecFile" ); @@ -2463,7 +2504,7 @@ void SpecFile::set_title( const std::string &title, const std::shared_ptr meas ) { std::unique_lock scoped_lock( mutex_ ); - std::shared_ptr ptr = measurement( meas ); + std::shared_ptr ptr = unconstify_measurement( meas ); if( !ptr ) throw runtime_error( "SpecFile::set_title(...): measurement" " passed in didnt belong to this SpecFile" ); @@ -2480,7 +2521,7 @@ void SpecFile::set_contained_neutrons( const bool contained, const float neutron_live_time ) { std::unique_lock scoped_lock( mutex_ ); - std::shared_ptr ptr = measurement( meas ); + std::shared_ptr ptr = unconstify_measurement( meas ); if( !ptr ) throw runtime_error( "SpecFile::set_containtained_neutrons(...): " "measurement passed in didnt belong to this " @@ -3568,6 +3609,18 @@ void Measurement::equal_enough( const Measurement &lhs, const Measurement &rhs ) + " while RHS is " + std::to_string(rhs.pcf_tag_) ); } + if( lhs.source_description_ != rhs.source_description_ ) + { + issues.push_back( string("Measurement: The source description of LHS is ") + + lhs.source_description_ + " while RHS is " + rhs.source_description_ ); + } + + if( lhs.measurement_description_ != rhs.measurement_description_ ) + { + issues.push_back( string("Measurement: The measurement description of LHS is ") + + lhs.measurement_description_ + " while RHS is " + rhs.measurement_description_ ); + } + if( (!lhs.location_) != (!rhs.location_) ) { issues.push_back( "Measurement: The " @@ -4423,6 +4476,8 @@ const Measurement &Measurement::operator=( const Measurement &rhs ) exposure_rate_ = rhs.exposure_rate_; pcf_tag_ = rhs.pcf_tag_; + source_description_ = rhs.source_description_; + measurement_description_ = rhs.measurement_description_; location_ = rhs.location_; @@ -7219,7 +7274,7 @@ void SpecFile::set_energy_calibration( const std::shared_ptr meas = measurement(constmeas); + std::shared_ptr meas = unconstify_measurement(constmeas); if( !meas ) throw runtime_error( "set_calibration: invalid passed in measurement" ); @@ -7863,6 +7918,22 @@ std::shared_ptr SpecFile::sum_measurements( const std::set &sa if( meas->pcf_tag_ != '\0' ) dataH->pcf_tag_ = meas->pcf_tag_; + string &src_desc = dataH->source_description_; + const string &rhs_src_desc = meas->source_description_; + if( !rhs_src_desc.empty() + && (src_desc.empty() || (src_desc.find(rhs_src_desc) == string::npos)) ) + { + src_desc += (src_desc.empty() ? "" : ",") + rhs_src_desc; + } + + string &meas_desc = dataH->measurement_description_; + const string &rhs_meas_desc = meas->measurement_description_; + if( !rhs_meas_desc.empty() + && (meas_desc.empty() || (meas_desc.find(rhs_meas_desc) == string::npos)) ) + { + meas_desc += (meas_desc.empty() ? "" : ",") + rhs_meas_desc; + } + if( meas->has_gps_info() ) { num_gps += 1; @@ -8750,8 +8821,8 @@ void SpecFile::write_to_file( const std::string filename, samples = sample_numbers_; detectors = set( detector_numbers_.begin(), detector_numbers_.end() ); } - - write_to_file( filename, samples, detectors, format ); + auto newname = SpecUtils::trim_copy(filename); + write_to_file( newname, samples, detectors, format ); }//void write_to_file(...) @@ -8771,7 +8842,11 @@ void SpecFile::write_to_file( const std::string name, #endif if( !output ) - throw runtime_error( "Failed to open file (" + name + ") for writing" ); + { + auto errorStr = std::string(std::strerror(errno)); + throw runtime_error( "Failed to open file (" + name + "): " + errorStr ); + } + write( output, sample_nums, det_nums, format ); }//void write_to_file(...) diff --git a/src/SpecFile_chn.cpp b/src/SpecFile_chn.cpp index d0411ca..db5b7a8 100644 --- a/src/SpecFile_chn.cpp +++ b/src/SpecFile_chn.cpp @@ -518,7 +518,6 @@ bool SpecFile::write_integer_chn( ostream &ostr, set sample_nums, ostr.write( "\0", 1 ); - string detdesc = summed->title_; for( const string &remark : remarks_ ) { diff --git a/src/SpecFile_lis.cpp b/src/SpecFile_lis.cpp index 5644324..6ea195d 100644 --- a/src/SpecFile_lis.cpp +++ b/src/SpecFile_lis.cpp @@ -489,7 +489,7 @@ bool SpecFile::load_from_ortec_listmode( std::istream &input ) } if( strlen(txtdcreption) ) - remarks_.push_back( "Description: " + string(txtdcreption) ); + meas->measurement_description_ = txtdcreption; if( strlen(devaddress) ) remarks_.push_back( "Device Address: " + string(devaddress) ); if( strlen(mcb_type) ) diff --git a/src/SpecFile_mca.cpp b/src/SpecFile_mca.cpp index e153a97..d1b52a6 100644 --- a/src/SpecFile_mca.cpp +++ b/src/SpecFile_mca.cpp @@ -121,7 +121,7 @@ bool SpecFile::load_from_amptek_mca( std::istream &input ) lineinfo = getAmptekMcaLineInfo( filedata, "DESCRIPTION - " ); if( !lineinfo.empty() ) - remarks_.push_back( "Description: " + lineinfo ); + meas->measurement_description_ = lineinfo; float energy_gain = 0.0f; lineinfo = getAmptekMcaLineInfo( filedata, "GAIN - " ); diff --git a/src/SpecFile_n42.cpp b/src/SpecFile_n42.cpp index 3937588..16433c4 100644 --- a/src/SpecFile_n42.cpp +++ b/src/SpecFile_n42.cpp @@ -2629,7 +2629,19 @@ struct N42DecodeHelper2006 meas.pcf_tag_ = tag_str.empty() ? '\0' : tag_str[0]; continue; } - + + if( SpecUtils::istarts_with( remark, "Source:") ) + { + meas.source_description_ = SpecUtils::trim_copy( remark.substr(7) ); + continue; + } + + if( SpecUtils::istarts_with( remark, "Description:") ) + { + meas.measurement_description_ = SpecUtils::trim_copy( remark.substr(12) ); + continue; + } + meas.remarks_.push_back( remark ); if( meas.sample_number_ < 0 ) @@ -3645,6 +3657,12 @@ struct N42DecodeHelper2012 { const string tag_str = SpecUtils::trim_copy( remark.substr(4) ); meas->pcf_tag_ = tag_str.empty() ? '\0' : tag_str[0]; + }else if( SpecUtils::istarts_with( remark, "Source:") ) + { + meas->source_description_ = SpecUtils::trim_copy( remark.substr(7) ); + }else if( SpecUtils::istarts_with( remark, "Description:") ) + { + meas->measurement_description_ = SpecUtils::trim_copy( remark.substr(12) ); }else if( remark.size() ) { meas->remarks_.emplace_back( std::move(remark) ); @@ -4043,6 +4061,12 @@ struct N42DecodeHelper2012 //See notes in equivalent portion of code for the tag const string tag_str = SpecUtils::trim_copy( remark.substr(4) ); meas->pcf_tag_ = tag_str.empty() ? '\0' : tag_str.front(); + }else if( SpecUtils::istarts_with( remark, "Source:") ) + { + meas->source_description_ = SpecUtils::trim_copy( remark.substr(7) ); + }else if( SpecUtils::istarts_with( remark, "Description:") ) + { + meas->measurement_description_ = SpecUtils::trim_copy( remark.substr(12) ); }else if( !remark.empty() ) { meas->remarks_.push_back( remark ); @@ -9331,6 +9355,12 @@ namespace SpecUtils if( pcf_tag_ != '\0' ) remarks.push_back( string("Tag: ") + pcf_tag_ ); + if( !source_description_.empty() ) + remarks.push_back( "Source: " + source_description_ ); + + if( !measurement_description_.empty() ) + remarks.push_back( "Description: " + measurement_description_ ); + bool wroteSurvey = false, wroteName = false, wroteSpeed = false; for( size_t i = 0; i < remarks_.size(); ++i ) diff --git a/src/SpecFile_pcf.cpp b/src/SpecFile_pcf.cpp index 97853e1..019b889 100644 --- a/src/SpecFile_pcf.cpp +++ b/src/SpecFile_pcf.cpp @@ -92,40 +92,60 @@ namespace };//parse_pcf_field - - //returns negative if invalid name - int pcf_det_name_to_dev_pair_index( std::string name, int &col, int &panel, int &mca ) + + /** When passed in a N42-2006 Radiation Portal Monitor (RPM) detector name (e.x., "Aa1", "Ba2", "Ad4", etc), gives the + RPM column, panel, and MCA number corresponding to that name, and returns the starting index for the deviation + pairs in a PCF file. + + @param name The detector name to determine the indexes for. If not a valid N42 name (e.x., valid names are like "Aa1", "Ba2", + "Ad4", etc), then all indexes will be set to -1, and -1 returned. Note that name case does not matter (eg "Aa1" is + equivalent to "aa1"). The name must be either two or three letters long. If the name is only two characters long (e.x., "A1", + "B2"), then the column will be assigned an index of zero. + @param [out] col The RPM column determined from the name. Will be in range of [-1, 3]. + @param [out] panel The RPM panel determined from the name. Will be in [-1, 7]. + @param [out] panel The RPM MCA determined from the name. Will be in [-1, 7]. + + @returns The starting index of deviation pairs in the PCF file deviation pairs array. That is, + `col*(8*8*2*20) + panel*(8*2*20) + mca*(2*20)`. + Will be negative one if an non-RPM detector name is passed in. + */ + int pcf_det_name_to_dev_pair_index(std::string name, int &col, int &panel, int &mca) { col = panel = mca = -1; - - //loop over columns (2 uncompressed, or 4 compressed) //col 1 is Aa1, col two is Ba1 - // loop over panels (8) //Aa1, Ab1, Ac1 - // loop over MCAs (8) //Aa1, Aa2, Aa3, etc - // loop over deviation pairs (20) - // energy (float uncompressed, or int16_t compressed) - // offset (float uncompressed, or int16_t compressed) - - if( name.size() < 2 || name.size() > 3 - || name[name.size()-1] < '1' || name[name.size()-1] > '8' ) + + //Note: PCF file specification uses the following definition + // loop over columns (2 uncompressed, or 4 compressed) //col 1 is Aa1, col two is Ba1 + // loop over panels (8) //Aa1, Ab1, Ac1 + // loop over MCAs (8) //Aa1, Aa2, Aa3, etc + // loop over deviation pairs (20) + // energy (float uncompressed, or int16_t compressed) + // offset (float uncompressed, or int16_t compressed) + // However, this differs from the N42-2006 specification that the first letter specifies the + // panel, the second the column. + if( (name.size() < 2) || (name.size() > 3) || (name.back() < '1') || (name.back() > '8') ) { return -1; } - - SpecUtils::to_lower_ascii( name ); - - const char col_char = ((name.size()==3) ? name[1] : 'a'); + + SpecUtils::to_lower_ascii(name); + + const char col_char = ((name.size() >= 3) ? name[1] : 'a'); const char panel_char = name[0]; - const char mca_char = name[name.size()-1]; - - if( col_char < 'a' || col_char > 'd' || panel_char < 'a' || panel_char > 'h' ) + const char mca_char = name[name.size() - 1]; + + if( (col_char < 'a') || (col_char > 'd') + || (panel_char < 'a') || (panel_char > 'h') + || (mca_char < '1') || (mca_char > '8') ) + { return -1; + } col = col_char - 'a'; panel = panel_char - 'a'; mca = mca_char - '1'; - - return col*(8*8*2*20) + panel*(8*2*20) + mca*(2*20); - } + + return col * (8 * 8 * 2 * 20) + panel * (8 * 2 * 20) + mca * (2 * 20); + }//int pcf_det_name_to_dev_pair_index(std::string name, int &col, int &panel, int &mca) int pcf_det_name_to_dev_pair_index( std::string name ) @@ -139,6 +159,33 @@ namespace namespace SpecUtils { + int pcf_det_name_to_dev_pair_index(std::string name, int &col, int &panel, int &mca) + { + return ::pcf_det_name_to_dev_pair_index(name, col, panel, mca); + } + +int Measurement::rpm_panel_number() const +{ + int col, panel, mca; + pcf_det_name_to_dev_pair_index( detector_name_, col, panel, mca ); + return panel; +} + + +int Measurement::rpm_column_number() const +{ + int col, panel, mca; + pcf_det_name_to_dev_pair_index( detector_name_, col, panel, mca ); + return col; +} + + +int Measurement::rpm_mca_number() const +{ + int col, panel, mca; + pcf_det_name_to_dev_pair_index( detector_name_, col, panel, mca ); + return mca; +} /** Gives the maximum number of channels any spectrum in the file will need to write to PCF file (rounded up to the nearest multiple of 64 channels), as well as a sets a pointer to the lower channel energies to write to the first record, but only if lower channel energy @@ -416,16 +463,19 @@ void SpecFile::write_deviation_pairs_to_pcf( std::ostream &ostr ) const if( meas->gamma_counts_ && !meas->gamma_counts_->empty()) { has_some_dev_pairs |= (!meas->deviation_pairs().empty()); - if( name.size() >= 3 - && (name[1]=='c' || name[1]=='C' || name[1]=='d' || name[1]=='D') - && (name[0]>='a' && name[0]<='g') - && (name[2]>'0' && name[2]<'9') ) - need_compress_pairs = true; + + int col, panel, mca; + const int dev_pair_index = pcf_det_name_to_dev_pair_index( name, col, panel, mca ); + + if( dev_pair_index >= 0 ) + need_compress_pairs |= (col >= 2); dev_pairs[name] = meas->deviation_pairs(); - } + }//if( we have gamma counts for this measurement ) }//for( size_t i = 0; !detnames.empty() && i < measurements_.size(); ++i ) + need_compress_pairs |= (dev_pairs.size() > 128); + //cerr << "Put " << dev_pairs.size() << " dev pairs in, with " << detnames.size() // << " detnames remaining. has_some_dev_pairs=" << has_some_dev_pairs << endl; @@ -467,7 +517,7 @@ void SpecFile::write_deviation_pairs_to_pcf( std::ostream &ostr ) const const string &name = det_devs.first; const auto &pairs = det_devs.second; - int index = pcf_det_name_to_dev_pair_index( name ); + int index = ::pcf_det_name_to_dev_pair_index( name ); if( index < 0 || (index+39) > maxnvals ) { @@ -486,6 +536,10 @@ void SpecFile::write_deviation_pairs_to_pcf( std::ostream &ostr ) const { const size_t bytepos = (index + 2*i)*valsize; + assert( (bytepos + 2*valsize) <= nDevBytes ); //Should never happen here, since `name` is a valid N42 detector name if we are here + if( (bytepos + 2*valsize) > nDevBytes ) + continue; + if( need_compress_pairs ) { #if( defined(_MSC_VER) && _MSC_VER <= 1700 ) @@ -534,10 +588,14 @@ void SpecFile::write_deviation_pairs_to_pcf( std::ostream &ostr ) const if( !written_index.count(index) ) { const auto &dpairs = dev_pairs[name]; - for( size_t i = 0; i < dpairs.size() && i < 20; ++i ) + for( size_t i = 0; (i < dpairs.size()) && (i < 20); ++i ) { const size_t bytepos = (index + 2*i)*valsize; + assert( (bytepos + 2*valsize) <= nDevBytes ); //Should never happen + if( (bytepos + 2*valsize) > nDevBytes ) + continue; + if( need_compress_pairs ) { #if( defined(_MSC_VER) && _MSC_VER <= 1700 ) @@ -908,14 +966,8 @@ bool SpecFile::write_pcf( std::ostream &outputstrm ) const trim( spectrum_title ); SpecUtils::ireplace_all( spectrum_title, " ", " " ); - string source_list, spectrum_desc; - for( const string &remark : meas->remarks() ) - { - if( SpecUtils::istarts_with(remark, "Description:") ) - spectrum_desc = remark.substr(12); - else if( SpecUtils::istarts_with(remark, "Source:") ) - source_list = remark.substr(7); - }//for( const string &remark : meas->remarks() ) + string source_list = meas->source_description_; + string spectrum_desc = meas->measurement_description_; SpecUtils::trim( spectrum_title ); SpecUtils::trim( spectrum_desc ); @@ -1179,6 +1231,7 @@ bool SpecFile::load_from_pcf( std::istream &input ) // if this is the case have_deviation_pairs = false; + // col_index? for( int row_index = 0; row_index < (compressed_devpair ? 4 : 2); ++row_index ) { for( int panel_index = 0; panel_index < 8; ++panel_index ) @@ -1200,6 +1253,8 @@ bool SpecFile::load_from_pcf( std::istream &input ) memcpy( vals, &(dev_pair_bytes[byte_pos]), 80 ); for( int i = 0; i < 20; ++i ) { + // extract to virtual method add_devpair(), extension class can save off col, panel, mcs + // maybe save in lookup table? tuple last_nonzero = (vals[2*i] || vals[2*i+1]) ? i+1 : last_nonzero; devpairs.push_back( pair(vals[2*i],vals[2*i+1]) ); } @@ -1471,7 +1526,7 @@ bool SpecFile::load_from_pcf( std::istream &input ) for( float &f : *channel_data ) //This should probably be vectorized or something ensure_valid_float( f ); - auto meas = std::make_shared(); + auto meas = make_measurement(); const istream::pos_type specend = input.tellg(); const size_t speclen = static_cast( 0 + specend - specstart ); @@ -1685,14 +1740,10 @@ bool SpecFile::load_from_pcf( std::istream &input ) //else meas->source_type_ = SourceType::Unknown meas->title_ = spectrum_title; - - if( !spectrum_desc.empty() ) - meas->remarks_.push_back( "Description: " + spectrum_desc ); - - if( !source_list.empty() ) - meas->remarks_.push_back( "Source: " + source_list ); - + meas->measurement_description_ = spectrum_desc; + meas->source_description_ = source_list; meas->pcf_tag_ = character_tag; + if( character_tag == '-' ) { meas->occupied_ = OccupancyStatus::NotOccupied; @@ -1820,7 +1871,7 @@ bool SpecFile::load_from_pcf( std::istream &input ) if( measurements_[first_sample]->sample_number_ >= 0 ) break; - if( first_sample >= measurements_.size() ) //SHouldnt ever happen + if( first_sample >= measurements_.size() ) //Shouldnt ever happen { #if( PERFORM_DEVELOPER_CHECKS && !SpecUtils_BUILD_FUZZING_TESTS) log_developer_error( __func__, "Logic error: someSamplesHaveNumbers is true, but could find meas now!" ); @@ -1910,15 +1961,23 @@ bool SpecFile::load_from_pcf( std::istream &input ) if( have_deviation_pairs ) { - bool used_deviation_pairs[4][8][8] = {}; //iniitalizes tp zero/false + bool used_deviation_pairs[4][8][8] = { false }; //initializes to zero/false //Assign deviation pairs to detectors with names like "Aa1", "Ab2", etc. for( const string &name : detector_names ) { int col, panel, mca; pcf_det_name_to_dev_pair_index( name, col, panel, mca ); - if( col < 0 || panel < 0 || mca < 0 || col > (compressed_devpair ? 1 : 3) || panel > 7 || mca > 7 ) + + assert( (col <= 3) && (col >= -1) ); + assert( (panel <= 7) && (panel >= -1) ); + assert( (mca <= 7) && (mca >= -1) ); + + if( (col < 0) || (panel < 0) || (mca < 0) + || (col > (compressed_devpair ? 3 : 1)) || (panel > 7) || (mca > 7) ) + { continue; + } det_name_to_devs[name] = deviation_pairs[col][panel][mca]; used_deviation_pairs[col][panel][mca] = true; diff --git a/src/SpecFile_template.cpp b/src/SpecFile_template.cpp index 50c053f..c35be1e 100644 --- a/src/SpecFile_template.cpp +++ b/src/SpecFile_template.cpp @@ -271,7 +271,7 @@ namespace SpecUtils return value1 % value2; }); - srand(time(NULL)); // This is important for the random numbers to work correctly + srand( static_cast(time(NULL)) ); // This is important for the random numbers to work correctly env.add_callback("rand", 2, [](Arguments& args) { int value1 = args.at(0)->get(); diff --git a/unit_tests/CMakeLists.txt b/unit_tests/CMakeLists.txt index 6588ba2..bdf4c79 100644 --- a/unit_tests/CMakeLists.txt +++ b/unit_tests/CMakeLists.txt @@ -1,9 +1,7 @@ cmake_policy(SET CMP0048 NEW) project(SpecUtilsTests VERSION 1) -cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) - -enable_testing() +cmake_minimum_required(VERSION VERSION 3.1...3.29 FATAL_ERROR) option( ADD_TEST_SPEC_DIR "Base Directory containing other directories that have valid spectrum files for test opening" "" ) set( testdir "${CMAKE_CURRENT_SOURCE_DIR}" ) @@ -30,50 +28,27 @@ if( PERFORM_DEVELOPER_CHECKS ) endif( PERFORM_DEVELOPER_CHECKS ) -# We'll look for an installed version of doctest first -find_package( doctest QUIET ) - -# If we didnt find the docktest package, see if the header is somewhere in the -# standard search path, and if so, use that -if( NOT doctest_FOUND ) - # TODO: test this little part - find_file( has_doctest "docktest.h" ) - if( has_doctest ) - set( doctest_FOUND YES ) - get_filename_component( DOCTEST_INCLUDE_DIR ${has_doctest} DIRECTORY ) - endif( has_doctest ) -endif( NOT doctest_FOUND ) - - -# But if we havent fount docktest, we'll Fetch it -if( NOT doctest_FOUND ) - include(FetchContent) - - FetchContent_Declare( - doctest - URL https://github.com/doctest/doctest/releases/download/v2.4.11/doctest.h - URL_HASH SHA256=44FAA038E9C3F9728EFBDA143748D01124EA0A27F4BF78F35A15D8FAB2E039FB - DOWNLOAD_NO_EXTRACT TRUE - ) - - FetchContent_GetProperties( doctest ) - FetchContent_MakeAvailable( doctest ) - - set( DOCTEST_INCLUDE_DIR ${doctest_SOURCE_DIR} CACHE INTERNAL "Path to include folder for doctest") -endif( NOT doctest_FOUND ) - - -# Make include for Doctest -include_directories( ${DOCTEST_INCLUDE_DIR} ) - # Set some command line arguments that all/most of the tests will use set( COMMON_TEST_ARGS --log_level=test_suite --report_level=detailed --catch_system_errors=yes ) -set( DATA_DIR_ARGS --indir=\\"${CMAKE_CURRENT_SOURCE_DIR}/test_data\\" ) +set( DATA_DIR_ARGS --indir=${CMAKE_CURRENT_SOURCE_DIR}/test_data ) if( CMAKE_GENERATOR STREQUAL "Xcode" ) list( APPEND COMMON_TEST_ARGS --no-colors=1 ) endif( CMAKE_GENERATOR STREQUAL "Xcode" ) +#message( "Args: ${COMMON_TEST_ARGS}") + + +add_executable( test_spec_file test_spec_file.cpp ) +target_link_libraries( test_spec_file PRIVATE SpecUtils ) +set_target_properties( test_spec_file PROPERTIES + CXX_STANDARD 20 + CXX_STANDARD_REQUIRED YES + CXX_EXTENSIONS YES ) + +add_test( NAME test_spec_file + COMMAND $ +) add_executable( test_energy_calibration test_energy_calibration.cpp ) target_link_libraries( test_energy_calibration PRIVATE SpecUtils ) @@ -135,7 +110,7 @@ add_executable( test_string_functions test_string_functions.cpp ) target_link_libraries( test_string_functions PRIVATE SpecUtils ) set_target_properties( test_string_functions PROPERTIES CXX_STANDARD 14 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO ) add_test( - NAME TestUtilityStringFunctions + NAME test_string_functions COMMAND $ ${COMMON_TEST_ARGS} -- ${DATA_DIR_ARGS} WORKING_DIRECTORY ${test_data_dir} ) diff --git a/unit_tests/doctest.h b/unit_tests/doctest.h new file mode 100644 index 0000000..5c754cd --- /dev/null +++ b/unit_tests/doctest.h @@ -0,0 +1,7106 @@ +// ====================================================================== lgtm [cpp/missing-header-guard] +// == DO NOT MODIFY THIS FILE BY HAND - IT IS AUTO GENERATED BY CMAKE! == +// ====================================================================== +// +// doctest.h - the lightest feature-rich C++ single-header testing framework for unit tests and TDD +// +// Copyright (c) 2016-2023 Viktor Kirilov +// +// Distributed under the MIT Software License +// See accompanying file LICENSE.txt or copy at +// https://opensource.org/licenses/MIT +// +// The documentation can be found at the library's page: +// https://github.com/doctest/doctest/blob/master/doc/markdown/readme.md +// +// ================================================================================================= +// ================================================================================================= +// ================================================================================================= +// +// The library is heavily influenced by Catch - https://github.com/catchorg/Catch2 +// which uses the Boost Software License - Version 1.0 +// see here - https://github.com/catchorg/Catch2/blob/master/LICENSE.txt +// +// The concept of subcases (sections in Catch) and expression decomposition are from there. +// Some parts of the code are taken directly: +// - stringification - the detection of "ostream& operator<<(ostream&, const T&)" and StringMaker<> +// - the Approx() helper class for floating point comparison +// - colors in the console +// - breaking into a debugger +// - signal / SEH handling +// - timer +// - XmlWriter class - thanks to Phil Nash for allowing the direct reuse (AKA copy/paste) +// +// The expression decomposing templates are taken from lest - https://github.com/martinmoene/lest +// which uses the Boost Software License - Version 1.0 +// see here - https://github.com/martinmoene/lest/blob/master/LICENSE.txt +// +// ================================================================================================= +// ================================================================================================= +// ================================================================================================= + +#ifndef DOCTEST_LIBRARY_INCLUDED +#define DOCTEST_LIBRARY_INCLUDED + +// ================================================================================================= +// == VERSION ====================================================================================== +// ================================================================================================= + +#define DOCTEST_VERSION_MAJOR 2 +#define DOCTEST_VERSION_MINOR 4 +#define DOCTEST_VERSION_PATCH 11 + +// util we need here +#define DOCTEST_TOSTR_IMPL(x) #x +#define DOCTEST_TOSTR(x) DOCTEST_TOSTR_IMPL(x) + +#define DOCTEST_VERSION_STR \ + DOCTEST_TOSTR(DOCTEST_VERSION_MAJOR) "." \ + DOCTEST_TOSTR(DOCTEST_VERSION_MINOR) "." \ + DOCTEST_TOSTR(DOCTEST_VERSION_PATCH) + +#define DOCTEST_VERSION \ + (DOCTEST_VERSION_MAJOR * 10000 + DOCTEST_VERSION_MINOR * 100 + DOCTEST_VERSION_PATCH) + +// ================================================================================================= +// == COMPILER VERSION ============================================================================= +// ================================================================================================= + +// ideas for the version stuff are taken from here: https://github.com/cxxstuff/cxx_detect + +#ifdef _MSC_VER +#define DOCTEST_CPLUSPLUS _MSVC_LANG +#else +#define DOCTEST_CPLUSPLUS __cplusplus +#endif + +#define DOCTEST_COMPILER(MAJOR, MINOR, PATCH) ((MAJOR)*10000000 + (MINOR)*100000 + (PATCH)) + +// GCC/Clang and GCC/MSVC are mutually exclusive, but Clang/MSVC are not because of clang-cl... +#if defined(_MSC_VER) && defined(_MSC_FULL_VER) +#if _MSC_VER == _MSC_FULL_VER / 10000 +#define DOCTEST_MSVC DOCTEST_COMPILER(_MSC_VER / 100, _MSC_VER % 100, _MSC_FULL_VER % 10000) +#else // MSVC +#define DOCTEST_MSVC \ + DOCTEST_COMPILER(_MSC_VER / 100, (_MSC_FULL_VER / 100000) % 100, _MSC_FULL_VER % 100000) +#endif // MSVC +#endif // MSVC +#if defined(__clang__) && defined(__clang_minor__) && defined(__clang_patchlevel__) +#define DOCTEST_CLANG DOCTEST_COMPILER(__clang_major__, __clang_minor__, __clang_patchlevel__) +#elif defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) && \ + !defined(__INTEL_COMPILER) +#define DOCTEST_GCC DOCTEST_COMPILER(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#endif // GCC +#if defined(__INTEL_COMPILER) +#define DOCTEST_ICC DOCTEST_COMPILER(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) +#endif // ICC + +#ifndef DOCTEST_MSVC +#define DOCTEST_MSVC 0 +#endif // DOCTEST_MSVC +#ifndef DOCTEST_CLANG +#define DOCTEST_CLANG 0 +#endif // DOCTEST_CLANG +#ifndef DOCTEST_GCC +#define DOCTEST_GCC 0 +#endif // DOCTEST_GCC +#ifndef DOCTEST_ICC +#define DOCTEST_ICC 0 +#endif // DOCTEST_ICC + +// ================================================================================================= +// == COMPILER WARNINGS HELPERS ==================================================================== +// ================================================================================================= + +#if DOCTEST_CLANG && !DOCTEST_ICC +#define DOCTEST_PRAGMA_TO_STR(x) _Pragma(#x) +#define DOCTEST_CLANG_SUPPRESS_WARNING_PUSH _Pragma("clang diagnostic push") +#define DOCTEST_CLANG_SUPPRESS_WARNING(w) DOCTEST_PRAGMA_TO_STR(clang diagnostic ignored w) +#define DOCTEST_CLANG_SUPPRESS_WARNING_POP _Pragma("clang diagnostic pop") +#define DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH(w) \ + DOCTEST_CLANG_SUPPRESS_WARNING_PUSH DOCTEST_CLANG_SUPPRESS_WARNING(w) +#else // DOCTEST_CLANG +#define DOCTEST_CLANG_SUPPRESS_WARNING_PUSH +#define DOCTEST_CLANG_SUPPRESS_WARNING(w) +#define DOCTEST_CLANG_SUPPRESS_WARNING_POP +#define DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH(w) +#endif // DOCTEST_CLANG + +#if DOCTEST_GCC +#define DOCTEST_PRAGMA_TO_STR(x) _Pragma(#x) +#define DOCTEST_GCC_SUPPRESS_WARNING_PUSH _Pragma("GCC diagnostic push") +#define DOCTEST_GCC_SUPPRESS_WARNING(w) DOCTEST_PRAGMA_TO_STR(GCC diagnostic ignored w) +#define DOCTEST_GCC_SUPPRESS_WARNING_POP _Pragma("GCC diagnostic pop") +#define DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH(w) \ + DOCTEST_GCC_SUPPRESS_WARNING_PUSH DOCTEST_GCC_SUPPRESS_WARNING(w) +#else // DOCTEST_GCC +#define DOCTEST_GCC_SUPPRESS_WARNING_PUSH +#define DOCTEST_GCC_SUPPRESS_WARNING(w) +#define DOCTEST_GCC_SUPPRESS_WARNING_POP +#define DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH(w) +#endif // DOCTEST_GCC + +#if DOCTEST_MSVC +#define DOCTEST_MSVC_SUPPRESS_WARNING_PUSH __pragma(warning(push)) +#define DOCTEST_MSVC_SUPPRESS_WARNING(w) __pragma(warning(disable : w)) +#define DOCTEST_MSVC_SUPPRESS_WARNING_POP __pragma(warning(pop)) +#define DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(w) \ + DOCTEST_MSVC_SUPPRESS_WARNING_PUSH DOCTEST_MSVC_SUPPRESS_WARNING(w) +#else // DOCTEST_MSVC +#define DOCTEST_MSVC_SUPPRESS_WARNING_PUSH +#define DOCTEST_MSVC_SUPPRESS_WARNING(w) +#define DOCTEST_MSVC_SUPPRESS_WARNING_POP +#define DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(w) +#endif // DOCTEST_MSVC + +// ================================================================================================= +// == COMPILER WARNINGS ============================================================================ +// ================================================================================================= + +// both the header and the implementation suppress all of these, +// so it only makes sense to aggregate them like so +#define DOCTEST_SUPPRESS_COMMON_WARNINGS_PUSH \ + DOCTEST_CLANG_SUPPRESS_WARNING_PUSH \ + DOCTEST_CLANG_SUPPRESS_WARNING("-Wunknown-pragmas") \ + DOCTEST_CLANG_SUPPRESS_WARNING("-Wweak-vtables") \ + DOCTEST_CLANG_SUPPRESS_WARNING("-Wpadded") \ + DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-prototypes") \ + DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat") \ + DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat-pedantic") \ + \ + DOCTEST_GCC_SUPPRESS_WARNING_PUSH \ + DOCTEST_GCC_SUPPRESS_WARNING("-Wunknown-pragmas") \ + DOCTEST_GCC_SUPPRESS_WARNING("-Wpragmas") \ + DOCTEST_GCC_SUPPRESS_WARNING("-Weffc++") \ + DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-overflow") \ + DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-aliasing") \ + DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-declarations") \ + DOCTEST_GCC_SUPPRESS_WARNING("-Wuseless-cast") \ + DOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept") \ + \ + DOCTEST_MSVC_SUPPRESS_WARNING_PUSH \ + /* these 4 also disabled globally via cmake: */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4514) /* unreferenced inline function has been removed */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4571) /* SEH related */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4710) /* function not inlined */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4711) /* function selected for inline expansion*/ \ + /* common ones */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4616) /* invalid compiler warning */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4619) /* invalid compiler warning */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4996) /* The compiler encountered a deprecated declaration */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4706) /* assignment within conditional expression */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4512) /* 'class' : assignment operator could not be generated */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4127) /* conditional expression is constant */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4820) /* padding */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4625) /* copy constructor was implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4626) /* assignment operator was implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5027) /* move assignment operator implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5026) /* move constructor was implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4640) /* construction of local static object not thread-safe */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5045) /* Spectre mitigation for memory load */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5264) /* 'variable-name': 'const' variable is not used */ \ + /* static analysis */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(26439) /* Function may not throw. Declare it 'noexcept' */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(26495) /* Always initialize a member variable */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(26451) /* Arithmetic overflow ... */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(26444) /* Avoid unnamed objects with custom ctor and dtor... */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(26812) /* Prefer 'enum class' over 'enum' */ + +#define DOCTEST_SUPPRESS_COMMON_WARNINGS_POP \ + DOCTEST_CLANG_SUPPRESS_WARNING_POP \ + DOCTEST_GCC_SUPPRESS_WARNING_POP \ + DOCTEST_MSVC_SUPPRESS_WARNING_POP + +DOCTEST_SUPPRESS_COMMON_WARNINGS_PUSH + +DOCTEST_CLANG_SUPPRESS_WARNING_PUSH +DOCTEST_CLANG_SUPPRESS_WARNING("-Wnon-virtual-dtor") +DOCTEST_CLANG_SUPPRESS_WARNING("-Wdeprecated") + +DOCTEST_GCC_SUPPRESS_WARNING_PUSH +DOCTEST_GCC_SUPPRESS_WARNING("-Wctor-dtor-privacy") +DOCTEST_GCC_SUPPRESS_WARNING("-Wnon-virtual-dtor") +DOCTEST_GCC_SUPPRESS_WARNING("-Wsign-promo") + +DOCTEST_MSVC_SUPPRESS_WARNING_PUSH +DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly defined as deleted + +#define DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN \ + DOCTEST_MSVC_SUPPRESS_WARNING_PUSH \ + DOCTEST_MSVC_SUPPRESS_WARNING(4548) /* before comma no effect; expected side - effect */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4265) /* virtual functions, but destructor is not virtual */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4986) /* exception specification does not match previous */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4350) /* 'member1' called instead of 'member2' */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4668) /* not defined as a preprocessor macro */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4365) /* signed/unsigned mismatch */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4774) /* format string not a string literal */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4820) /* padding */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4625) /* copy constructor was implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4626) /* assignment operator was implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5027) /* move assignment operator implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5026) /* move constructor was implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4623) /* default constructor was implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5039) /* pointer to pot. throwing function passed to extern C */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5045) /* Spectre mitigation for memory load */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5105) /* macro producing 'defined' has undefined behavior */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4738) /* storing float result in memory, loss of performance */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5262) /* implicit fall-through */ + +#define DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END DOCTEST_MSVC_SUPPRESS_WARNING_POP + +// ================================================================================================= +// == FEATURE DETECTION ============================================================================ +// ================================================================================================= + +// general compiler feature support table: https://en.cppreference.com/w/cpp/compiler_support +// MSVC C++11 feature support table: https://msdn.microsoft.com/en-us/library/hh567368.aspx +// GCC C++11 feature support table: https://gcc.gnu.org/projects/cxx-status.html +// MSVC version table: +// https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#Internal_version_numbering +// MSVC++ 14.3 (17) _MSC_VER == 1930 (Visual Studio 2022) +// MSVC++ 14.2 (16) _MSC_VER == 1920 (Visual Studio 2019) +// MSVC++ 14.1 (15) _MSC_VER == 1910 (Visual Studio 2017) +// MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015) +// MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013) +// MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012) +// MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010) +// MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008) +// MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005) + +// Universal Windows Platform support +#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) +#define DOCTEST_CONFIG_NO_WINDOWS_SEH +#endif // WINAPI_FAMILY +#if DOCTEST_MSVC && !defined(DOCTEST_CONFIG_WINDOWS_SEH) +#define DOCTEST_CONFIG_WINDOWS_SEH +#endif // MSVC +#if defined(DOCTEST_CONFIG_NO_WINDOWS_SEH) && defined(DOCTEST_CONFIG_WINDOWS_SEH) +#undef DOCTEST_CONFIG_WINDOWS_SEH +#endif // DOCTEST_CONFIG_NO_WINDOWS_SEH + +#if !defined(_WIN32) && !defined(__QNX__) && !defined(DOCTEST_CONFIG_POSIX_SIGNALS) && \ + !defined(__EMSCRIPTEN__) && !defined(__wasi__) +#define DOCTEST_CONFIG_POSIX_SIGNALS +#endif // _WIN32 +#if defined(DOCTEST_CONFIG_NO_POSIX_SIGNALS) && defined(DOCTEST_CONFIG_POSIX_SIGNALS) +#undef DOCTEST_CONFIG_POSIX_SIGNALS +#endif // DOCTEST_CONFIG_NO_POSIX_SIGNALS + +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS +#if !defined(__cpp_exceptions) && !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) \ + || defined(__wasi__) +#define DOCTEST_CONFIG_NO_EXCEPTIONS +#endif // no exceptions +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS + +#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS +#define DOCTEST_CONFIG_NO_EXCEPTIONS +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS + +#if defined(DOCTEST_CONFIG_NO_EXCEPTIONS) && !defined(DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS) +#define DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS && !DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS + +#ifdef __wasi__ +#define DOCTEST_CONFIG_NO_MULTITHREADING +#endif + +#if defined(DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN) && !defined(DOCTEST_CONFIG_IMPLEMENT) +#define DOCTEST_CONFIG_IMPLEMENT +#endif // DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN + +#if defined(_WIN32) || defined(__CYGWIN__) +#if DOCTEST_MSVC +#define DOCTEST_SYMBOL_EXPORT __declspec(dllexport) +#define DOCTEST_SYMBOL_IMPORT __declspec(dllimport) +#else // MSVC +#define DOCTEST_SYMBOL_EXPORT __attribute__((dllexport)) +#define DOCTEST_SYMBOL_IMPORT __attribute__((dllimport)) +#endif // MSVC +#else // _WIN32 +#define DOCTEST_SYMBOL_EXPORT __attribute__((visibility("default"))) +#define DOCTEST_SYMBOL_IMPORT +#endif // _WIN32 + +#ifdef DOCTEST_CONFIG_IMPLEMENTATION_IN_DLL +#ifdef DOCTEST_CONFIG_IMPLEMENT +#define DOCTEST_INTERFACE DOCTEST_SYMBOL_EXPORT +#else // DOCTEST_CONFIG_IMPLEMENT +#define DOCTEST_INTERFACE DOCTEST_SYMBOL_IMPORT +#endif // DOCTEST_CONFIG_IMPLEMENT +#else // DOCTEST_CONFIG_IMPLEMENTATION_IN_DLL +#define DOCTEST_INTERFACE +#endif // DOCTEST_CONFIG_IMPLEMENTATION_IN_DLL + +// needed for extern template instantiations +// see https://github.com/fmtlib/fmt/issues/2228 +#if DOCTEST_MSVC +#define DOCTEST_INTERFACE_DECL +#define DOCTEST_INTERFACE_DEF DOCTEST_INTERFACE +#else // DOCTEST_MSVC +#define DOCTEST_INTERFACE_DECL DOCTEST_INTERFACE +#define DOCTEST_INTERFACE_DEF +#endif // DOCTEST_MSVC + +#define DOCTEST_EMPTY + +#if DOCTEST_MSVC +#define DOCTEST_NOINLINE __declspec(noinline) +#define DOCTEST_UNUSED +#define DOCTEST_ALIGNMENT(x) +#elif DOCTEST_CLANG && DOCTEST_CLANG < DOCTEST_COMPILER(3, 5, 0) +#define DOCTEST_NOINLINE +#define DOCTEST_UNUSED +#define DOCTEST_ALIGNMENT(x) +#else +#define DOCTEST_NOINLINE __attribute__((noinline)) +#define DOCTEST_UNUSED __attribute__((unused)) +#define DOCTEST_ALIGNMENT(x) __attribute__((aligned(x))) +#endif + +#ifdef DOCTEST_CONFIG_NO_CONTRADICTING_INLINE +#define DOCTEST_INLINE_NOINLINE inline +#else +#define DOCTEST_INLINE_NOINLINE inline DOCTEST_NOINLINE +#endif + +#ifndef DOCTEST_NORETURN +#if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0)) +#define DOCTEST_NORETURN +#else // DOCTEST_MSVC +#define DOCTEST_NORETURN [[noreturn]] +#endif // DOCTEST_MSVC +#endif // DOCTEST_NORETURN + +#ifndef DOCTEST_NOEXCEPT +#if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0)) +#define DOCTEST_NOEXCEPT +#else // DOCTEST_MSVC +#define DOCTEST_NOEXCEPT noexcept +#endif // DOCTEST_MSVC +#endif // DOCTEST_NOEXCEPT + +#ifndef DOCTEST_CONSTEXPR +#if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0)) +#define DOCTEST_CONSTEXPR const +#define DOCTEST_CONSTEXPR_FUNC inline +#else // DOCTEST_MSVC +#define DOCTEST_CONSTEXPR constexpr +#define DOCTEST_CONSTEXPR_FUNC constexpr +#endif // DOCTEST_MSVC +#endif // DOCTEST_CONSTEXPR + +#ifndef DOCTEST_NO_SANITIZE_INTEGER +#if DOCTEST_CLANG >= DOCTEST_COMPILER(3, 7, 0) +#define DOCTEST_NO_SANITIZE_INTEGER __attribute__((no_sanitize("integer"))) +#else +#define DOCTEST_NO_SANITIZE_INTEGER +#endif +#endif // DOCTEST_NO_SANITIZE_INTEGER + +// ================================================================================================= +// == FEATURE DETECTION END ======================================================================== +// ================================================================================================= + +#define DOCTEST_DECLARE_INTERFACE(name) \ + virtual ~name(); \ + name() = default; \ + name(const name&) = delete; \ + name(name&&) = delete; \ + name& operator=(const name&) = delete; \ + name& operator=(name&&) = delete; + +#define DOCTEST_DEFINE_INTERFACE(name) \ + name::~name() = default; + +// internal macros for string concatenation and anonymous variable name generation +#define DOCTEST_CAT_IMPL(s1, s2) s1##s2 +#define DOCTEST_CAT(s1, s2) DOCTEST_CAT_IMPL(s1, s2) +#ifdef __COUNTER__ // not standard and may be missing for some compilers +#define DOCTEST_ANONYMOUS(x) DOCTEST_CAT(x, __COUNTER__) +#else // __COUNTER__ +#define DOCTEST_ANONYMOUS(x) DOCTEST_CAT(x, __LINE__) +#endif // __COUNTER__ + +#ifndef DOCTEST_CONFIG_ASSERTION_PARAMETERS_BY_VALUE +#define DOCTEST_REF_WRAP(x) x& +#else // DOCTEST_CONFIG_ASSERTION_PARAMETERS_BY_VALUE +#define DOCTEST_REF_WRAP(x) x +#endif // DOCTEST_CONFIG_ASSERTION_PARAMETERS_BY_VALUE + +// not using __APPLE__ because... this is how Catch does it +#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED +#define DOCTEST_PLATFORM_MAC +#elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +#define DOCTEST_PLATFORM_IPHONE +#elif defined(_WIN32) +#define DOCTEST_PLATFORM_WINDOWS +#elif defined(__wasi__) +#define DOCTEST_PLATFORM_WASI +#else // DOCTEST_PLATFORM +#define DOCTEST_PLATFORM_LINUX +#endif // DOCTEST_PLATFORM + +namespace doctest { namespace detail { + static DOCTEST_CONSTEXPR int consume(const int*, int) noexcept { return 0; } +}} + +#define DOCTEST_GLOBAL_NO_WARNINGS(var, ...) \ + DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wglobal-constructors") \ + static const int var = doctest::detail::consume(&var, __VA_ARGS__); \ + DOCTEST_CLANG_SUPPRESS_WARNING_POP + +#ifndef DOCTEST_BREAK_INTO_DEBUGGER +// should probably take a look at https://github.com/scottt/debugbreak +#ifdef DOCTEST_PLATFORM_LINUX +#if defined(__GNUC__) && (defined(__i386) || defined(__x86_64)) +// Break at the location of the failing check if possible +#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("int $3\n" : :) // NOLINT(hicpp-no-assembler) +#else +#include +#define DOCTEST_BREAK_INTO_DEBUGGER() raise(SIGTRAP) +#endif +#elif defined(DOCTEST_PLATFORM_MAC) +#if defined(__x86_64) || defined(__x86_64__) || defined(__amd64__) || defined(__i386) +#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("int $3\n" : :) // NOLINT(hicpp-no-assembler) +#elif defined(__ppc__) || defined(__ppc64__) +// https://www.cocoawithlove.com/2008/03/break-into-debugger.html +#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n": : : "memory","r0","r3","r4") // NOLINT(hicpp-no-assembler) +#else +#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("brk #0"); // NOLINT(hicpp-no-assembler) +#endif +#elif DOCTEST_MSVC +#define DOCTEST_BREAK_INTO_DEBUGGER() __debugbreak() +#elif defined(__MINGW32__) +DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wredundant-decls") +extern "C" __declspec(dllimport) void __stdcall DebugBreak(); +DOCTEST_GCC_SUPPRESS_WARNING_POP +#define DOCTEST_BREAK_INTO_DEBUGGER() ::DebugBreak() +#else // linux +#define DOCTEST_BREAK_INTO_DEBUGGER() (static_cast(0)) +#endif // linux +#endif // DOCTEST_BREAK_INTO_DEBUGGER + +// this is kept here for backwards compatibility since the config option was changed +#ifdef DOCTEST_CONFIG_USE_IOSFWD +#ifndef DOCTEST_CONFIG_USE_STD_HEADERS +#define DOCTEST_CONFIG_USE_STD_HEADERS +#endif +#endif // DOCTEST_CONFIG_USE_IOSFWD + +// for clang - always include ciso646 (which drags some std stuff) because +// we want to check if we are using libc++ with the _LIBCPP_VERSION macro in +// which case we don't want to forward declare stuff from std - for reference: +// https://github.com/doctest/doctest/issues/126 +// https://github.com/doctest/doctest/issues/356 +#if DOCTEST_CLANG +#include +#endif // clang + +#ifdef _LIBCPP_VERSION +#ifndef DOCTEST_CONFIG_USE_STD_HEADERS +#define DOCTEST_CONFIG_USE_STD_HEADERS +#endif +#endif // _LIBCPP_VERSION + +#ifdef DOCTEST_CONFIG_USE_STD_HEADERS +#ifndef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS +#define DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS +#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS +DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN +#include +#include +#include +DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END +#else // DOCTEST_CONFIG_USE_STD_HEADERS + +// Forward declaring 'X' in namespace std is not permitted by the C++ Standard. +DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4643) + +namespace std { // NOLINT(cert-dcl58-cpp) +typedef decltype(nullptr) nullptr_t; // NOLINT(modernize-use-using) +typedef decltype(sizeof(void*)) size_t; // NOLINT(modernize-use-using) +template +struct char_traits; +template <> +struct char_traits; +template +class basic_ostream; // NOLINT(fuchsia-virtual-inheritance) +typedef basic_ostream> ostream; // NOLINT(modernize-use-using) +template +// NOLINTNEXTLINE +basic_ostream& operator<<(basic_ostream&, const char*); +template +class basic_istream; +typedef basic_istream> istream; // NOLINT(modernize-use-using) +template +class tuple; +#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0) +// see this issue on why this is needed: https://github.com/doctest/doctest/issues/183 +template +class allocator; +template +class basic_string; +using string = basic_string, allocator>; +#endif // VS 2019 +} // namespace std + +DOCTEST_MSVC_SUPPRESS_WARNING_POP + +#endif // DOCTEST_CONFIG_USE_STD_HEADERS + +#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS +#include +#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS + +namespace doctest { + +using std::size_t; + +DOCTEST_INTERFACE extern bool is_running_in_test; + +#ifndef DOCTEST_CONFIG_STRING_SIZE_TYPE +#define DOCTEST_CONFIG_STRING_SIZE_TYPE unsigned +#endif + +// A 24 byte string class (can be as small as 17 for x64 and 13 for x86) that can hold strings with length +// of up to 23 chars on the stack before going on the heap - the last byte of the buffer is used for: +// - "is small" bit - the highest bit - if "0" then it is small - otherwise its "1" (128) +// - if small - capacity left before going on the heap - using the lowest 5 bits +// - if small - 2 bits are left unused - the second and third highest ones +// - if small - acts as a null terminator if strlen() is 23 (24 including the null terminator) +// and the "is small" bit remains "0" ("as well as the capacity left") so its OK +// Idea taken from this lecture about the string implementation of facebook/folly - fbstring +// https://www.youtube.com/watch?v=kPR8h4-qZdk +// TODO: +// - optimizations - like not deleting memory unnecessarily in operator= and etc. +// - resize/reserve/clear +// - replace +// - back/front +// - iterator stuff +// - find & friends +// - push_back/pop_back +// - assign/insert/erase +// - relational operators as free functions - taking const char* as one of the params +class DOCTEST_INTERFACE String +{ +public: + using size_type = DOCTEST_CONFIG_STRING_SIZE_TYPE; + +private: + static DOCTEST_CONSTEXPR size_type len = 24; //!OCLINT avoid private static members + static DOCTEST_CONSTEXPR size_type last = len - 1; //!OCLINT avoid private static members + + struct view // len should be more than sizeof(view) - because of the final byte for flags + { + char* ptr; + size_type size; + size_type capacity; + }; + + union + { + char buf[len]; // NOLINT(*-avoid-c-arrays) + view data; + }; + + char* allocate(size_type sz); + + bool isOnStack() const noexcept { return (buf[last] & 128) == 0; } + void setOnHeap() noexcept; + void setLast(size_type in = last) noexcept; + void setSize(size_type sz) noexcept; + + void copy(const String& other); + +public: + static DOCTEST_CONSTEXPR size_type npos = static_cast(-1); + + String() noexcept; + ~String(); + + // cppcheck-suppress noExplicitConstructor + String(const char* in); + String(const char* in, size_type in_size); + + String(std::istream& in, size_type in_size); + + String(const String& other); + String& operator=(const String& other); + + String& operator+=(const String& other); + + String(String&& other) noexcept; + String& operator=(String&& other) noexcept; + + char operator[](size_type i) const; + char& operator[](size_type i); + + // the only functions I'm willing to leave in the interface - available for inlining + const char* c_str() const { return const_cast(this)->c_str(); } // NOLINT + char* c_str() { + if (isOnStack()) { + return reinterpret_cast(buf); + } + return data.ptr; + } + + size_type size() const; + size_type capacity() const; + + String substr(size_type pos, size_type cnt = npos) &&; + String substr(size_type pos, size_type cnt = npos) const &; + + size_type find(char ch, size_type pos = 0) const; + size_type rfind(char ch, size_type pos = npos) const; + + int compare(const char* other, bool no_case = false) const; + int compare(const String& other, bool no_case = false) const; + +friend DOCTEST_INTERFACE std::ostream& operator<<(std::ostream& s, const String& in); +}; + +DOCTEST_INTERFACE String operator+(const String& lhs, const String& rhs); + +DOCTEST_INTERFACE bool operator==(const String& lhs, const String& rhs); +DOCTEST_INTERFACE bool operator!=(const String& lhs, const String& rhs); +DOCTEST_INTERFACE bool operator<(const String& lhs, const String& rhs); +DOCTEST_INTERFACE bool operator>(const String& lhs, const String& rhs); +DOCTEST_INTERFACE bool operator<=(const String& lhs, const String& rhs); +DOCTEST_INTERFACE bool operator>=(const String& lhs, const String& rhs); + +class DOCTEST_INTERFACE Contains { +public: + explicit Contains(const String& string); + + bool checkWith(const String& other) const; + + String string; +}; + +DOCTEST_INTERFACE String toString(const Contains& in); + +DOCTEST_INTERFACE bool operator==(const String& lhs, const Contains& rhs); +DOCTEST_INTERFACE bool operator==(const Contains& lhs, const String& rhs); +DOCTEST_INTERFACE bool operator!=(const String& lhs, const Contains& rhs); +DOCTEST_INTERFACE bool operator!=(const Contains& lhs, const String& rhs); + +namespace Color { + enum Enum + { + None = 0, + White, + Red, + Green, + Blue, + Cyan, + Yellow, + Grey, + + Bright = 0x10, + + BrightRed = Bright | Red, + BrightGreen = Bright | Green, + LightGrey = Bright | Grey, + BrightWhite = Bright | White + }; + + DOCTEST_INTERFACE std::ostream& operator<<(std::ostream& s, Color::Enum code); +} // namespace Color + +namespace assertType { + enum Enum + { + // macro traits + + is_warn = 1, + is_check = 2 * is_warn, + is_require = 2 * is_check, + + is_normal = 2 * is_require, + is_throws = 2 * is_normal, + is_throws_as = 2 * is_throws, + is_throws_with = 2 * is_throws_as, + is_nothrow = 2 * is_throws_with, + + is_false = 2 * is_nothrow, + is_unary = 2 * is_false, // not checked anywhere - used just to distinguish the types + + is_eq = 2 * is_unary, + is_ne = 2 * is_eq, + + is_lt = 2 * is_ne, + is_gt = 2 * is_lt, + + is_ge = 2 * is_gt, + is_le = 2 * is_ge, + + // macro types + + DT_WARN = is_normal | is_warn, + DT_CHECK = is_normal | is_check, + DT_REQUIRE = is_normal | is_require, + + DT_WARN_FALSE = is_normal | is_false | is_warn, + DT_CHECK_FALSE = is_normal | is_false | is_check, + DT_REQUIRE_FALSE = is_normal | is_false | is_require, + + DT_WARN_THROWS = is_throws | is_warn, + DT_CHECK_THROWS = is_throws | is_check, + DT_REQUIRE_THROWS = is_throws | is_require, + + DT_WARN_THROWS_AS = is_throws_as | is_warn, + DT_CHECK_THROWS_AS = is_throws_as | is_check, + DT_REQUIRE_THROWS_AS = is_throws_as | is_require, + + DT_WARN_THROWS_WITH = is_throws_with | is_warn, + DT_CHECK_THROWS_WITH = is_throws_with | is_check, + DT_REQUIRE_THROWS_WITH = is_throws_with | is_require, + + DT_WARN_THROWS_WITH_AS = is_throws_with | is_throws_as | is_warn, + DT_CHECK_THROWS_WITH_AS = is_throws_with | is_throws_as | is_check, + DT_REQUIRE_THROWS_WITH_AS = is_throws_with | is_throws_as | is_require, + + DT_WARN_NOTHROW = is_nothrow | is_warn, + DT_CHECK_NOTHROW = is_nothrow | is_check, + DT_REQUIRE_NOTHROW = is_nothrow | is_require, + + DT_WARN_EQ = is_normal | is_eq | is_warn, + DT_CHECK_EQ = is_normal | is_eq | is_check, + DT_REQUIRE_EQ = is_normal | is_eq | is_require, + + DT_WARN_NE = is_normal | is_ne | is_warn, + DT_CHECK_NE = is_normal | is_ne | is_check, + DT_REQUIRE_NE = is_normal | is_ne | is_require, + + DT_WARN_GT = is_normal | is_gt | is_warn, + DT_CHECK_GT = is_normal | is_gt | is_check, + DT_REQUIRE_GT = is_normal | is_gt | is_require, + + DT_WARN_LT = is_normal | is_lt | is_warn, + DT_CHECK_LT = is_normal | is_lt | is_check, + DT_REQUIRE_LT = is_normal | is_lt | is_require, + + DT_WARN_GE = is_normal | is_ge | is_warn, + DT_CHECK_GE = is_normal | is_ge | is_check, + DT_REQUIRE_GE = is_normal | is_ge | is_require, + + DT_WARN_LE = is_normal | is_le | is_warn, + DT_CHECK_LE = is_normal | is_le | is_check, + DT_REQUIRE_LE = is_normal | is_le | is_require, + + DT_WARN_UNARY = is_normal | is_unary | is_warn, + DT_CHECK_UNARY = is_normal | is_unary | is_check, + DT_REQUIRE_UNARY = is_normal | is_unary | is_require, + + DT_WARN_UNARY_FALSE = is_normal | is_false | is_unary | is_warn, + DT_CHECK_UNARY_FALSE = is_normal | is_false | is_unary | is_check, + DT_REQUIRE_UNARY_FALSE = is_normal | is_false | is_unary | is_require, + }; +} // namespace assertType + +DOCTEST_INTERFACE const char* assertString(assertType::Enum at); +DOCTEST_INTERFACE const char* failureString(assertType::Enum at); +DOCTEST_INTERFACE const char* skipPathFromFilename(const char* file); + +struct DOCTEST_INTERFACE TestCaseData +{ + String m_file; // the file in which the test was registered (using String - see #350) + unsigned m_line; // the line where the test was registered + const char* m_name; // name of the test case + const char* m_test_suite; // the test suite in which the test was added + const char* m_description; + bool m_skip; + bool m_no_breaks; + bool m_no_output; + bool m_may_fail; + bool m_should_fail; + int m_expected_failures; + double m_timeout; +}; + +struct DOCTEST_INTERFACE AssertData +{ + // common - for all asserts + const TestCaseData* m_test_case; + assertType::Enum m_at; + const char* m_file; + int m_line; + const char* m_expr; + bool m_failed; + + // exception-related - for all asserts + bool m_threw; + String m_exception; + + // for normal asserts + String m_decomp; + + // for specific exception-related asserts + bool m_threw_as; + const char* m_exception_type; + + class DOCTEST_INTERFACE StringContains { + private: + Contains content; + bool isContains; + + public: + StringContains(const String& str) : content(str), isContains(false) { } + StringContains(Contains cntn) : content(static_cast(cntn)), isContains(true) { } + + bool check(const String& str) { return isContains ? (content == str) : (content.string == str); } + + operator const String&() const { return content.string; } + + const char* c_str() const { return content.string.c_str(); } + } m_exception_string; + + AssertData(assertType::Enum at, const char* file, int line, const char* expr, + const char* exception_type, const StringContains& exception_string); +}; + +struct DOCTEST_INTERFACE MessageData +{ + String m_string; + const char* m_file; + int m_line; + assertType::Enum m_severity; +}; + +struct DOCTEST_INTERFACE SubcaseSignature +{ + String m_name; + const char* m_file; + int m_line; + + bool operator==(const SubcaseSignature& other) const; + bool operator<(const SubcaseSignature& other) const; +}; + +struct DOCTEST_INTERFACE IContextScope +{ + DOCTEST_DECLARE_INTERFACE(IContextScope) + virtual void stringify(std::ostream*) const = 0; +}; + +namespace detail { + struct DOCTEST_INTERFACE TestCase; +} // namespace detail + +struct ContextOptions //!OCLINT too many fields +{ + std::ostream* cout = nullptr; // stdout stream + String binary_name; // the test binary name + + const detail::TestCase* currentTest = nullptr; + + // == parameters from the command line + String out; // output filename + String order_by; // how tests should be ordered + unsigned rand_seed; // the seed for rand ordering + + unsigned first; // the first (matching) test to be executed + unsigned last; // the last (matching) test to be executed + + int abort_after; // stop tests after this many failed assertions + int subcase_filter_levels; // apply the subcase filters for the first N levels + + bool success; // include successful assertions in output + bool case_sensitive; // if filtering should be case sensitive + bool exit; // if the program should be exited after the tests are ran/whatever + bool duration; // print the time duration of each test case + bool minimal; // minimal console output (only test failures) + bool quiet; // no console output + bool no_throw; // to skip exceptions-related assertion macros + bool no_exitcode; // if the framework should return 0 as the exitcode + bool no_run; // to not run the tests at all (can be done with an "*" exclude) + bool no_intro; // to not print the intro of the framework + bool no_version; // to not print the version of the framework + bool no_colors; // if output to the console should be colorized + bool force_colors; // forces the use of colors even when a tty cannot be detected + bool no_breaks; // to not break into the debugger + bool no_skip; // don't skip test cases which are marked to be skipped + bool gnu_file_line; // if line numbers should be surrounded with :x: and not (x): + bool no_path_in_filenames; // if the path to files should be removed from the output + bool no_line_numbers; // if source code line numbers should be omitted from the output + bool no_debug_output; // no output in the debug console when a debugger is attached + bool no_skipped_summary; // don't print "skipped" in the summary !!! UNDOCUMENTED !!! + bool no_time_in_output; // omit any time/timestamps from output !!! UNDOCUMENTED !!! + + bool help; // to print the help + bool version; // to print the version + bool count; // if only the count of matching tests is to be retrieved + bool list_test_cases; // to list all tests matching the filters + bool list_test_suites; // to list all suites matching the filters + bool list_reporters; // lists all registered reporters +}; + +namespace detail { + namespace types { +#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS + using namespace std; +#else + template + struct enable_if { }; + + template + struct enable_if { using type = T; }; + + struct true_type { static DOCTEST_CONSTEXPR bool value = true; }; + struct false_type { static DOCTEST_CONSTEXPR bool value = false; }; + + template struct remove_reference { using type = T; }; + template struct remove_reference { using type = T; }; + template struct remove_reference { using type = T; }; + + template struct is_rvalue_reference : false_type { }; + template struct is_rvalue_reference : true_type { }; + + template struct remove_const { using type = T; }; + template struct remove_const { using type = T; }; + + // Compiler intrinsics + template struct is_enum { static DOCTEST_CONSTEXPR bool value = __is_enum(T); }; + template struct underlying_type { using type = __underlying_type(T); }; + + template struct is_pointer : false_type { }; + template struct is_pointer : true_type { }; + + template struct is_array : false_type { }; + // NOLINTNEXTLINE(*-avoid-c-arrays) + template struct is_array : true_type { }; +#endif + } + + // + template + T&& declval(); + + template + DOCTEST_CONSTEXPR_FUNC T&& forward(typename types::remove_reference::type& t) DOCTEST_NOEXCEPT { + return static_cast(t); + } + + template + DOCTEST_CONSTEXPR_FUNC T&& forward(typename types::remove_reference::type&& t) DOCTEST_NOEXCEPT { + return static_cast(t); + } + + template + struct deferred_false : types::false_type { }; + +// MSVS 2015 :( +#if !DOCTEST_CLANG && defined(_MSC_VER) && _MSC_VER <= 1900 + template + struct has_global_insertion_operator : types::false_type { }; + + template + struct has_global_insertion_operator(), declval()), void())> : types::true_type { }; + + template + struct has_insertion_operator { static DOCTEST_CONSTEXPR bool value = has_global_insertion_operator::value; }; + + template + struct insert_hack; + + template + struct insert_hack { + static void insert(std::ostream& os, const T& t) { ::operator<<(os, t); } + }; + + template + struct insert_hack { + static void insert(std::ostream& os, const T& t) { operator<<(os, t); } + }; + + template + using insert_hack_t = insert_hack::value>; +#else + template + struct has_insertion_operator : types::false_type { }; +#endif + + template + struct has_insertion_operator(), declval()), void())> : types::true_type { }; + + template + struct should_stringify_as_underlying_type { + static DOCTEST_CONSTEXPR bool value = detail::types::is_enum::value && !doctest::detail::has_insertion_operator::value; + }; + + DOCTEST_INTERFACE std::ostream* tlssPush(); + DOCTEST_INTERFACE String tlssPop(); + + template + struct StringMakerBase { + template + static String convert(const DOCTEST_REF_WRAP(T)) { +#ifdef DOCTEST_CONFIG_REQUIRE_STRINGIFICATION_FOR_ALL_USED_TYPES + static_assert(deferred_false::value, "No stringification detected for type T. See string conversion manual"); +#endif + return "{?}"; + } + }; + + template + struct filldata; + + template + void filloss(std::ostream* stream, const T& in) { + filldata::fill(stream, in); + } + + template + void filloss(std::ostream* stream, const T (&in)[N]) { // NOLINT(*-avoid-c-arrays) + // T[N], T(&)[N], T(&&)[N] have same behaviour. + // Hence remove reference. + filloss::type>(stream, in); + } + + template + String toStream(const T& in) { + std::ostream* stream = tlssPush(); + filloss(stream, in); + return tlssPop(); + } + + template <> + struct StringMakerBase { + template + static String convert(const DOCTEST_REF_WRAP(T) in) { + return toStream(in); + } + }; +} // namespace detail + +template +struct StringMaker : public detail::StringMakerBase< + detail::has_insertion_operator::value || detail::types::is_pointer::value || detail::types::is_array::value> +{}; + +#ifndef DOCTEST_STRINGIFY +#ifdef DOCTEST_CONFIG_DOUBLE_STRINGIFY +#define DOCTEST_STRINGIFY(...) toString(toString(__VA_ARGS__)) +#else +#define DOCTEST_STRINGIFY(...) toString(__VA_ARGS__) +#endif +#endif + +template +String toString() { +#if DOCTEST_CLANG == 0 && DOCTEST_GCC == 0 && DOCTEST_ICC == 0 + String ret = __FUNCSIG__; // class doctest::String __cdecl doctest::toString(void) + String::size_type beginPos = ret.find('<'); + return ret.substr(beginPos + 1, ret.size() - beginPos - static_cast(sizeof(">(void)"))); +#else + String ret = __PRETTY_FUNCTION__; // doctest::String toString() [with T = TYPE] + String::size_type begin = ret.find('=') + 2; + return ret.substr(begin, ret.size() - begin - 1); +#endif +} + +template ::value, bool>::type = true> +String toString(const DOCTEST_REF_WRAP(T) value) { + return StringMaker::convert(value); +} + +#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING +DOCTEST_INTERFACE String toString(const char* in); +#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING + +#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0) +// see this issue on why this is needed: https://github.com/doctest/doctest/issues/183 +DOCTEST_INTERFACE String toString(const std::string& in); +#endif // VS 2019 + +DOCTEST_INTERFACE String toString(String in); + +DOCTEST_INTERFACE String toString(std::nullptr_t); + +DOCTEST_INTERFACE String toString(bool in); + +DOCTEST_INTERFACE String toString(float in); +DOCTEST_INTERFACE String toString(double in); +DOCTEST_INTERFACE String toString(double long in); + +DOCTEST_INTERFACE String toString(char in); +DOCTEST_INTERFACE String toString(char signed in); +DOCTEST_INTERFACE String toString(char unsigned in); +DOCTEST_INTERFACE String toString(short in); +DOCTEST_INTERFACE String toString(short unsigned in); +DOCTEST_INTERFACE String toString(signed in); +DOCTEST_INTERFACE String toString(unsigned in); +DOCTEST_INTERFACE String toString(long in); +DOCTEST_INTERFACE String toString(long unsigned in); +DOCTEST_INTERFACE String toString(long long in); +DOCTEST_INTERFACE String toString(long long unsigned in); + +template ::value, bool>::type = true> +String toString(const DOCTEST_REF_WRAP(T) value) { + using UT = typename detail::types::underlying_type::type; + return (DOCTEST_STRINGIFY(static_cast(value))); +} + +namespace detail { + template + struct filldata + { + static void fill(std::ostream* stream, const T& in) { +#if defined(_MSC_VER) && _MSC_VER <= 1900 + insert_hack_t::insert(*stream, in); +#else + operator<<(*stream, in); +#endif + } + }; + +DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4866) +// NOLINTBEGIN(*-avoid-c-arrays) + template + struct filldata { + static void fill(std::ostream* stream, const T(&in)[N]) { + *stream << "["; + for (size_t i = 0; i < N; i++) { + if (i != 0) { *stream << ", "; } + *stream << (DOCTEST_STRINGIFY(in[i])); + } + *stream << "]"; + } + }; +// NOLINTEND(*-avoid-c-arrays) +DOCTEST_MSVC_SUPPRESS_WARNING_POP + + // Specialized since we don't want the terminating null byte! +// NOLINTBEGIN(*-avoid-c-arrays) + template + struct filldata { + static void fill(std::ostream* stream, const char (&in)[N]) { + *stream << String(in, in[N - 1] ? N : N - 1); + } // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks) + }; +// NOLINTEND(*-avoid-c-arrays) + + template <> + struct filldata { + static void fill(std::ostream* stream, const void* in); + }; + + template + struct filldata { +DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4180) + static void fill(std::ostream* stream, const T* in) { +DOCTEST_MSVC_SUPPRESS_WARNING_POP +DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wmicrosoft-cast") + filldata::fill(stream, +#if DOCTEST_GCC == 0 || DOCTEST_GCC >= DOCTEST_COMPILER(4, 9, 0) + reinterpret_cast(in) +#else + *reinterpret_cast(&in) +#endif + ); +DOCTEST_CLANG_SUPPRESS_WARNING_POP + } + }; +} + +struct DOCTEST_INTERFACE Approx +{ + Approx(double value); + + Approx operator()(double value) const; + +#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS + template + explicit Approx(const T& value, + typename detail::types::enable_if::value>::type* = + static_cast(nullptr)) { + *this = static_cast(value); + } +#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS + + Approx& epsilon(double newEpsilon); + +#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS + template + typename std::enable_if::value, Approx&>::type epsilon( + const T& newEpsilon) { + m_epsilon = static_cast(newEpsilon); + return *this; + } +#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS + + Approx& scale(double newScale); + +#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS + template + typename std::enable_if::value, Approx&>::type scale( + const T& newScale) { + m_scale = static_cast(newScale); + return *this; + } +#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS + + // clang-format off + DOCTEST_INTERFACE friend bool operator==(double lhs, const Approx & rhs); + DOCTEST_INTERFACE friend bool operator==(const Approx & lhs, double rhs); + DOCTEST_INTERFACE friend bool operator!=(double lhs, const Approx & rhs); + DOCTEST_INTERFACE friend bool operator!=(const Approx & lhs, double rhs); + DOCTEST_INTERFACE friend bool operator<=(double lhs, const Approx & rhs); + DOCTEST_INTERFACE friend bool operator<=(const Approx & lhs, double rhs); + DOCTEST_INTERFACE friend bool operator>=(double lhs, const Approx & rhs); + DOCTEST_INTERFACE friend bool operator>=(const Approx & lhs, double rhs); + DOCTEST_INTERFACE friend bool operator< (double lhs, const Approx & rhs); + DOCTEST_INTERFACE friend bool operator< (const Approx & lhs, double rhs); + DOCTEST_INTERFACE friend bool operator> (double lhs, const Approx & rhs); + DOCTEST_INTERFACE friend bool operator> (const Approx & lhs, double rhs); + +#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS +#define DOCTEST_APPROX_PREFIX \ + template friend typename std::enable_if::value, bool>::type + + DOCTEST_APPROX_PREFIX operator==(const T& lhs, const Approx& rhs) { return operator==(static_cast(lhs), rhs); } + DOCTEST_APPROX_PREFIX operator==(const Approx& lhs, const T& rhs) { return operator==(rhs, lhs); } + DOCTEST_APPROX_PREFIX operator!=(const T& lhs, const Approx& rhs) { return !operator==(lhs, rhs); } + DOCTEST_APPROX_PREFIX operator!=(const Approx& lhs, const T& rhs) { return !operator==(rhs, lhs); } + DOCTEST_APPROX_PREFIX operator<=(const T& lhs, const Approx& rhs) { return static_cast(lhs) < rhs.m_value || lhs == rhs; } + DOCTEST_APPROX_PREFIX operator<=(const Approx& lhs, const T& rhs) { return lhs.m_value < static_cast(rhs) || lhs == rhs; } + DOCTEST_APPROX_PREFIX operator>=(const T& lhs, const Approx& rhs) { return static_cast(lhs) > rhs.m_value || lhs == rhs; } + DOCTEST_APPROX_PREFIX operator>=(const Approx& lhs, const T& rhs) { return lhs.m_value > static_cast(rhs) || lhs == rhs; } + DOCTEST_APPROX_PREFIX operator< (const T& lhs, const Approx& rhs) { return static_cast(lhs) < rhs.m_value && lhs != rhs; } + DOCTEST_APPROX_PREFIX operator< (const Approx& lhs, const T& rhs) { return lhs.m_value < static_cast(rhs) && lhs != rhs; } + DOCTEST_APPROX_PREFIX operator> (const T& lhs, const Approx& rhs) { return static_cast(lhs) > rhs.m_value && lhs != rhs; } + DOCTEST_APPROX_PREFIX operator> (const Approx& lhs, const T& rhs) { return lhs.m_value > static_cast(rhs) && lhs != rhs; } +#undef DOCTEST_APPROX_PREFIX +#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS + + // clang-format on + + double m_epsilon; + double m_scale; + double m_value; +}; + +DOCTEST_INTERFACE String toString(const Approx& in); + +DOCTEST_INTERFACE const ContextOptions* getContextOptions(); + +template +struct DOCTEST_INTERFACE_DECL IsNaN +{ + F value; bool flipped; + IsNaN(F f, bool flip = false) : value(f), flipped(flip) { } + IsNaN operator!() const { return { value, !flipped }; } + operator bool() const; +}; +#ifndef __MINGW32__ +extern template struct DOCTEST_INTERFACE_DECL IsNaN; +extern template struct DOCTEST_INTERFACE_DECL IsNaN; +extern template struct DOCTEST_INTERFACE_DECL IsNaN; +#endif +DOCTEST_INTERFACE String toString(IsNaN in); +DOCTEST_INTERFACE String toString(IsNaN in); +DOCTEST_INTERFACE String toString(IsNaN in); + +#ifndef DOCTEST_CONFIG_DISABLE + +namespace detail { + // clang-format off +#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING + template struct decay_array { using type = T; }; + template struct decay_array { using type = T*; }; + template struct decay_array { using type = T*; }; + + template struct not_char_pointer { static DOCTEST_CONSTEXPR int value = 1; }; + template<> struct not_char_pointer { static DOCTEST_CONSTEXPR int value = 0; }; + template<> struct not_char_pointer { static DOCTEST_CONSTEXPR int value = 0; }; + + template struct can_use_op : public not_char_pointer::type> {}; +#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING + // clang-format on + + struct DOCTEST_INTERFACE TestFailureException + { + }; + + DOCTEST_INTERFACE bool checkIfShouldThrow(assertType::Enum at); + +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS + DOCTEST_NORETURN +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS + DOCTEST_INTERFACE void throwException(); + + struct DOCTEST_INTERFACE Subcase + { + SubcaseSignature m_signature; + bool m_entered = false; + + Subcase(const String& name, const char* file, int line); + Subcase(const Subcase&) = delete; + Subcase(Subcase&&) = delete; + Subcase& operator=(const Subcase&) = delete; + Subcase& operator=(Subcase&&) = delete; + ~Subcase(); + + operator bool() const; + + private: + bool checkFilters(); + }; + + template + String stringifyBinaryExpr(const DOCTEST_REF_WRAP(L) lhs, const char* op, + const DOCTEST_REF_WRAP(R) rhs) { + return (DOCTEST_STRINGIFY(lhs)) + op + (DOCTEST_STRINGIFY(rhs)); + } + +#if DOCTEST_CLANG && DOCTEST_CLANG < DOCTEST_COMPILER(3, 6, 0) +DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison") +#endif + +// This will check if there is any way it could find a operator like member or friend and uses it. +// If not it doesn't find the operator or if the operator at global scope is defined after +// this template, the template won't be instantiated due to SFINAE. Once the template is not +// instantiated it can look for global operator using normal conversions. +#ifdef __NVCC__ +#define SFINAE_OP(ret,op) ret +#else +#define SFINAE_OP(ret,op) decltype((void)(doctest::detail::declval() op doctest::detail::declval()),ret{}) +#endif + +#define DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(op, op_str, op_macro) \ + template \ + DOCTEST_NOINLINE SFINAE_OP(Result,op) operator op(R&& rhs) { \ + bool res = op_macro(doctest::detail::forward(lhs), doctest::detail::forward(rhs)); \ + if(m_at & assertType::is_false) \ + res = !res; \ + if(!res || doctest::getContextOptions()->success) \ + return Result(res, stringifyBinaryExpr(lhs, op_str, rhs)); \ + return Result(res); \ + } + + // more checks could be added - like in Catch: + // https://github.com/catchorg/Catch2/pull/1480/files + // https://github.com/catchorg/Catch2/pull/1481/files +#define DOCTEST_FORBIT_EXPRESSION(rt, op) \ + template \ + rt& operator op(const R&) { \ + static_assert(deferred_false::value, \ + "Expression Too Complex Please Rewrite As Binary Comparison!"); \ + return *this; \ + } + + struct DOCTEST_INTERFACE Result // NOLINT(*-member-init) + { + bool m_passed; + String m_decomp; + + Result() = default; // TODO: Why do we need this? (To remove NOLINT) + Result(bool passed, const String& decomposition = String()); + + // forbidding some expressions based on this table: https://en.cppreference.com/w/cpp/language/operator_precedence + DOCTEST_FORBIT_EXPRESSION(Result, &) + DOCTEST_FORBIT_EXPRESSION(Result, ^) + DOCTEST_FORBIT_EXPRESSION(Result, |) + DOCTEST_FORBIT_EXPRESSION(Result, &&) + DOCTEST_FORBIT_EXPRESSION(Result, ||) + DOCTEST_FORBIT_EXPRESSION(Result, ==) + DOCTEST_FORBIT_EXPRESSION(Result, !=) + DOCTEST_FORBIT_EXPRESSION(Result, <) + DOCTEST_FORBIT_EXPRESSION(Result, >) + DOCTEST_FORBIT_EXPRESSION(Result, <=) + DOCTEST_FORBIT_EXPRESSION(Result, >=) + DOCTEST_FORBIT_EXPRESSION(Result, =) + DOCTEST_FORBIT_EXPRESSION(Result, +=) + DOCTEST_FORBIT_EXPRESSION(Result, -=) + DOCTEST_FORBIT_EXPRESSION(Result, *=) + DOCTEST_FORBIT_EXPRESSION(Result, /=) + DOCTEST_FORBIT_EXPRESSION(Result, %=) + DOCTEST_FORBIT_EXPRESSION(Result, <<=) + DOCTEST_FORBIT_EXPRESSION(Result, >>=) + DOCTEST_FORBIT_EXPRESSION(Result, &=) + DOCTEST_FORBIT_EXPRESSION(Result, ^=) + DOCTEST_FORBIT_EXPRESSION(Result, |=) + }; + +#ifndef DOCTEST_CONFIG_NO_COMPARISON_WARNING_SUPPRESSION + + DOCTEST_CLANG_SUPPRESS_WARNING_PUSH + DOCTEST_CLANG_SUPPRESS_WARNING("-Wsign-conversion") + DOCTEST_CLANG_SUPPRESS_WARNING("-Wsign-compare") + //DOCTEST_CLANG_SUPPRESS_WARNING("-Wdouble-promotion") + //DOCTEST_CLANG_SUPPRESS_WARNING("-Wconversion") + //DOCTEST_CLANG_SUPPRESS_WARNING("-Wfloat-equal") + + DOCTEST_GCC_SUPPRESS_WARNING_PUSH + DOCTEST_GCC_SUPPRESS_WARNING("-Wsign-conversion") + DOCTEST_GCC_SUPPRESS_WARNING("-Wsign-compare") + //DOCTEST_GCC_SUPPRESS_WARNING("-Wdouble-promotion") + //DOCTEST_GCC_SUPPRESS_WARNING("-Wconversion") + //DOCTEST_GCC_SUPPRESS_WARNING("-Wfloat-equal") + + DOCTEST_MSVC_SUPPRESS_WARNING_PUSH + // https://stackoverflow.com/questions/39479163 what's the difference between 4018 and 4389 + DOCTEST_MSVC_SUPPRESS_WARNING(4388) // signed/unsigned mismatch + DOCTEST_MSVC_SUPPRESS_WARNING(4389) // 'operator' : signed/unsigned mismatch + DOCTEST_MSVC_SUPPRESS_WARNING(4018) // 'expression' : signed/unsigned mismatch + //DOCTEST_MSVC_SUPPRESS_WARNING(4805) // 'operation' : unsafe mix of type 'type' and type 'type' in operation + +#endif // DOCTEST_CONFIG_NO_COMPARISON_WARNING_SUPPRESSION + + // clang-format off +#ifndef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING +#define DOCTEST_COMPARISON_RETURN_TYPE bool +#else // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING +#define DOCTEST_COMPARISON_RETURN_TYPE typename types::enable_if::value || can_use_op::value, bool>::type + inline bool eq(const char* lhs, const char* rhs) { return String(lhs) == String(rhs); } + inline bool ne(const char* lhs, const char* rhs) { return String(lhs) != String(rhs); } + inline bool lt(const char* lhs, const char* rhs) { return String(lhs) < String(rhs); } + inline bool gt(const char* lhs, const char* rhs) { return String(lhs) > String(rhs); } + inline bool le(const char* lhs, const char* rhs) { return String(lhs) <= String(rhs); } + inline bool ge(const char* lhs, const char* rhs) { return String(lhs) >= String(rhs); } +#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING + // clang-format on + +#define DOCTEST_RELATIONAL_OP(name, op) \ + template \ + DOCTEST_COMPARISON_RETURN_TYPE name(const DOCTEST_REF_WRAP(L) lhs, \ + const DOCTEST_REF_WRAP(R) rhs) { \ + return lhs op rhs; \ + } + + DOCTEST_RELATIONAL_OP(eq, ==) + DOCTEST_RELATIONAL_OP(ne, !=) + DOCTEST_RELATIONAL_OP(lt, <) + DOCTEST_RELATIONAL_OP(gt, >) + DOCTEST_RELATIONAL_OP(le, <=) + DOCTEST_RELATIONAL_OP(ge, >=) + +#ifndef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING +#define DOCTEST_CMP_EQ(l, r) l == r +#define DOCTEST_CMP_NE(l, r) l != r +#define DOCTEST_CMP_GT(l, r) l > r +#define DOCTEST_CMP_LT(l, r) l < r +#define DOCTEST_CMP_GE(l, r) l >= r +#define DOCTEST_CMP_LE(l, r) l <= r +#else // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING +#define DOCTEST_CMP_EQ(l, r) eq(l, r) +#define DOCTEST_CMP_NE(l, r) ne(l, r) +#define DOCTEST_CMP_GT(l, r) gt(l, r) +#define DOCTEST_CMP_LT(l, r) lt(l, r) +#define DOCTEST_CMP_GE(l, r) ge(l, r) +#define DOCTEST_CMP_LE(l, r) le(l, r) +#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING + + template + // cppcheck-suppress copyCtorAndEqOperator + struct Expression_lhs + { + L lhs; + assertType::Enum m_at; + + explicit Expression_lhs(L&& in, assertType::Enum at) + : lhs(static_cast(in)) + , m_at(at) {} + + DOCTEST_NOINLINE operator Result() { +// this is needed only for MSVC 2015 +DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4800) // 'int': forcing value to bool + bool res = static_cast(lhs); +DOCTEST_MSVC_SUPPRESS_WARNING_POP + if(m_at & assertType::is_false) { //!OCLINT bitwise operator in conditional + res = !res; + } + + if(!res || getContextOptions()->success) { + return { res, (DOCTEST_STRINGIFY(lhs)) }; + } + return { res }; + } + + /* This is required for user-defined conversions from Expression_lhs to L */ + operator L() const { return lhs; } + + // clang-format off + DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(==, " == ", DOCTEST_CMP_EQ) //!OCLINT bitwise operator in conditional + DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(!=, " != ", DOCTEST_CMP_NE) //!OCLINT bitwise operator in conditional + DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(>, " > ", DOCTEST_CMP_GT) //!OCLINT bitwise operator in conditional + DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(<, " < ", DOCTEST_CMP_LT) //!OCLINT bitwise operator in conditional + DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(>=, " >= ", DOCTEST_CMP_GE) //!OCLINT bitwise operator in conditional + DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(<=, " <= ", DOCTEST_CMP_LE) //!OCLINT bitwise operator in conditional + // clang-format on + + // forbidding some expressions based on this table: https://en.cppreference.com/w/cpp/language/operator_precedence + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, &) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, ^) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, |) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, &&) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, ||) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, =) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, +=) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, -=) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, *=) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, /=) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, %=) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, <<=) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, >>=) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, &=) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, ^=) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, |=) + // these 2 are unfortunate because they should be allowed - they have higher precedence over the comparisons, but the + // ExpressionDecomposer class uses the left shift operator to capture the left operand of the binary expression... + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, <<) + DOCTEST_FORBIT_EXPRESSION(Expression_lhs, >>) + }; + +#ifndef DOCTEST_CONFIG_NO_COMPARISON_WARNING_SUPPRESSION + + DOCTEST_CLANG_SUPPRESS_WARNING_POP + DOCTEST_MSVC_SUPPRESS_WARNING_POP + DOCTEST_GCC_SUPPRESS_WARNING_POP + +#endif // DOCTEST_CONFIG_NO_COMPARISON_WARNING_SUPPRESSION + +#if DOCTEST_CLANG && DOCTEST_CLANG < DOCTEST_COMPILER(3, 6, 0) +DOCTEST_CLANG_SUPPRESS_WARNING_POP +#endif + + struct DOCTEST_INTERFACE ExpressionDecomposer + { + assertType::Enum m_at; + + ExpressionDecomposer(assertType::Enum at); + + // The right operator for capturing expressions is "<=" instead of "<<" (based on the operator precedence table) + // but then there will be warnings from GCC about "-Wparentheses" and since "_Pragma()" is problematic this will stay for now... + // https://github.com/catchorg/Catch2/issues/870 + // https://github.com/catchorg/Catch2/issues/565 + template + Expression_lhs operator<<(L&& operand) { + return Expression_lhs(static_cast(operand), m_at); + } + + template ::value,void >::type* = nullptr> + Expression_lhs operator<<(const L &operand) { + return Expression_lhs(operand, m_at); + } + }; + + struct DOCTEST_INTERFACE TestSuite + { + const char* m_test_suite = nullptr; + const char* m_description = nullptr; + bool m_skip = false; + bool m_no_breaks = false; + bool m_no_output = false; + bool m_may_fail = false; + bool m_should_fail = false; + int m_expected_failures = 0; + double m_timeout = 0; + + TestSuite& operator*(const char* in); + + template + TestSuite& operator*(const T& in) { + in.fill(*this); + return *this; + } + }; + + using funcType = void (*)(); + + struct DOCTEST_INTERFACE TestCase : public TestCaseData + { + funcType m_test; // a function pointer to the test case + + String m_type; // for templated test cases - gets appended to the real name + int m_template_id; // an ID used to distinguish between the different versions of a templated test case + String m_full_name; // contains the name (only for templated test cases!) + the template type + + TestCase(funcType test, const char* file, unsigned line, const TestSuite& test_suite, + const String& type = String(), int template_id = -1); + + TestCase(const TestCase& other); + TestCase(TestCase&&) = delete; + + DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(26434) // hides a non-virtual function + TestCase& operator=(const TestCase& other); + DOCTEST_MSVC_SUPPRESS_WARNING_POP + + TestCase& operator=(TestCase&&) = delete; + + TestCase& operator*(const char* in); + + template + TestCase& operator*(const T& in) { + in.fill(*this); + return *this; + } + + bool operator<(const TestCase& other) const; + + ~TestCase() = default; + }; + + // forward declarations of functions used by the macros + DOCTEST_INTERFACE int regTest(const TestCase& tc); + DOCTEST_INTERFACE int setTestSuite(const TestSuite& ts); + DOCTEST_INTERFACE bool isDebuggerActive(); + + template + int instantiationHelper(const T&) { return 0; } + + namespace binaryAssertComparison { + enum Enum + { + eq = 0, + ne, + gt, + lt, + ge, + le + }; + } // namespace binaryAssertComparison + + // clang-format off + template struct RelationalComparator { bool operator()(const DOCTEST_REF_WRAP(L), const DOCTEST_REF_WRAP(R) ) const { return false; } }; + +#define DOCTEST_BINARY_RELATIONAL_OP(n, op) \ + template struct RelationalComparator { bool operator()(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) const { return op(lhs, rhs); } }; + // clang-format on + + DOCTEST_BINARY_RELATIONAL_OP(0, doctest::detail::eq) + DOCTEST_BINARY_RELATIONAL_OP(1, doctest::detail::ne) + DOCTEST_BINARY_RELATIONAL_OP(2, doctest::detail::gt) + DOCTEST_BINARY_RELATIONAL_OP(3, doctest::detail::lt) + DOCTEST_BINARY_RELATIONAL_OP(4, doctest::detail::ge) + DOCTEST_BINARY_RELATIONAL_OP(5, doctest::detail::le) + + struct DOCTEST_INTERFACE ResultBuilder : public AssertData + { + ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr, + const char* exception_type = "", const String& exception_string = ""); + + ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr, + const char* exception_type, const Contains& exception_string); + + void setResult(const Result& res); + + template + DOCTEST_NOINLINE bool binary_assert(const DOCTEST_REF_WRAP(L) lhs, + const DOCTEST_REF_WRAP(R) rhs) { + m_failed = !RelationalComparator()(lhs, rhs); + if (m_failed || getContextOptions()->success) { + m_decomp = stringifyBinaryExpr(lhs, ", ", rhs); + } + return !m_failed; + } + + template + DOCTEST_NOINLINE bool unary_assert(const DOCTEST_REF_WRAP(L) val) { + m_failed = !val; + + if (m_at & assertType::is_false) { //!OCLINT bitwise operator in conditional + m_failed = !m_failed; + } + + if (m_failed || getContextOptions()->success) { + m_decomp = (DOCTEST_STRINGIFY(val)); + } + + return !m_failed; + } + + void translateException(); + + bool log(); + void react() const; + }; + + namespace assertAction { + enum Enum + { + nothing = 0, + dbgbreak = 1, + shouldthrow = 2 + }; + } // namespace assertAction + + DOCTEST_INTERFACE void failed_out_of_a_testing_context(const AssertData& ad); + + DOCTEST_INTERFACE bool decomp_assert(assertType::Enum at, const char* file, int line, + const char* expr, const Result& result); + +#define DOCTEST_ASSERT_OUT_OF_TESTS(decomp) \ + do { \ + if(!is_running_in_test) { \ + if(failed) { \ + ResultBuilder rb(at, file, line, expr); \ + rb.m_failed = failed; \ + rb.m_decomp = decomp; \ + failed_out_of_a_testing_context(rb); \ + if(isDebuggerActive() && !getContextOptions()->no_breaks) \ + DOCTEST_BREAK_INTO_DEBUGGER(); \ + if(checkIfShouldThrow(at)) \ + throwException(); \ + } \ + return !failed; \ + } \ + } while(false) + +#define DOCTEST_ASSERT_IN_TESTS(decomp) \ + ResultBuilder rb(at, file, line, expr); \ + rb.m_failed = failed; \ + if(rb.m_failed || getContextOptions()->success) \ + rb.m_decomp = decomp; \ + if(rb.log()) \ + DOCTEST_BREAK_INTO_DEBUGGER(); \ + if(rb.m_failed && checkIfShouldThrow(at)) \ + throwException() + + template + DOCTEST_NOINLINE bool binary_assert(assertType::Enum at, const char* file, int line, + const char* expr, const DOCTEST_REF_WRAP(L) lhs, + const DOCTEST_REF_WRAP(R) rhs) { + bool failed = !RelationalComparator()(lhs, rhs); + + // ################################################################################### + // IF THE DEBUGGER BREAKS HERE - GO 1 LEVEL UP IN THE CALLSTACK FOR THE FAILING ASSERT + // THIS IS THE EFFECT OF HAVING 'DOCTEST_CONFIG_SUPER_FAST_ASSERTS' DEFINED + // ################################################################################### + DOCTEST_ASSERT_OUT_OF_TESTS(stringifyBinaryExpr(lhs, ", ", rhs)); + DOCTEST_ASSERT_IN_TESTS(stringifyBinaryExpr(lhs, ", ", rhs)); + return !failed; + } + + template + DOCTEST_NOINLINE bool unary_assert(assertType::Enum at, const char* file, int line, + const char* expr, const DOCTEST_REF_WRAP(L) val) { + bool failed = !val; + + if(at & assertType::is_false) //!OCLINT bitwise operator in conditional + failed = !failed; + + // ################################################################################### + // IF THE DEBUGGER BREAKS HERE - GO 1 LEVEL UP IN THE CALLSTACK FOR THE FAILING ASSERT + // THIS IS THE EFFECT OF HAVING 'DOCTEST_CONFIG_SUPER_FAST_ASSERTS' DEFINED + // ################################################################################### + DOCTEST_ASSERT_OUT_OF_TESTS((DOCTEST_STRINGIFY(val))); + DOCTEST_ASSERT_IN_TESTS((DOCTEST_STRINGIFY(val))); + return !failed; + } + + struct DOCTEST_INTERFACE IExceptionTranslator + { + DOCTEST_DECLARE_INTERFACE(IExceptionTranslator) + virtual bool translate(String&) const = 0; + }; + + template + class ExceptionTranslator : public IExceptionTranslator //!OCLINT destructor of virtual class + { + public: + explicit ExceptionTranslator(String (*translateFunction)(T)) + : m_translateFunction(translateFunction) {} + + bool translate(String& res) const override { +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS + try { + throw; // lgtm [cpp/rethrow-no-exception] + // cppcheck-suppress catchExceptionByValue + } catch(const T& ex) { + res = m_translateFunction(ex); //!OCLINT parameter reassignment + return true; + } catch(...) {} //!OCLINT - empty catch statement +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS + static_cast(res); // to silence -Wunused-parameter + return false; + } + + private: + String (*m_translateFunction)(T); + }; + + DOCTEST_INTERFACE void registerExceptionTranslatorImpl(const IExceptionTranslator* et); + + // ContextScope base class used to allow implementing methods of ContextScope + // that don't depend on the template parameter in doctest.cpp. + struct DOCTEST_INTERFACE ContextScopeBase : public IContextScope { + ContextScopeBase(const ContextScopeBase&) = delete; + + ContextScopeBase& operator=(const ContextScopeBase&) = delete; + ContextScopeBase& operator=(ContextScopeBase&&) = delete; + + ~ContextScopeBase() override = default; + + protected: + ContextScopeBase(); + ContextScopeBase(ContextScopeBase&& other) noexcept; + + void destroy(); + bool need_to_destroy{true}; + }; + + template class ContextScope : public ContextScopeBase + { + L lambda_; + + public: + explicit ContextScope(const L &lambda) : lambda_(lambda) {} + explicit ContextScope(L&& lambda) : lambda_(static_cast(lambda)) { } + + ContextScope(const ContextScope&) = delete; + ContextScope(ContextScope&&) noexcept = default; + + ContextScope& operator=(const ContextScope&) = delete; + ContextScope& operator=(ContextScope&&) = delete; + + void stringify(std::ostream* s) const override { lambda_(s); } + + ~ContextScope() override { + if (need_to_destroy) { + destroy(); + } + } + }; + + struct DOCTEST_INTERFACE MessageBuilder : public MessageData + { + std::ostream* m_stream; + bool logged = false; + + MessageBuilder(const char* file, int line, assertType::Enum severity); + + MessageBuilder(const MessageBuilder&) = delete; + MessageBuilder(MessageBuilder&&) = delete; + + MessageBuilder& operator=(const MessageBuilder&) = delete; + MessageBuilder& operator=(MessageBuilder&&) = delete; + + ~MessageBuilder(); + + // the preferred way of chaining parameters for stringification +DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4866) + template + MessageBuilder& operator,(const T& in) { + *m_stream << (DOCTEST_STRINGIFY(in)); + return *this; + } +DOCTEST_MSVC_SUPPRESS_WARNING_POP + + // kept here just for backwards-compatibility - the comma operator should be preferred now + template + MessageBuilder& operator<<(const T& in) { return this->operator,(in); } + + // the `,` operator has the lowest operator precedence - if `<<` is used by the user then + // the `,` operator will be called last which is not what we want and thus the `*` operator + // is used first (has higher operator precedence compared to `<<`) so that we guarantee that + // an operator of the MessageBuilder class is called first before the rest of the parameters + template + MessageBuilder& operator*(const T& in) { return this->operator,(in); } + + bool log(); + void react(); + }; + + template + ContextScope MakeContextScope(const L &lambda) { + return ContextScope(lambda); + } +} // namespace detail + +#define DOCTEST_DEFINE_DECORATOR(name, type, def) \ + struct name \ + { \ + type data; \ + name(type in = def) \ + : data(in) {} \ + void fill(detail::TestCase& state) const { state.DOCTEST_CAT(m_, name) = data; } \ + void fill(detail::TestSuite& state) const { state.DOCTEST_CAT(m_, name) = data; } \ + } + +DOCTEST_DEFINE_DECORATOR(test_suite, const char*, ""); +DOCTEST_DEFINE_DECORATOR(description, const char*, ""); +DOCTEST_DEFINE_DECORATOR(skip, bool, true); +DOCTEST_DEFINE_DECORATOR(no_breaks, bool, true); +DOCTEST_DEFINE_DECORATOR(no_output, bool, true); +DOCTEST_DEFINE_DECORATOR(timeout, double, 0); +DOCTEST_DEFINE_DECORATOR(may_fail, bool, true); +DOCTEST_DEFINE_DECORATOR(should_fail, bool, true); +DOCTEST_DEFINE_DECORATOR(expected_failures, int, 0); + +template +int registerExceptionTranslator(String (*translateFunction)(T)) { + DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wexit-time-destructors") + static detail::ExceptionTranslator exceptionTranslator(translateFunction); + DOCTEST_CLANG_SUPPRESS_WARNING_POP + detail::registerExceptionTranslatorImpl(&exceptionTranslator); + return 0; +} + +} // namespace doctest + +// in a separate namespace outside of doctest because the DOCTEST_TEST_SUITE macro +// introduces an anonymous namespace in which getCurrentTestSuite gets overridden +namespace doctest_detail_test_suite_ns { +DOCTEST_INTERFACE doctest::detail::TestSuite& getCurrentTestSuite(); +} // namespace doctest_detail_test_suite_ns + +namespace doctest { +#else // DOCTEST_CONFIG_DISABLE +template +int registerExceptionTranslator(String (*)(T)) { + return 0; +} +#endif // DOCTEST_CONFIG_DISABLE + +namespace detail { + using assert_handler = void (*)(const AssertData&); + struct ContextState; +} // namespace detail + +class DOCTEST_INTERFACE Context +{ + detail::ContextState* p; + + void parseArgs(int argc, const char* const* argv, bool withDefaults = false); + +public: + explicit Context(int argc = 0, const char* const* argv = nullptr); + + Context(const Context&) = delete; + Context(Context&&) = delete; + + Context& operator=(const Context&) = delete; + Context& operator=(Context&&) = delete; + + ~Context(); // NOLINT(performance-trivially-destructible) + + void applyCommandLine(int argc, const char* const* argv); + + void addFilter(const char* filter, const char* value); + void clearFilters(); + void setOption(const char* option, bool value); + void setOption(const char* option, int value); + void setOption(const char* option, const char* value); + + bool shouldExit(); + + void setAsDefaultForAssertsOutOfTestCases(); + + void setAssertHandler(detail::assert_handler ah); + + void setCout(std::ostream* out); + + int run(); +}; + +namespace TestCaseFailureReason { + enum Enum + { + None = 0, + AssertFailure = 1, // an assertion has failed in the test case + Exception = 2, // test case threw an exception + Crash = 4, // a crash... + TooManyFailedAsserts = 8, // the abort-after option + Timeout = 16, // see the timeout decorator + ShouldHaveFailedButDidnt = 32, // see the should_fail decorator + ShouldHaveFailedAndDid = 64, // see the should_fail decorator + DidntFailExactlyNumTimes = 128, // see the expected_failures decorator + FailedExactlyNumTimes = 256, // see the expected_failures decorator + CouldHaveFailedAndDid = 512 // see the may_fail decorator + }; +} // namespace TestCaseFailureReason + +struct DOCTEST_INTERFACE CurrentTestCaseStats +{ + int numAssertsCurrentTest; + int numAssertsFailedCurrentTest; + double seconds; + int failure_flags; // use TestCaseFailureReason::Enum + bool testCaseSuccess; +}; + +struct DOCTEST_INTERFACE TestCaseException +{ + String error_string; + bool is_crash; +}; + +struct DOCTEST_INTERFACE TestRunStats +{ + unsigned numTestCases; + unsigned numTestCasesPassingFilters; + unsigned numTestSuitesPassingFilters; + unsigned numTestCasesFailed; + int numAsserts; + int numAssertsFailed; +}; + +struct QueryData +{ + const TestRunStats* run_stats = nullptr; + const TestCaseData** data = nullptr; + unsigned num_data = 0; +}; + +struct DOCTEST_INTERFACE IReporter +{ + // The constructor has to accept "const ContextOptions&" as a single argument + // which has most of the options for the run + a pointer to the stdout stream + // Reporter(const ContextOptions& in) + + // called when a query should be reported (listing test cases, printing the version, etc.) + virtual void report_query(const QueryData&) = 0; + + // called when the whole test run starts + virtual void test_run_start() = 0; + // called when the whole test run ends (caching a pointer to the input doesn't make sense here) + virtual void test_run_end(const TestRunStats&) = 0; + + // called when a test case is started (safe to cache a pointer to the input) + virtual void test_case_start(const TestCaseData&) = 0; + // called when a test case is reentered because of unfinished subcases (safe to cache a pointer to the input) + virtual void test_case_reenter(const TestCaseData&) = 0; + // called when a test case has ended + virtual void test_case_end(const CurrentTestCaseStats&) = 0; + + // called when an exception is thrown from the test case (or it crashes) + virtual void test_case_exception(const TestCaseException&) = 0; + + // called whenever a subcase is entered (don't cache pointers to the input) + virtual void subcase_start(const SubcaseSignature&) = 0; + // called whenever a subcase is exited (don't cache pointers to the input) + virtual void subcase_end() = 0; + + // called for each assert (don't cache pointers to the input) + virtual void log_assert(const AssertData&) = 0; + // called for each message (don't cache pointers to the input) + virtual void log_message(const MessageData&) = 0; + + // called when a test case is skipped either because it doesn't pass the filters, has a skip decorator + // or isn't in the execution range (between first and last) (safe to cache a pointer to the input) + virtual void test_case_skipped(const TestCaseData&) = 0; + + DOCTEST_DECLARE_INTERFACE(IReporter) + + // can obtain all currently active contexts and stringify them if one wishes to do so + static int get_num_active_contexts(); + static const IContextScope* const* get_active_contexts(); + + // can iterate through contexts which have been stringified automatically in their destructors when an exception has been thrown + static int get_num_stringified_contexts(); + static const String* get_stringified_contexts(); +}; + +namespace detail { + using reporterCreatorFunc = IReporter* (*)(const ContextOptions&); + + DOCTEST_INTERFACE void registerReporterImpl(const char* name, int prio, reporterCreatorFunc c, bool isReporter); + + template + IReporter* reporterCreator(const ContextOptions& o) { + return new Reporter(o); + } +} // namespace detail + +template +int registerReporter(const char* name, int priority, bool isReporter) { + detail::registerReporterImpl(name, priority, detail::reporterCreator, isReporter); + return 0; +} +} // namespace doctest + +#ifdef DOCTEST_CONFIG_ASSERTS_RETURN_VALUES +#define DOCTEST_FUNC_EMPTY [] { return false; }() +#else +#define DOCTEST_FUNC_EMPTY (void)0 +#endif + +// if registering is not disabled +#ifndef DOCTEST_CONFIG_DISABLE + +#ifdef DOCTEST_CONFIG_ASSERTS_RETURN_VALUES +#define DOCTEST_FUNC_SCOPE_BEGIN [&] +#define DOCTEST_FUNC_SCOPE_END () +#define DOCTEST_FUNC_SCOPE_RET(v) return v +#else +#define DOCTEST_FUNC_SCOPE_BEGIN do +#define DOCTEST_FUNC_SCOPE_END while(false) +#define DOCTEST_FUNC_SCOPE_RET(v) (void)0 +#endif + +// common code in asserts - for convenience +#define DOCTEST_ASSERT_LOG_REACT_RETURN(b) \ + if(b.log()) DOCTEST_BREAK_INTO_DEBUGGER(); \ + b.react(); \ + DOCTEST_FUNC_SCOPE_RET(!b.m_failed) + +#ifdef DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS +#define DOCTEST_WRAP_IN_TRY(x) x; +#else // DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS +#define DOCTEST_WRAP_IN_TRY(x) \ + try { \ + x; \ + } catch(...) { DOCTEST_RB.translateException(); } +#endif // DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS + +#ifdef DOCTEST_CONFIG_VOID_CAST_EXPRESSIONS +#define DOCTEST_CAST_TO_VOID(...) \ + DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wuseless-cast") \ + static_cast(__VA_ARGS__); \ + DOCTEST_GCC_SUPPRESS_WARNING_POP +#else // DOCTEST_CONFIG_VOID_CAST_EXPRESSIONS +#define DOCTEST_CAST_TO_VOID(...) __VA_ARGS__; +#endif // DOCTEST_CONFIG_VOID_CAST_EXPRESSIONS + +// registers the test by initializing a dummy var with a function +#define DOCTEST_REGISTER_FUNCTION(global_prefix, f, decorators) \ + global_prefix DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), /* NOLINT */ \ + doctest::detail::regTest( \ + doctest::detail::TestCase( \ + f, __FILE__, __LINE__, \ + doctest_detail_test_suite_ns::getCurrentTestSuite()) * \ + decorators)) + +#define DOCTEST_IMPLEMENT_FIXTURE(der, base, func, decorators) \ + namespace { /* NOLINT */ \ + struct der : public base \ + { \ + void f(); \ + }; \ + static DOCTEST_INLINE_NOINLINE void func() { \ + der v; \ + v.f(); \ + } \ + DOCTEST_REGISTER_FUNCTION(DOCTEST_EMPTY, func, decorators) \ + } \ + DOCTEST_INLINE_NOINLINE void der::f() // NOLINT(misc-definitions-in-headers) + +#define DOCTEST_CREATE_AND_REGISTER_FUNCTION(f, decorators) \ + static void f(); \ + DOCTEST_REGISTER_FUNCTION(DOCTEST_EMPTY, f, decorators) \ + static void f() + +#define DOCTEST_CREATE_AND_REGISTER_FUNCTION_IN_CLASS(f, proxy, decorators) \ + static doctest::detail::funcType proxy() { return f; } \ + DOCTEST_REGISTER_FUNCTION(inline, proxy(), decorators) \ + static void f() + +// for registering tests +#define DOCTEST_TEST_CASE(decorators) \ + DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), decorators) + +// for registering tests in classes - requires C++17 for inline variables! +#if DOCTEST_CPLUSPLUS >= 201703L +#define DOCTEST_TEST_CASE_CLASS(decorators) \ + DOCTEST_CREATE_AND_REGISTER_FUNCTION_IN_CLASS(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), \ + DOCTEST_ANONYMOUS(DOCTEST_ANON_PROXY_), \ + decorators) +#else // DOCTEST_TEST_CASE_CLASS +#define DOCTEST_TEST_CASE_CLASS(...) \ + TEST_CASES_CAN_BE_REGISTERED_IN_CLASSES_ONLY_IN_CPP17_MODE_OR_WITH_VS_2017_OR_NEWER +#endif // DOCTEST_TEST_CASE_CLASS + +// for registering tests with a fixture +#define DOCTEST_TEST_CASE_FIXTURE(c, decorators) \ + DOCTEST_IMPLEMENT_FIXTURE(DOCTEST_ANONYMOUS(DOCTEST_ANON_CLASS_), c, \ + DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), decorators) + +// for converting types to strings without the header and demangling +#define DOCTEST_TYPE_TO_STRING_AS(str, ...) \ + namespace doctest { \ + template <> \ + inline String toString<__VA_ARGS__>() { \ + return str; \ + } \ + } \ + static_assert(true, "") + +#define DOCTEST_TYPE_TO_STRING(...) DOCTEST_TYPE_TO_STRING_AS(#__VA_ARGS__, __VA_ARGS__) + +#define DOCTEST_TEST_CASE_TEMPLATE_DEFINE_IMPL(dec, T, iter, func) \ + template \ + static void func(); \ + namespace { /* NOLINT */ \ + template \ + struct iter; \ + template \ + struct iter> \ + { \ + iter(const char* file, unsigned line, int index) { \ + doctest::detail::regTest(doctest::detail::TestCase(func, file, line, \ + doctest_detail_test_suite_ns::getCurrentTestSuite(), \ + doctest::toString(), \ + int(line) * 1000 + index) \ + * dec); \ + iter>(file, line, index + 1); \ + } \ + }; \ + template <> \ + struct iter> \ + { \ + iter(const char*, unsigned, int) {} \ + }; \ + } \ + template \ + static void func() + +#define DOCTEST_TEST_CASE_TEMPLATE_DEFINE(dec, T, id) \ + DOCTEST_TEST_CASE_TEMPLATE_DEFINE_IMPL(dec, T, DOCTEST_CAT(id, ITERATOR), \ + DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_)) + +#define DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(id, anon, ...) \ + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_CAT(anon, DUMMY), /* NOLINT(cert-err58-cpp, fuchsia-statically-constructed-objects) */ \ + doctest::detail::instantiationHelper( \ + DOCTEST_CAT(id, ITERATOR)<__VA_ARGS__>(__FILE__, __LINE__, 0))) + +#define DOCTEST_TEST_CASE_TEMPLATE_INVOKE(id, ...) \ + DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(id, DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_), std::tuple<__VA_ARGS__>) \ + static_assert(true, "") + +#define DOCTEST_TEST_CASE_TEMPLATE_APPLY(id, ...) \ + DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(id, DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_), __VA_ARGS__) \ + static_assert(true, "") + +#define DOCTEST_TEST_CASE_TEMPLATE_IMPL(dec, T, anon, ...) \ + DOCTEST_TEST_CASE_TEMPLATE_DEFINE_IMPL(dec, T, DOCTEST_CAT(anon, ITERATOR), anon); \ + DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(anon, anon, std::tuple<__VA_ARGS__>) \ + template \ + static void anon() + +#define DOCTEST_TEST_CASE_TEMPLATE(dec, T, ...) \ + DOCTEST_TEST_CASE_TEMPLATE_IMPL(dec, T, DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_), __VA_ARGS__) + +// for subcases +#define DOCTEST_SUBCASE(name) \ + if(const doctest::detail::Subcase & DOCTEST_ANONYMOUS(DOCTEST_ANON_SUBCASE_) DOCTEST_UNUSED = \ + doctest::detail::Subcase(name, __FILE__, __LINE__)) + +// for grouping tests in test suites by using code blocks +#define DOCTEST_TEST_SUITE_IMPL(decorators, ns_name) \ + namespace ns_name { namespace doctest_detail_test_suite_ns { \ + static DOCTEST_NOINLINE doctest::detail::TestSuite& getCurrentTestSuite() noexcept { \ + DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4640) \ + DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wexit-time-destructors") \ + DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wmissing-field-initializers") \ + static doctest::detail::TestSuite data{}; \ + static bool inited = false; \ + DOCTEST_MSVC_SUPPRESS_WARNING_POP \ + DOCTEST_CLANG_SUPPRESS_WARNING_POP \ + DOCTEST_GCC_SUPPRESS_WARNING_POP \ + if(!inited) { \ + data* decorators; \ + inited = true; \ + } \ + return data; \ + } \ + } \ + } \ + namespace ns_name + +#define DOCTEST_TEST_SUITE(decorators) \ + DOCTEST_TEST_SUITE_IMPL(decorators, DOCTEST_ANONYMOUS(DOCTEST_ANON_SUITE_)) + +// for starting a testsuite block +#define DOCTEST_TEST_SUITE_BEGIN(decorators) \ + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), /* NOLINT(cert-err58-cpp) */ \ + doctest::detail::setTestSuite(doctest::detail::TestSuite() * decorators)) \ + static_assert(true, "") + +// for ending a testsuite block +#define DOCTEST_TEST_SUITE_END \ + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), /* NOLINT(cert-err58-cpp) */ \ + doctest::detail::setTestSuite(doctest::detail::TestSuite() * "")) \ + using DOCTEST_ANONYMOUS(DOCTEST_ANON_FOR_SEMICOLON_) = int + +// for registering exception translators +#define DOCTEST_REGISTER_EXCEPTION_TRANSLATOR_IMPL(translatorName, signature) \ + inline doctest::String translatorName(signature); \ + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_TRANSLATOR_), /* NOLINT(cert-err58-cpp) */ \ + doctest::registerExceptionTranslator(translatorName)) \ + doctest::String translatorName(signature) + +#define DOCTEST_REGISTER_EXCEPTION_TRANSLATOR(signature) \ + DOCTEST_REGISTER_EXCEPTION_TRANSLATOR_IMPL(DOCTEST_ANONYMOUS(DOCTEST_ANON_TRANSLATOR_), \ + signature) + +// for registering reporters +#define DOCTEST_REGISTER_REPORTER(name, priority, reporter) \ + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_REPORTER_), /* NOLINT(cert-err58-cpp) */ \ + doctest::registerReporter(name, priority, true)) \ + static_assert(true, "") + +// for registering listeners +#define DOCTEST_REGISTER_LISTENER(name, priority, reporter) \ + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_REPORTER_), /* NOLINT(cert-err58-cpp) */ \ + doctest::registerReporter(name, priority, false)) \ + static_assert(true, "") + +// clang-format off +// for logging - disabling formatting because it's important to have these on 2 separate lines - see PR #557 +#define DOCTEST_INFO(...) \ + DOCTEST_INFO_IMPL(DOCTEST_ANONYMOUS(DOCTEST_CAPTURE_), \ + DOCTEST_ANONYMOUS(DOCTEST_CAPTURE_OTHER_), \ + __VA_ARGS__) +// clang-format on + +#define DOCTEST_INFO_IMPL(mb_name, s_name, ...) \ + auto DOCTEST_ANONYMOUS(DOCTEST_CAPTURE_) = doctest::detail::MakeContextScope( \ + [&](std::ostream* s_name) { \ + doctest::detail::MessageBuilder mb_name(__FILE__, __LINE__, doctest::assertType::is_warn); \ + mb_name.m_stream = s_name; \ + mb_name * __VA_ARGS__; \ + }) + +#define DOCTEST_CAPTURE(x) DOCTEST_INFO(#x " := ", x) + +#define DOCTEST_ADD_AT_IMPL(type, file, line, mb, ...) \ + DOCTEST_FUNC_SCOPE_BEGIN { \ + doctest::detail::MessageBuilder mb(file, line, doctest::assertType::type); \ + mb * __VA_ARGS__; \ + if(mb.log()) \ + DOCTEST_BREAK_INTO_DEBUGGER(); \ + mb.react(); \ + } DOCTEST_FUNC_SCOPE_END + +// clang-format off +#define DOCTEST_ADD_MESSAGE_AT(file, line, ...) DOCTEST_ADD_AT_IMPL(is_warn, file, line, DOCTEST_ANONYMOUS(DOCTEST_MESSAGE_), __VA_ARGS__) +#define DOCTEST_ADD_FAIL_CHECK_AT(file, line, ...) DOCTEST_ADD_AT_IMPL(is_check, file, line, DOCTEST_ANONYMOUS(DOCTEST_MESSAGE_), __VA_ARGS__) +#define DOCTEST_ADD_FAIL_AT(file, line, ...) DOCTEST_ADD_AT_IMPL(is_require, file, line, DOCTEST_ANONYMOUS(DOCTEST_MESSAGE_), __VA_ARGS__) +// clang-format on + +#define DOCTEST_MESSAGE(...) DOCTEST_ADD_MESSAGE_AT(__FILE__, __LINE__, __VA_ARGS__) +#define DOCTEST_FAIL_CHECK(...) DOCTEST_ADD_FAIL_CHECK_AT(__FILE__, __LINE__, __VA_ARGS__) +#define DOCTEST_FAIL(...) DOCTEST_ADD_FAIL_AT(__FILE__, __LINE__, __VA_ARGS__) + +#define DOCTEST_TO_LVALUE(...) __VA_ARGS__ // Not removed to keep backwards compatibility. + +#ifndef DOCTEST_CONFIG_SUPER_FAST_ASSERTS + +#define DOCTEST_ASSERT_IMPLEMENT_2(assert_type, ...) \ + DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Woverloaded-shift-op-parentheses") \ + /* NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) */ \ + doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ + __LINE__, #__VA_ARGS__); \ + DOCTEST_WRAP_IN_TRY(DOCTEST_RB.setResult( \ + doctest::detail::ExpressionDecomposer(doctest::assertType::assert_type) \ + << __VA_ARGS__)) /* NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) */ \ + DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB) \ + DOCTEST_CLANG_SUPPRESS_WARNING_POP + +#define DOCTEST_ASSERT_IMPLEMENT_1(assert_type, ...) \ + DOCTEST_FUNC_SCOPE_BEGIN { \ + DOCTEST_ASSERT_IMPLEMENT_2(assert_type, __VA_ARGS__); \ + } DOCTEST_FUNC_SCOPE_END // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks) + +#define DOCTEST_BINARY_ASSERT(assert_type, comp, ...) \ + DOCTEST_FUNC_SCOPE_BEGIN { \ + doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ + __LINE__, #__VA_ARGS__); \ + DOCTEST_WRAP_IN_TRY( \ + DOCTEST_RB.binary_assert( \ + __VA_ARGS__)) \ + DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ + } DOCTEST_FUNC_SCOPE_END + +#define DOCTEST_UNARY_ASSERT(assert_type, ...) \ + DOCTEST_FUNC_SCOPE_BEGIN { \ + doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ + __LINE__, #__VA_ARGS__); \ + DOCTEST_WRAP_IN_TRY(DOCTEST_RB.unary_assert(__VA_ARGS__)) \ + DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ + } DOCTEST_FUNC_SCOPE_END + +#else // DOCTEST_CONFIG_SUPER_FAST_ASSERTS + +// necessary for _MESSAGE +#define DOCTEST_ASSERT_IMPLEMENT_2 DOCTEST_ASSERT_IMPLEMENT_1 + +#define DOCTEST_ASSERT_IMPLEMENT_1(assert_type, ...) \ + DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Woverloaded-shift-op-parentheses") \ + doctest::detail::decomp_assert( \ + doctest::assertType::assert_type, __FILE__, __LINE__, #__VA_ARGS__, \ + doctest::detail::ExpressionDecomposer(doctest::assertType::assert_type) \ + << __VA_ARGS__) DOCTEST_CLANG_SUPPRESS_WARNING_POP + +#define DOCTEST_BINARY_ASSERT(assert_type, comparison, ...) \ + doctest::detail::binary_assert( \ + doctest::assertType::assert_type, __FILE__, __LINE__, #__VA_ARGS__, __VA_ARGS__) + +#define DOCTEST_UNARY_ASSERT(assert_type, ...) \ + doctest::detail::unary_assert(doctest::assertType::assert_type, __FILE__, __LINE__, \ + #__VA_ARGS__, __VA_ARGS__) + +#endif // DOCTEST_CONFIG_SUPER_FAST_ASSERTS + +#define DOCTEST_WARN(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_WARN, __VA_ARGS__) +#define DOCTEST_CHECK(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_CHECK, __VA_ARGS__) +#define DOCTEST_REQUIRE(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_REQUIRE, __VA_ARGS__) +#define DOCTEST_WARN_FALSE(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_WARN_FALSE, __VA_ARGS__) +#define DOCTEST_CHECK_FALSE(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_CHECK_FALSE, __VA_ARGS__) +#define DOCTEST_REQUIRE_FALSE(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_REQUIRE_FALSE, __VA_ARGS__) + +// clang-format off +#define DOCTEST_WARN_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN, cond); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_CHECK_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK, cond); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_REQUIRE_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE, cond); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN_FALSE, cond); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK_FALSE, cond); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE_FALSE, cond); } DOCTEST_FUNC_SCOPE_END +// clang-format on + +#define DOCTEST_WARN_EQ(...) DOCTEST_BINARY_ASSERT(DT_WARN_EQ, eq, __VA_ARGS__) +#define DOCTEST_CHECK_EQ(...) DOCTEST_BINARY_ASSERT(DT_CHECK_EQ, eq, __VA_ARGS__) +#define DOCTEST_REQUIRE_EQ(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_EQ, eq, __VA_ARGS__) +#define DOCTEST_WARN_NE(...) DOCTEST_BINARY_ASSERT(DT_WARN_NE, ne, __VA_ARGS__) +#define DOCTEST_CHECK_NE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_NE, ne, __VA_ARGS__) +#define DOCTEST_REQUIRE_NE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_NE, ne, __VA_ARGS__) +#define DOCTEST_WARN_GT(...) DOCTEST_BINARY_ASSERT(DT_WARN_GT, gt, __VA_ARGS__) +#define DOCTEST_CHECK_GT(...) DOCTEST_BINARY_ASSERT(DT_CHECK_GT, gt, __VA_ARGS__) +#define DOCTEST_REQUIRE_GT(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_GT, gt, __VA_ARGS__) +#define DOCTEST_WARN_LT(...) DOCTEST_BINARY_ASSERT(DT_WARN_LT, lt, __VA_ARGS__) +#define DOCTEST_CHECK_LT(...) DOCTEST_BINARY_ASSERT(DT_CHECK_LT, lt, __VA_ARGS__) +#define DOCTEST_REQUIRE_LT(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_LT, lt, __VA_ARGS__) +#define DOCTEST_WARN_GE(...) DOCTEST_BINARY_ASSERT(DT_WARN_GE, ge, __VA_ARGS__) +#define DOCTEST_CHECK_GE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_GE, ge, __VA_ARGS__) +#define DOCTEST_REQUIRE_GE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_GE, ge, __VA_ARGS__) +#define DOCTEST_WARN_LE(...) DOCTEST_BINARY_ASSERT(DT_WARN_LE, le, __VA_ARGS__) +#define DOCTEST_CHECK_LE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_LE, le, __VA_ARGS__) +#define DOCTEST_REQUIRE_LE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_LE, le, __VA_ARGS__) + +#define DOCTEST_WARN_UNARY(...) DOCTEST_UNARY_ASSERT(DT_WARN_UNARY, __VA_ARGS__) +#define DOCTEST_CHECK_UNARY(...) DOCTEST_UNARY_ASSERT(DT_CHECK_UNARY, __VA_ARGS__) +#define DOCTEST_REQUIRE_UNARY(...) DOCTEST_UNARY_ASSERT(DT_REQUIRE_UNARY, __VA_ARGS__) +#define DOCTEST_WARN_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_WARN_UNARY_FALSE, __VA_ARGS__) +#define DOCTEST_CHECK_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_CHECK_UNARY_FALSE, __VA_ARGS__) +#define DOCTEST_REQUIRE_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_REQUIRE_UNARY_FALSE, __VA_ARGS__) + +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS + +#define DOCTEST_ASSERT_THROWS_AS(expr, assert_type, message, ...) \ + DOCTEST_FUNC_SCOPE_BEGIN { \ + if(!doctest::getContextOptions()->no_throw) { \ + doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ + __LINE__, #expr, #__VA_ARGS__, message); \ + try { \ + DOCTEST_CAST_TO_VOID(expr) \ + } catch(const typename doctest::detail::types::remove_const< \ + typename doctest::detail::types::remove_reference<__VA_ARGS__>::type>::type&) {\ + DOCTEST_RB.translateException(); \ + DOCTEST_RB.m_threw_as = true; \ + } catch(...) { DOCTEST_RB.translateException(); } \ + DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ + } else { /* NOLINT(*-else-after-return) */ \ + DOCTEST_FUNC_SCOPE_RET(false); \ + } \ + } DOCTEST_FUNC_SCOPE_END + +#define DOCTEST_ASSERT_THROWS_WITH(expr, expr_str, assert_type, ...) \ + DOCTEST_FUNC_SCOPE_BEGIN { \ + if(!doctest::getContextOptions()->no_throw) { \ + doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ + __LINE__, expr_str, "", __VA_ARGS__); \ + try { \ + DOCTEST_CAST_TO_VOID(expr) \ + } catch(...) { DOCTEST_RB.translateException(); } \ + DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ + } else { /* NOLINT(*-else-after-return) */ \ + DOCTEST_FUNC_SCOPE_RET(false); \ + } \ + } DOCTEST_FUNC_SCOPE_END + +#define DOCTEST_ASSERT_NOTHROW(assert_type, ...) \ + DOCTEST_FUNC_SCOPE_BEGIN { \ + doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ + __LINE__, #__VA_ARGS__); \ + try { \ + DOCTEST_CAST_TO_VOID(__VA_ARGS__) \ + } catch(...) { DOCTEST_RB.translateException(); } \ + DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ + } DOCTEST_FUNC_SCOPE_END + +// clang-format off +#define DOCTEST_WARN_THROWS(...) DOCTEST_ASSERT_THROWS_WITH((__VA_ARGS__), #__VA_ARGS__, DT_WARN_THROWS, "") +#define DOCTEST_CHECK_THROWS(...) DOCTEST_ASSERT_THROWS_WITH((__VA_ARGS__), #__VA_ARGS__, DT_CHECK_THROWS, "") +#define DOCTEST_REQUIRE_THROWS(...) DOCTEST_ASSERT_THROWS_WITH((__VA_ARGS__), #__VA_ARGS__, DT_REQUIRE_THROWS, "") + +#define DOCTEST_WARN_THROWS_AS(expr, ...) DOCTEST_ASSERT_THROWS_AS(expr, DT_WARN_THROWS_AS, "", __VA_ARGS__) +#define DOCTEST_CHECK_THROWS_AS(expr, ...) DOCTEST_ASSERT_THROWS_AS(expr, DT_CHECK_THROWS_AS, "", __VA_ARGS__) +#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) DOCTEST_ASSERT_THROWS_AS(expr, DT_REQUIRE_THROWS_AS, "", __VA_ARGS__) + +#define DOCTEST_WARN_THROWS_WITH(expr, ...) DOCTEST_ASSERT_THROWS_WITH(expr, #expr, DT_WARN_THROWS_WITH, __VA_ARGS__) +#define DOCTEST_CHECK_THROWS_WITH(expr, ...) DOCTEST_ASSERT_THROWS_WITH(expr, #expr, DT_CHECK_THROWS_WITH, __VA_ARGS__) +#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) DOCTEST_ASSERT_THROWS_WITH(expr, #expr, DT_REQUIRE_THROWS_WITH, __VA_ARGS__) + +#define DOCTEST_WARN_THROWS_WITH_AS(expr, message, ...) DOCTEST_ASSERT_THROWS_AS(expr, DT_WARN_THROWS_WITH_AS, message, __VA_ARGS__) +#define DOCTEST_CHECK_THROWS_WITH_AS(expr, message, ...) DOCTEST_ASSERT_THROWS_AS(expr, DT_CHECK_THROWS_WITH_AS, message, __VA_ARGS__) +#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, message, ...) DOCTEST_ASSERT_THROWS_AS(expr, DT_REQUIRE_THROWS_WITH_AS, message, __VA_ARGS__) + +#define DOCTEST_WARN_NOTHROW(...) DOCTEST_ASSERT_NOTHROW(DT_WARN_NOTHROW, __VA_ARGS__) +#define DOCTEST_CHECK_NOTHROW(...) DOCTEST_ASSERT_NOTHROW(DT_CHECK_NOTHROW, __VA_ARGS__) +#define DOCTEST_REQUIRE_NOTHROW(...) DOCTEST_ASSERT_NOTHROW(DT_REQUIRE_NOTHROW, __VA_ARGS__) + +#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS(expr); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS(expr); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS(expr); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_AS(expr, ex); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_AS(expr, ex); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_AS(expr, ex); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH(expr, with); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH(expr, with); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH(expr, with); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH_AS(expr, with, ex); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ex); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ex); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_NOTHROW(expr); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_NOTHROW(expr); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_NOTHROW(expr); } DOCTEST_FUNC_SCOPE_END +// clang-format on + +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS + +// ================================================================================================= +// == WHAT FOLLOWS IS VERSIONS OF THE MACROS THAT DO NOT DO ANY REGISTERING! == +// == THIS CAN BE ENABLED BY DEFINING DOCTEST_CONFIG_DISABLE GLOBALLY! == +// ================================================================================================= +#else // DOCTEST_CONFIG_DISABLE + +#define DOCTEST_IMPLEMENT_FIXTURE(der, base, func, name) \ + namespace /* NOLINT */ { \ + template \ + struct der : public base \ + { void f(); }; \ + } \ + template \ + inline void der::f() + +#define DOCTEST_CREATE_AND_REGISTER_FUNCTION(f, name) \ + template \ + static inline void f() + +// for registering tests +#define DOCTEST_TEST_CASE(name) \ + DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), name) + +// for registering tests in classes +#define DOCTEST_TEST_CASE_CLASS(name) \ + DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), name) + +// for registering tests with a fixture +#define DOCTEST_TEST_CASE_FIXTURE(x, name) \ + DOCTEST_IMPLEMENT_FIXTURE(DOCTEST_ANONYMOUS(DOCTEST_ANON_CLASS_), x, \ + DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), name) + +// for converting types to strings without the header and demangling +#define DOCTEST_TYPE_TO_STRING_AS(str, ...) static_assert(true, "") +#define DOCTEST_TYPE_TO_STRING(...) static_assert(true, "") + +// for typed tests +#define DOCTEST_TEST_CASE_TEMPLATE(name, type, ...) \ + template \ + inline void DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_)() + +#define DOCTEST_TEST_CASE_TEMPLATE_DEFINE(name, type, id) \ + template \ + inline void DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_)() + +#define DOCTEST_TEST_CASE_TEMPLATE_INVOKE(id, ...) static_assert(true, "") +#define DOCTEST_TEST_CASE_TEMPLATE_APPLY(id, ...) static_assert(true, "") + +// for subcases +#define DOCTEST_SUBCASE(name) + +// for a testsuite block +#define DOCTEST_TEST_SUITE(name) namespace // NOLINT + +// for starting a testsuite block +#define DOCTEST_TEST_SUITE_BEGIN(name) static_assert(true, "") + +// for ending a testsuite block +#define DOCTEST_TEST_SUITE_END using DOCTEST_ANONYMOUS(DOCTEST_ANON_FOR_SEMICOLON_) = int + +#define DOCTEST_REGISTER_EXCEPTION_TRANSLATOR(signature) \ + template \ + static inline doctest::String DOCTEST_ANONYMOUS(DOCTEST_ANON_TRANSLATOR_)(signature) + +#define DOCTEST_REGISTER_REPORTER(name, priority, reporter) +#define DOCTEST_REGISTER_LISTENER(name, priority, reporter) + +#define DOCTEST_INFO(...) (static_cast(0)) +#define DOCTEST_CAPTURE(x) (static_cast(0)) +#define DOCTEST_ADD_MESSAGE_AT(file, line, ...) (static_cast(0)) +#define DOCTEST_ADD_FAIL_CHECK_AT(file, line, ...) (static_cast(0)) +#define DOCTEST_ADD_FAIL_AT(file, line, ...) (static_cast(0)) +#define DOCTEST_MESSAGE(...) (static_cast(0)) +#define DOCTEST_FAIL_CHECK(...) (static_cast(0)) +#define DOCTEST_FAIL(...) (static_cast(0)) + +#if defined(DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED) \ + && defined(DOCTEST_CONFIG_ASSERTS_RETURN_VALUES) + +#define DOCTEST_WARN(...) [&] { return __VA_ARGS__; }() +#define DOCTEST_CHECK(...) [&] { return __VA_ARGS__; }() +#define DOCTEST_REQUIRE(...) [&] { return __VA_ARGS__; }() +#define DOCTEST_WARN_FALSE(...) [&] { return !(__VA_ARGS__); }() +#define DOCTEST_CHECK_FALSE(...) [&] { return !(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_FALSE(...) [&] { return !(__VA_ARGS__); }() + +#define DOCTEST_WARN_MESSAGE(cond, ...) [&] { return cond; }() +#define DOCTEST_CHECK_MESSAGE(cond, ...) [&] { return cond; }() +#define DOCTEST_REQUIRE_MESSAGE(cond, ...) [&] { return cond; }() +#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) [&] { return !(cond); }() +#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) [&] { return !(cond); }() +#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) [&] { return !(cond); }() + +namespace doctest { +namespace detail { +#define DOCTEST_RELATIONAL_OP(name, op) \ + template \ + bool name(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) { return lhs op rhs; } + + DOCTEST_RELATIONAL_OP(eq, ==) + DOCTEST_RELATIONAL_OP(ne, !=) + DOCTEST_RELATIONAL_OP(lt, <) + DOCTEST_RELATIONAL_OP(gt, >) + DOCTEST_RELATIONAL_OP(le, <=) + DOCTEST_RELATIONAL_OP(ge, >=) +} // namespace detail +} // namespace doctest + +#define DOCTEST_WARN_EQ(...) [&] { return doctest::detail::eq(__VA_ARGS__); }() +#define DOCTEST_CHECK_EQ(...) [&] { return doctest::detail::eq(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_EQ(...) [&] { return doctest::detail::eq(__VA_ARGS__); }() +#define DOCTEST_WARN_NE(...) [&] { return doctest::detail::ne(__VA_ARGS__); }() +#define DOCTEST_CHECK_NE(...) [&] { return doctest::detail::ne(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_NE(...) [&] { return doctest::detail::ne(__VA_ARGS__); }() +#define DOCTEST_WARN_LT(...) [&] { return doctest::detail::lt(__VA_ARGS__); }() +#define DOCTEST_CHECK_LT(...) [&] { return doctest::detail::lt(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_LT(...) [&] { return doctest::detail::lt(__VA_ARGS__); }() +#define DOCTEST_WARN_GT(...) [&] { return doctest::detail::gt(__VA_ARGS__); }() +#define DOCTEST_CHECK_GT(...) [&] { return doctest::detail::gt(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_GT(...) [&] { return doctest::detail::gt(__VA_ARGS__); }() +#define DOCTEST_WARN_LE(...) [&] { return doctest::detail::le(__VA_ARGS__); }() +#define DOCTEST_CHECK_LE(...) [&] { return doctest::detail::le(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_LE(...) [&] { return doctest::detail::le(__VA_ARGS__); }() +#define DOCTEST_WARN_GE(...) [&] { return doctest::detail::ge(__VA_ARGS__); }() +#define DOCTEST_CHECK_GE(...) [&] { return doctest::detail::ge(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_GE(...) [&] { return doctest::detail::ge(__VA_ARGS__); }() +#define DOCTEST_WARN_UNARY(...) [&] { return __VA_ARGS__; }() +#define DOCTEST_CHECK_UNARY(...) [&] { return __VA_ARGS__; }() +#define DOCTEST_REQUIRE_UNARY(...) [&] { return __VA_ARGS__; }() +#define DOCTEST_WARN_UNARY_FALSE(...) [&] { return !(__VA_ARGS__); }() +#define DOCTEST_CHECK_UNARY_FALSE(...) [&] { return !(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_UNARY_FALSE(...) [&] { return !(__VA_ARGS__); }() + +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS + +#define DOCTEST_WARN_THROWS_WITH(expr, with, ...) [] { static_assert(false, "Exception translation is not available when doctest is disabled."); return false; }() +#define DOCTEST_CHECK_THROWS_WITH(expr, with, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_REQUIRE_THROWS_WITH(expr, with, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,) + +#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,) + +#define DOCTEST_WARN_THROWS(...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }() +#define DOCTEST_CHECK_THROWS(...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }() +#define DOCTEST_REQUIRE_THROWS(...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }() +#define DOCTEST_WARN_THROWS_AS(expr, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }() +#define DOCTEST_CHECK_THROWS_AS(expr, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }() +#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }() +#define DOCTEST_WARN_NOTHROW(...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }() +#define DOCTEST_CHECK_NOTHROW(...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }() +#define DOCTEST_REQUIRE_NOTHROW(...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }() + +#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }() +#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }() +#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }() +#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }() +#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }() +#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }() +#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }() +#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }() +#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }() + +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS + +#else // DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED + +#define DOCTEST_WARN(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_FALSE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_FALSE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_FALSE(...) DOCTEST_FUNC_EMPTY + +#define DOCTEST_WARN_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY + +#define DOCTEST_WARN_EQ(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_EQ(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_EQ(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_NE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_NE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_NE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_GT(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_GT(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_GT(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_LT(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_LT(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_LT(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_GE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_GE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_GE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_LE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_LE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_LE(...) DOCTEST_FUNC_EMPTY + +#define DOCTEST_WARN_UNARY(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_UNARY(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_UNARY(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_UNARY_FALSE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_UNARY_FALSE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_UNARY_FALSE(...) DOCTEST_FUNC_EMPTY + +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS + +#define DOCTEST_WARN_THROWS(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_THROWS_AS(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS_AS(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_THROWS_WITH(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS_WITH(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_NOTHROW(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_NOTHROW(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_NOTHROW(...) DOCTEST_FUNC_EMPTY + +#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY + +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS + +#endif // DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED + +#endif // DOCTEST_CONFIG_DISABLE + +#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS + +#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS +#define DOCTEST_EXCEPTION_EMPTY_FUNC DOCTEST_FUNC_EMPTY +#else // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS +#define DOCTEST_EXCEPTION_EMPTY_FUNC [] { static_assert(false, "Exceptions are disabled! " \ + "Use DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS if you want to compile with exceptions disabled."); return false; }() + +#undef DOCTEST_REQUIRE +#undef DOCTEST_REQUIRE_FALSE +#undef DOCTEST_REQUIRE_MESSAGE +#undef DOCTEST_REQUIRE_FALSE_MESSAGE +#undef DOCTEST_REQUIRE_EQ +#undef DOCTEST_REQUIRE_NE +#undef DOCTEST_REQUIRE_GT +#undef DOCTEST_REQUIRE_LT +#undef DOCTEST_REQUIRE_GE +#undef DOCTEST_REQUIRE_LE +#undef DOCTEST_REQUIRE_UNARY +#undef DOCTEST_REQUIRE_UNARY_FALSE + +#define DOCTEST_REQUIRE DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_FALSE DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_MESSAGE DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_FALSE_MESSAGE DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_EQ DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_NE DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_GT DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_LT DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_GE DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_LE DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_UNARY DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_UNARY_FALSE DOCTEST_EXCEPTION_EMPTY_FUNC + +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS + +#define DOCTEST_WARN_THROWS(...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS(...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS(...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_THROWS_AS(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS_AS(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_THROWS_WITH(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS_WITH(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_NOTHROW(...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_NOTHROW(...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_NOTHROW(...) DOCTEST_EXCEPTION_EMPTY_FUNC + +#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC + +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS + +// clang-format off +// KEPT FOR BACKWARDS COMPATIBILITY - FORWARDING TO THE RIGHT MACROS +#define DOCTEST_FAST_WARN_EQ DOCTEST_WARN_EQ +#define DOCTEST_FAST_CHECK_EQ DOCTEST_CHECK_EQ +#define DOCTEST_FAST_REQUIRE_EQ DOCTEST_REQUIRE_EQ +#define DOCTEST_FAST_WARN_NE DOCTEST_WARN_NE +#define DOCTEST_FAST_CHECK_NE DOCTEST_CHECK_NE +#define DOCTEST_FAST_REQUIRE_NE DOCTEST_REQUIRE_NE +#define DOCTEST_FAST_WARN_GT DOCTEST_WARN_GT +#define DOCTEST_FAST_CHECK_GT DOCTEST_CHECK_GT +#define DOCTEST_FAST_REQUIRE_GT DOCTEST_REQUIRE_GT +#define DOCTEST_FAST_WARN_LT DOCTEST_WARN_LT +#define DOCTEST_FAST_CHECK_LT DOCTEST_CHECK_LT +#define DOCTEST_FAST_REQUIRE_LT DOCTEST_REQUIRE_LT +#define DOCTEST_FAST_WARN_GE DOCTEST_WARN_GE +#define DOCTEST_FAST_CHECK_GE DOCTEST_CHECK_GE +#define DOCTEST_FAST_REQUIRE_GE DOCTEST_REQUIRE_GE +#define DOCTEST_FAST_WARN_LE DOCTEST_WARN_LE +#define DOCTEST_FAST_CHECK_LE DOCTEST_CHECK_LE +#define DOCTEST_FAST_REQUIRE_LE DOCTEST_REQUIRE_LE + +#define DOCTEST_FAST_WARN_UNARY DOCTEST_WARN_UNARY +#define DOCTEST_FAST_CHECK_UNARY DOCTEST_CHECK_UNARY +#define DOCTEST_FAST_REQUIRE_UNARY DOCTEST_REQUIRE_UNARY +#define DOCTEST_FAST_WARN_UNARY_FALSE DOCTEST_WARN_UNARY_FALSE +#define DOCTEST_FAST_CHECK_UNARY_FALSE DOCTEST_CHECK_UNARY_FALSE +#define DOCTEST_FAST_REQUIRE_UNARY_FALSE DOCTEST_REQUIRE_UNARY_FALSE + +#define DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE(id, ...) DOCTEST_TEST_CASE_TEMPLATE_INVOKE(id,__VA_ARGS__) +// clang-format on + +// BDD style macros +// clang-format off +#define DOCTEST_SCENARIO(name) DOCTEST_TEST_CASE(" Scenario: " name) +#define DOCTEST_SCENARIO_CLASS(name) DOCTEST_TEST_CASE_CLASS(" Scenario: " name) +#define DOCTEST_SCENARIO_TEMPLATE(name, T, ...) DOCTEST_TEST_CASE_TEMPLATE(" Scenario: " name, T, __VA_ARGS__) +#define DOCTEST_SCENARIO_TEMPLATE_DEFINE(name, T, id) DOCTEST_TEST_CASE_TEMPLATE_DEFINE(" Scenario: " name, T, id) + +#define DOCTEST_GIVEN(name) DOCTEST_SUBCASE(" Given: " name) +#define DOCTEST_WHEN(name) DOCTEST_SUBCASE(" When: " name) +#define DOCTEST_AND_WHEN(name) DOCTEST_SUBCASE("And when: " name) +#define DOCTEST_THEN(name) DOCTEST_SUBCASE(" Then: " name) +#define DOCTEST_AND_THEN(name) DOCTEST_SUBCASE(" And: " name) +// clang-format on + +// == SHORT VERSIONS OF THE MACROS +#ifndef DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES + +#define TEST_CASE(name) DOCTEST_TEST_CASE(name) +#define TEST_CASE_CLASS(name) DOCTEST_TEST_CASE_CLASS(name) +#define TEST_CASE_FIXTURE(x, name) DOCTEST_TEST_CASE_FIXTURE(x, name) +#define TYPE_TO_STRING_AS(str, ...) DOCTEST_TYPE_TO_STRING_AS(str, __VA_ARGS__) +#define TYPE_TO_STRING(...) DOCTEST_TYPE_TO_STRING(__VA_ARGS__) +#define TEST_CASE_TEMPLATE(name, T, ...) DOCTEST_TEST_CASE_TEMPLATE(name, T, __VA_ARGS__) +#define TEST_CASE_TEMPLATE_DEFINE(name, T, id) DOCTEST_TEST_CASE_TEMPLATE_DEFINE(name, T, id) +#define TEST_CASE_TEMPLATE_INVOKE(id, ...) DOCTEST_TEST_CASE_TEMPLATE_INVOKE(id, __VA_ARGS__) +#define TEST_CASE_TEMPLATE_APPLY(id, ...) DOCTEST_TEST_CASE_TEMPLATE_APPLY(id, __VA_ARGS__) +#define SUBCASE(name) DOCTEST_SUBCASE(name) +#define TEST_SUITE(decorators) DOCTEST_TEST_SUITE(decorators) +#define TEST_SUITE_BEGIN(name) DOCTEST_TEST_SUITE_BEGIN(name) +#define TEST_SUITE_END DOCTEST_TEST_SUITE_END +#define REGISTER_EXCEPTION_TRANSLATOR(signature) DOCTEST_REGISTER_EXCEPTION_TRANSLATOR(signature) +#define REGISTER_REPORTER(name, priority, reporter) DOCTEST_REGISTER_REPORTER(name, priority, reporter) +#define REGISTER_LISTENER(name, priority, reporter) DOCTEST_REGISTER_LISTENER(name, priority, reporter) +#define INFO(...) DOCTEST_INFO(__VA_ARGS__) +#define CAPTURE(x) DOCTEST_CAPTURE(x) +#define ADD_MESSAGE_AT(file, line, ...) DOCTEST_ADD_MESSAGE_AT(file, line, __VA_ARGS__) +#define ADD_FAIL_CHECK_AT(file, line, ...) DOCTEST_ADD_FAIL_CHECK_AT(file, line, __VA_ARGS__) +#define ADD_FAIL_AT(file, line, ...) DOCTEST_ADD_FAIL_AT(file, line, __VA_ARGS__) +#define MESSAGE(...) DOCTEST_MESSAGE(__VA_ARGS__) +#define FAIL_CHECK(...) DOCTEST_FAIL_CHECK(__VA_ARGS__) +#define FAIL(...) DOCTEST_FAIL(__VA_ARGS__) +#define TO_LVALUE(...) DOCTEST_TO_LVALUE(__VA_ARGS__) + +#define WARN(...) DOCTEST_WARN(__VA_ARGS__) +#define WARN_FALSE(...) DOCTEST_WARN_FALSE(__VA_ARGS__) +#define WARN_THROWS(...) DOCTEST_WARN_THROWS(__VA_ARGS__) +#define WARN_THROWS_AS(expr, ...) DOCTEST_WARN_THROWS_AS(expr, __VA_ARGS__) +#define WARN_THROWS_WITH(expr, ...) DOCTEST_WARN_THROWS_WITH(expr, __VA_ARGS__) +#define WARN_THROWS_WITH_AS(expr, with, ...) DOCTEST_WARN_THROWS_WITH_AS(expr, with, __VA_ARGS__) +#define WARN_NOTHROW(...) DOCTEST_WARN_NOTHROW(__VA_ARGS__) +#define CHECK(...) DOCTEST_CHECK(__VA_ARGS__) +#define CHECK_FALSE(...) DOCTEST_CHECK_FALSE(__VA_ARGS__) +#define CHECK_THROWS(...) DOCTEST_CHECK_THROWS(__VA_ARGS__) +#define CHECK_THROWS_AS(expr, ...) DOCTEST_CHECK_THROWS_AS(expr, __VA_ARGS__) +#define CHECK_THROWS_WITH(expr, ...) DOCTEST_CHECK_THROWS_WITH(expr, __VA_ARGS__) +#define CHECK_THROWS_WITH_AS(expr, with, ...) DOCTEST_CHECK_THROWS_WITH_AS(expr, with, __VA_ARGS__) +#define CHECK_NOTHROW(...) DOCTEST_CHECK_NOTHROW(__VA_ARGS__) +#define REQUIRE(...) DOCTEST_REQUIRE(__VA_ARGS__) +#define REQUIRE_FALSE(...) DOCTEST_REQUIRE_FALSE(__VA_ARGS__) +#define REQUIRE_THROWS(...) DOCTEST_REQUIRE_THROWS(__VA_ARGS__) +#define REQUIRE_THROWS_AS(expr, ...) DOCTEST_REQUIRE_THROWS_AS(expr, __VA_ARGS__) +#define REQUIRE_THROWS_WITH(expr, ...) DOCTEST_REQUIRE_THROWS_WITH(expr, __VA_ARGS__) +#define REQUIRE_THROWS_WITH_AS(expr, with, ...) DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, __VA_ARGS__) +#define REQUIRE_NOTHROW(...) DOCTEST_REQUIRE_NOTHROW(__VA_ARGS__) + +#define WARN_MESSAGE(cond, ...) DOCTEST_WARN_MESSAGE(cond, __VA_ARGS__) +#define WARN_FALSE_MESSAGE(cond, ...) DOCTEST_WARN_FALSE_MESSAGE(cond, __VA_ARGS__) +#define WARN_THROWS_MESSAGE(expr, ...) DOCTEST_WARN_THROWS_MESSAGE(expr, __VA_ARGS__) +#define WARN_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, __VA_ARGS__) +#define WARN_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, __VA_ARGS__) +#define WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, __VA_ARGS__) +#define WARN_NOTHROW_MESSAGE(expr, ...) DOCTEST_WARN_NOTHROW_MESSAGE(expr, __VA_ARGS__) +#define CHECK_MESSAGE(cond, ...) DOCTEST_CHECK_MESSAGE(cond, __VA_ARGS__) +#define CHECK_FALSE_MESSAGE(cond, ...) DOCTEST_CHECK_FALSE_MESSAGE(cond, __VA_ARGS__) +#define CHECK_THROWS_MESSAGE(expr, ...) DOCTEST_CHECK_THROWS_MESSAGE(expr, __VA_ARGS__) +#define CHECK_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, __VA_ARGS__) +#define CHECK_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, __VA_ARGS__) +#define CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, __VA_ARGS__) +#define CHECK_NOTHROW_MESSAGE(expr, ...) DOCTEST_CHECK_NOTHROW_MESSAGE(expr, __VA_ARGS__) +#define REQUIRE_MESSAGE(cond, ...) DOCTEST_REQUIRE_MESSAGE(cond, __VA_ARGS__) +#define REQUIRE_FALSE_MESSAGE(cond, ...) DOCTEST_REQUIRE_FALSE_MESSAGE(cond, __VA_ARGS__) +#define REQUIRE_THROWS_MESSAGE(expr, ...) DOCTEST_REQUIRE_THROWS_MESSAGE(expr, __VA_ARGS__) +#define REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, __VA_ARGS__) +#define REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, __VA_ARGS__) +#define REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, __VA_ARGS__) +#define REQUIRE_NOTHROW_MESSAGE(expr, ...) DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, __VA_ARGS__) + +#define SCENARIO(name) DOCTEST_SCENARIO(name) +#define SCENARIO_CLASS(name) DOCTEST_SCENARIO_CLASS(name) +#define SCENARIO_TEMPLATE(name, T, ...) DOCTEST_SCENARIO_TEMPLATE(name, T, __VA_ARGS__) +#define SCENARIO_TEMPLATE_DEFINE(name, T, id) DOCTEST_SCENARIO_TEMPLATE_DEFINE(name, T, id) +#define GIVEN(name) DOCTEST_GIVEN(name) +#define WHEN(name) DOCTEST_WHEN(name) +#define AND_WHEN(name) DOCTEST_AND_WHEN(name) +#define THEN(name) DOCTEST_THEN(name) +#define AND_THEN(name) DOCTEST_AND_THEN(name) + +#define WARN_EQ(...) DOCTEST_WARN_EQ(__VA_ARGS__) +#define CHECK_EQ(...) DOCTEST_CHECK_EQ(__VA_ARGS__) +#define REQUIRE_EQ(...) DOCTEST_REQUIRE_EQ(__VA_ARGS__) +#define WARN_NE(...) DOCTEST_WARN_NE(__VA_ARGS__) +#define CHECK_NE(...) DOCTEST_CHECK_NE(__VA_ARGS__) +#define REQUIRE_NE(...) DOCTEST_REQUIRE_NE(__VA_ARGS__) +#define WARN_GT(...) DOCTEST_WARN_GT(__VA_ARGS__) +#define CHECK_GT(...) DOCTEST_CHECK_GT(__VA_ARGS__) +#define REQUIRE_GT(...) DOCTEST_REQUIRE_GT(__VA_ARGS__) +#define WARN_LT(...) DOCTEST_WARN_LT(__VA_ARGS__) +#define CHECK_LT(...) DOCTEST_CHECK_LT(__VA_ARGS__) +#define REQUIRE_LT(...) DOCTEST_REQUIRE_LT(__VA_ARGS__) +#define WARN_GE(...) DOCTEST_WARN_GE(__VA_ARGS__) +#define CHECK_GE(...) DOCTEST_CHECK_GE(__VA_ARGS__) +#define REQUIRE_GE(...) DOCTEST_REQUIRE_GE(__VA_ARGS__) +#define WARN_LE(...) DOCTEST_WARN_LE(__VA_ARGS__) +#define CHECK_LE(...) DOCTEST_CHECK_LE(__VA_ARGS__) +#define REQUIRE_LE(...) DOCTEST_REQUIRE_LE(__VA_ARGS__) +#define WARN_UNARY(...) DOCTEST_WARN_UNARY(__VA_ARGS__) +#define CHECK_UNARY(...) DOCTEST_CHECK_UNARY(__VA_ARGS__) +#define REQUIRE_UNARY(...) DOCTEST_REQUIRE_UNARY(__VA_ARGS__) +#define WARN_UNARY_FALSE(...) DOCTEST_WARN_UNARY_FALSE(__VA_ARGS__) +#define CHECK_UNARY_FALSE(...) DOCTEST_CHECK_UNARY_FALSE(__VA_ARGS__) +#define REQUIRE_UNARY_FALSE(...) DOCTEST_REQUIRE_UNARY_FALSE(__VA_ARGS__) + +// KEPT FOR BACKWARDS COMPATIBILITY +#define FAST_WARN_EQ(...) DOCTEST_FAST_WARN_EQ(__VA_ARGS__) +#define FAST_CHECK_EQ(...) DOCTEST_FAST_CHECK_EQ(__VA_ARGS__) +#define FAST_REQUIRE_EQ(...) DOCTEST_FAST_REQUIRE_EQ(__VA_ARGS__) +#define FAST_WARN_NE(...) DOCTEST_FAST_WARN_NE(__VA_ARGS__) +#define FAST_CHECK_NE(...) DOCTEST_FAST_CHECK_NE(__VA_ARGS__) +#define FAST_REQUIRE_NE(...) DOCTEST_FAST_REQUIRE_NE(__VA_ARGS__) +#define FAST_WARN_GT(...) DOCTEST_FAST_WARN_GT(__VA_ARGS__) +#define FAST_CHECK_GT(...) DOCTEST_FAST_CHECK_GT(__VA_ARGS__) +#define FAST_REQUIRE_GT(...) DOCTEST_FAST_REQUIRE_GT(__VA_ARGS__) +#define FAST_WARN_LT(...) DOCTEST_FAST_WARN_LT(__VA_ARGS__) +#define FAST_CHECK_LT(...) DOCTEST_FAST_CHECK_LT(__VA_ARGS__) +#define FAST_REQUIRE_LT(...) DOCTEST_FAST_REQUIRE_LT(__VA_ARGS__) +#define FAST_WARN_GE(...) DOCTEST_FAST_WARN_GE(__VA_ARGS__) +#define FAST_CHECK_GE(...) DOCTEST_FAST_CHECK_GE(__VA_ARGS__) +#define FAST_REQUIRE_GE(...) DOCTEST_FAST_REQUIRE_GE(__VA_ARGS__) +#define FAST_WARN_LE(...) DOCTEST_FAST_WARN_LE(__VA_ARGS__) +#define FAST_CHECK_LE(...) DOCTEST_FAST_CHECK_LE(__VA_ARGS__) +#define FAST_REQUIRE_LE(...) DOCTEST_FAST_REQUIRE_LE(__VA_ARGS__) + +#define FAST_WARN_UNARY(...) DOCTEST_FAST_WARN_UNARY(__VA_ARGS__) +#define FAST_CHECK_UNARY(...) DOCTEST_FAST_CHECK_UNARY(__VA_ARGS__) +#define FAST_REQUIRE_UNARY(...) DOCTEST_FAST_REQUIRE_UNARY(__VA_ARGS__) +#define FAST_WARN_UNARY_FALSE(...) DOCTEST_FAST_WARN_UNARY_FALSE(__VA_ARGS__) +#define FAST_CHECK_UNARY_FALSE(...) DOCTEST_FAST_CHECK_UNARY_FALSE(__VA_ARGS__) +#define FAST_REQUIRE_UNARY_FALSE(...) DOCTEST_FAST_REQUIRE_UNARY_FALSE(__VA_ARGS__) + +#define TEST_CASE_TEMPLATE_INSTANTIATE(id, ...) DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE(id, __VA_ARGS__) + +#endif // DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES + +#ifndef DOCTEST_CONFIG_DISABLE + +// this is here to clear the 'current test suite' for the current translation unit - at the top +DOCTEST_TEST_SUITE_END(); + +#endif // DOCTEST_CONFIG_DISABLE + +DOCTEST_CLANG_SUPPRESS_WARNING_POP +DOCTEST_MSVC_SUPPRESS_WARNING_POP +DOCTEST_GCC_SUPPRESS_WARNING_POP + +DOCTEST_SUPPRESS_COMMON_WARNINGS_POP + +#endif // DOCTEST_LIBRARY_INCLUDED + +#ifndef DOCTEST_SINGLE_HEADER +#define DOCTEST_SINGLE_HEADER +#endif // DOCTEST_SINGLE_HEADER + +#if defined(DOCTEST_CONFIG_IMPLEMENT) || !defined(DOCTEST_SINGLE_HEADER) + +#ifndef DOCTEST_SINGLE_HEADER +#include "doctest_fwd.h" +#endif // DOCTEST_SINGLE_HEADER + +DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-macros") + +#ifndef DOCTEST_LIBRARY_IMPLEMENTATION +#define DOCTEST_LIBRARY_IMPLEMENTATION + +DOCTEST_CLANG_SUPPRESS_WARNING_POP + +DOCTEST_SUPPRESS_COMMON_WARNINGS_PUSH + +DOCTEST_CLANG_SUPPRESS_WARNING_PUSH +DOCTEST_CLANG_SUPPRESS_WARNING("-Wglobal-constructors") +DOCTEST_CLANG_SUPPRESS_WARNING("-Wexit-time-destructors") +DOCTEST_CLANG_SUPPRESS_WARNING("-Wsign-conversion") +DOCTEST_CLANG_SUPPRESS_WARNING("-Wshorten-64-to-32") +DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-variable-declarations") +DOCTEST_CLANG_SUPPRESS_WARNING("-Wswitch") +DOCTEST_CLANG_SUPPRESS_WARNING("-Wswitch-enum") +DOCTEST_CLANG_SUPPRESS_WARNING("-Wcovered-switch-default") +DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-noreturn") +DOCTEST_CLANG_SUPPRESS_WARNING("-Wdisabled-macro-expansion") +DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-braces") +DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-field-initializers") +DOCTEST_CLANG_SUPPRESS_WARNING("-Wunused-member-function") +DOCTEST_CLANG_SUPPRESS_WARNING("-Wnonportable-system-include-path") + +DOCTEST_GCC_SUPPRESS_WARNING_PUSH +DOCTEST_GCC_SUPPRESS_WARNING("-Wconversion") +DOCTEST_GCC_SUPPRESS_WARNING("-Wsign-conversion") +DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-field-initializers") +DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-braces") +DOCTEST_GCC_SUPPRESS_WARNING("-Wswitch") +DOCTEST_GCC_SUPPRESS_WARNING("-Wswitch-enum") +DOCTEST_GCC_SUPPRESS_WARNING("-Wswitch-default") +DOCTEST_GCC_SUPPRESS_WARNING("-Wunsafe-loop-optimizations") +DOCTEST_GCC_SUPPRESS_WARNING("-Wold-style-cast") +DOCTEST_GCC_SUPPRESS_WARNING("-Wunused-function") +DOCTEST_GCC_SUPPRESS_WARNING("-Wmultiple-inheritance") +DOCTEST_GCC_SUPPRESS_WARNING("-Wsuggest-attribute") + +DOCTEST_MSVC_SUPPRESS_WARNING_PUSH +DOCTEST_MSVC_SUPPRESS_WARNING(4267) // 'var' : conversion from 'x' to 'y', possible loss of data +DOCTEST_MSVC_SUPPRESS_WARNING(4530) // C++ exception handler used, but unwind semantics not enabled +DOCTEST_MSVC_SUPPRESS_WARNING(4577) // 'noexcept' used with no exception handling mode specified +DOCTEST_MSVC_SUPPRESS_WARNING(4774) // format string expected in argument is not a string literal +DOCTEST_MSVC_SUPPRESS_WARNING(4365) // conversion from 'int' to 'unsigned', signed/unsigned mismatch +DOCTEST_MSVC_SUPPRESS_WARNING(5039) // pointer to potentially throwing function passed to extern C +DOCTEST_MSVC_SUPPRESS_WARNING(4800) // forcing value to bool 'true' or 'false' (performance warning) +DOCTEST_MSVC_SUPPRESS_WARNING(5245) // unreferenced function with internal linkage has been removed + +DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN + +// required includes - will go only in one translation unit! +#include +#include +#include +// borland (Embarcadero) compiler requires math.h and not cmath - https://github.com/doctest/doctest/pull/37 +#ifdef __BORLANDC__ +#include +#endif // __BORLANDC__ +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM +#include +#endif // DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM +#include +#include +#include +#ifndef DOCTEST_CONFIG_NO_MULTITHREADING +#include +#include +#define DOCTEST_DECLARE_MUTEX(name) std::mutex name; +#define DOCTEST_DECLARE_STATIC_MUTEX(name) static DOCTEST_DECLARE_MUTEX(name) +#define DOCTEST_LOCK_MUTEX(name) std::lock_guard DOCTEST_ANONYMOUS(DOCTEST_ANON_LOCK_)(name); +#else // DOCTEST_CONFIG_NO_MULTITHREADING +#define DOCTEST_DECLARE_MUTEX(name) +#define DOCTEST_DECLARE_STATIC_MUTEX(name) +#define DOCTEST_LOCK_MUTEX(name) +#endif // DOCTEST_CONFIG_NO_MULTITHREADING +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef DOCTEST_PLATFORM_MAC +#include +#include +#include +#endif // DOCTEST_PLATFORM_MAC + +#ifdef DOCTEST_PLATFORM_WINDOWS + +// defines for a leaner windows.h +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#define DOCTEST_UNDEF_WIN32_LEAN_AND_MEAN +#endif // WIN32_LEAN_AND_MEAN +#ifndef NOMINMAX +#define NOMINMAX +#define DOCTEST_UNDEF_NOMINMAX +#endif // NOMINMAX + +// not sure what AfxWin.h is for - here I do what Catch does +#ifdef __AFXDLL +#include +#else +#include +#endif +#include + +#else // DOCTEST_PLATFORM_WINDOWS + +#include +#include + +#endif // DOCTEST_PLATFORM_WINDOWS + +// this is a fix for https://github.com/doctest/doctest/issues/348 +// https://mail.gnome.org/archives/xml/2012-January/msg00000.html +#if !defined(HAVE_UNISTD_H) && !defined(STDOUT_FILENO) +#define STDOUT_FILENO fileno(stdout) +#endif // HAVE_UNISTD_H + +DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END + +// counts the number of elements in a C array +#define DOCTEST_COUNTOF(x) (sizeof(x) / sizeof(x[0])) + +#ifdef DOCTEST_CONFIG_DISABLE +#define DOCTEST_BRANCH_ON_DISABLED(if_disabled, if_not_disabled) if_disabled +#else // DOCTEST_CONFIG_DISABLE +#define DOCTEST_BRANCH_ON_DISABLED(if_disabled, if_not_disabled) if_not_disabled +#endif // DOCTEST_CONFIG_DISABLE + +#ifndef DOCTEST_CONFIG_OPTIONS_PREFIX +#define DOCTEST_CONFIG_OPTIONS_PREFIX "dt-" +#endif + +#ifndef DOCTEST_THREAD_LOCAL +#if defined(DOCTEST_CONFIG_NO_MULTITHREADING) || DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0)) +#define DOCTEST_THREAD_LOCAL +#else // DOCTEST_MSVC +#define DOCTEST_THREAD_LOCAL thread_local +#endif // DOCTEST_MSVC +#endif // DOCTEST_THREAD_LOCAL + +#ifndef DOCTEST_MULTI_LANE_ATOMICS_THREAD_LANES +#define DOCTEST_MULTI_LANE_ATOMICS_THREAD_LANES 32 +#endif + +#ifndef DOCTEST_MULTI_LANE_ATOMICS_CACHE_LINE_SIZE +#define DOCTEST_MULTI_LANE_ATOMICS_CACHE_LINE_SIZE 64 +#endif + +#ifdef DOCTEST_CONFIG_NO_UNPREFIXED_OPTIONS +#define DOCTEST_OPTIONS_PREFIX_DISPLAY DOCTEST_CONFIG_OPTIONS_PREFIX +#else +#define DOCTEST_OPTIONS_PREFIX_DISPLAY "" +#endif + +#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) +#define DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS +#endif + +#ifndef DOCTEST_CDECL +#define DOCTEST_CDECL __cdecl +#endif + +namespace doctest { + +bool is_running_in_test = false; + +namespace { + using namespace detail; + + template + DOCTEST_NORETURN void throw_exception(Ex const& e) { +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS + throw e; +#else // DOCTEST_CONFIG_NO_EXCEPTIONS +#ifdef DOCTEST_CONFIG_HANDLE_EXCEPTION + DOCTEST_CONFIG_HANDLE_EXCEPTION(e); +#else // DOCTEST_CONFIG_HANDLE_EXCEPTION +#ifndef DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM + std::cerr << "doctest will terminate because it needed to throw an exception.\n" + << "The message was: " << e.what() << '\n'; +#endif // DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM +#endif // DOCTEST_CONFIG_HANDLE_EXCEPTION + std::terminate(); +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS + } + +#ifndef DOCTEST_INTERNAL_ERROR +#define DOCTEST_INTERNAL_ERROR(msg) \ + throw_exception(std::logic_error( \ + __FILE__ ":" DOCTEST_TOSTR(__LINE__) ": Internal doctest error: " msg)) +#endif // DOCTEST_INTERNAL_ERROR + + // case insensitive strcmp + int stricmp(const char* a, const char* b) { + for(;; a++, b++) { + const int d = tolower(*a) - tolower(*b); + if(d != 0 || !*a) + return d; + } + } + + struct Endianness + { + enum Arch + { + Big, + Little + }; + + static Arch which() { + int x = 1; + // casting any data pointer to char* is allowed + auto ptr = reinterpret_cast(&x); + if(*ptr) + return Little; + return Big; + } + }; +} // namespace + +namespace detail { + DOCTEST_THREAD_LOCAL class + { + std::vector stack; + std::stringstream ss; + + public: + std::ostream* push() { + stack.push_back(ss.tellp()); + return &ss; + } + + String pop() { + if (stack.empty()) + DOCTEST_INTERNAL_ERROR("TLSS was empty when trying to pop!"); + + std::streampos pos = stack.back(); + stack.pop_back(); + unsigned sz = static_cast(ss.tellp() - pos); + ss.rdbuf()->pubseekpos(pos, std::ios::in | std::ios::out); + return String(ss, sz); + } + } g_oss; + + std::ostream* tlssPush() { + return g_oss.push(); + } + + String tlssPop() { + return g_oss.pop(); + } + +#ifndef DOCTEST_CONFIG_DISABLE + +namespace timer_large_integer +{ + +#if defined(DOCTEST_PLATFORM_WINDOWS) + using type = ULONGLONG; +#else // DOCTEST_PLATFORM_WINDOWS + using type = std::uint64_t; +#endif // DOCTEST_PLATFORM_WINDOWS +} + +using ticks_t = timer_large_integer::type; + +#ifdef DOCTEST_CONFIG_GETCURRENTTICKS + ticks_t getCurrentTicks() { return DOCTEST_CONFIG_GETCURRENTTICKS(); } +#elif defined(DOCTEST_PLATFORM_WINDOWS) + ticks_t getCurrentTicks() { + static LARGE_INTEGER hz = { {0} }, hzo = { {0} }; + if(!hz.QuadPart) { + QueryPerformanceFrequency(&hz); + QueryPerformanceCounter(&hzo); + } + LARGE_INTEGER t; + QueryPerformanceCounter(&t); + return ((t.QuadPart - hzo.QuadPart) * LONGLONG(1000000)) / hz.QuadPart; + } +#else // DOCTEST_PLATFORM_WINDOWS + ticks_t getCurrentTicks() { + timeval t; + gettimeofday(&t, nullptr); + return static_cast(t.tv_sec) * 1000000 + static_cast(t.tv_usec); + } +#endif // DOCTEST_PLATFORM_WINDOWS + + struct Timer + { + void start() { m_ticks = getCurrentTicks(); } + unsigned int getElapsedMicroseconds() const { + return static_cast(getCurrentTicks() - m_ticks); + } + //unsigned int getElapsedMilliseconds() const { + // return static_cast(getElapsedMicroseconds() / 1000); + //} + double getElapsedSeconds() const { return static_cast(getCurrentTicks() - m_ticks) / 1000000.0; } + + private: + ticks_t m_ticks = 0; + }; + +#ifdef DOCTEST_CONFIG_NO_MULTITHREADING + template + using Atomic = T; +#else // DOCTEST_CONFIG_NO_MULTITHREADING + template + using Atomic = std::atomic; +#endif // DOCTEST_CONFIG_NO_MULTITHREADING + +#if defined(DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS) || defined(DOCTEST_CONFIG_NO_MULTITHREADING) + template + using MultiLaneAtomic = Atomic; +#else // DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS + // Provides a multilane implementation of an atomic variable that supports add, sub, load, + // store. Instead of using a single atomic variable, this splits up into multiple ones, + // each sitting on a separate cache line. The goal is to provide a speedup when most + // operations are modifying. It achieves this with two properties: + // + // * Multiple atomics are used, so chance of congestion from the same atomic is reduced. + // * Each atomic sits on a separate cache line, so false sharing is reduced. + // + // The disadvantage is that there is a small overhead due to the use of TLS, and load/store + // is slower because all atomics have to be accessed. + template + class MultiLaneAtomic + { + struct CacheLineAlignedAtomic + { + Atomic atomic{}; + char padding[DOCTEST_MULTI_LANE_ATOMICS_CACHE_LINE_SIZE - sizeof(Atomic)]; + }; + CacheLineAlignedAtomic m_atomics[DOCTEST_MULTI_LANE_ATOMICS_THREAD_LANES]; + + static_assert(sizeof(CacheLineAlignedAtomic) == DOCTEST_MULTI_LANE_ATOMICS_CACHE_LINE_SIZE, + "guarantee one atomic takes exactly one cache line"); + + public: + T operator++() DOCTEST_NOEXCEPT { return fetch_add(1) + 1; } + + T operator++(int) DOCTEST_NOEXCEPT { return fetch_add(1); } + + T fetch_add(T arg, std::memory_order order = std::memory_order_seq_cst) DOCTEST_NOEXCEPT { + return myAtomic().fetch_add(arg, order); + } + + T fetch_sub(T arg, std::memory_order order = std::memory_order_seq_cst) DOCTEST_NOEXCEPT { + return myAtomic().fetch_sub(arg, order); + } + + operator T() const DOCTEST_NOEXCEPT { return load(); } + + T load(std::memory_order order = std::memory_order_seq_cst) const DOCTEST_NOEXCEPT { + auto result = T(); + for(auto const& c : m_atomics) { + result += c.atomic.load(order); + } + return result; + } + + T operator=(T desired) DOCTEST_NOEXCEPT { // lgtm [cpp/assignment-does-not-return-this] + store(desired); + return desired; + } + + void store(T desired, std::memory_order order = std::memory_order_seq_cst) DOCTEST_NOEXCEPT { + // first value becomes desired", all others become 0. + for(auto& c : m_atomics) { + c.atomic.store(desired, order); + desired = {}; + } + } + + private: + // Each thread has a different atomic that it operates on. If more than NumLanes threads + // use this, some will use the same atomic. So performance will degrade a bit, but still + // everything will work. + // + // The logic here is a bit tricky. The call should be as fast as possible, so that there + // is minimal to no overhead in determining the correct atomic for the current thread. + // + // 1. A global static counter laneCounter counts continuously up. + // 2. Each successive thread will use modulo operation of that counter so it gets an atomic + // assigned in a round-robin fashion. + // 3. This tlsLaneIdx is stored in the thread local data, so it is directly available with + // little overhead. + Atomic& myAtomic() DOCTEST_NOEXCEPT { + static Atomic laneCounter; + DOCTEST_THREAD_LOCAL size_t tlsLaneIdx = + laneCounter++ % DOCTEST_MULTI_LANE_ATOMICS_THREAD_LANES; + + return m_atomics[tlsLaneIdx].atomic; + } + }; +#endif // DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS + + // this holds both parameters from the command line and runtime data for tests + struct ContextState : ContextOptions, TestRunStats, CurrentTestCaseStats + { + MultiLaneAtomic numAssertsCurrentTest_atomic; + MultiLaneAtomic numAssertsFailedCurrentTest_atomic; + + std::vector> filters = decltype(filters)(9); // 9 different filters + + std::vector reporters_currently_used; + + assert_handler ah = nullptr; + + Timer timer; + + std::vector stringifiedContexts; // logging from INFO() due to an exception + + // stuff for subcases + bool reachedLeaf; + std::vector subcaseStack; + std::vector nextSubcaseStack; + std::unordered_set fullyTraversedSubcases; + size_t currentSubcaseDepth; + Atomic shouldLogCurrentException; + + void resetRunData() { + numTestCases = 0; + numTestCasesPassingFilters = 0; + numTestSuitesPassingFilters = 0; + numTestCasesFailed = 0; + numAsserts = 0; + numAssertsFailed = 0; + numAssertsCurrentTest = 0; + numAssertsFailedCurrentTest = 0; + } + + void finalizeTestCaseData() { + seconds = timer.getElapsedSeconds(); + + // update the non-atomic counters + numAsserts += numAssertsCurrentTest_atomic; + numAssertsFailed += numAssertsFailedCurrentTest_atomic; + numAssertsCurrentTest = numAssertsCurrentTest_atomic; + numAssertsFailedCurrentTest = numAssertsFailedCurrentTest_atomic; + + if(numAssertsFailedCurrentTest) + failure_flags |= TestCaseFailureReason::AssertFailure; + + if(Approx(currentTest->m_timeout).epsilon(DBL_EPSILON) != 0 && + Approx(seconds).epsilon(DBL_EPSILON) > currentTest->m_timeout) + failure_flags |= TestCaseFailureReason::Timeout; + + if(currentTest->m_should_fail) { + if(failure_flags) { + failure_flags |= TestCaseFailureReason::ShouldHaveFailedAndDid; + } else { + failure_flags |= TestCaseFailureReason::ShouldHaveFailedButDidnt; + } + } else if(failure_flags && currentTest->m_may_fail) { + failure_flags |= TestCaseFailureReason::CouldHaveFailedAndDid; + } else if(currentTest->m_expected_failures > 0) { + if(numAssertsFailedCurrentTest == currentTest->m_expected_failures) { + failure_flags |= TestCaseFailureReason::FailedExactlyNumTimes; + } else { + failure_flags |= TestCaseFailureReason::DidntFailExactlyNumTimes; + } + } + + bool ok_to_fail = (TestCaseFailureReason::ShouldHaveFailedAndDid & failure_flags) || + (TestCaseFailureReason::CouldHaveFailedAndDid & failure_flags) || + (TestCaseFailureReason::FailedExactlyNumTimes & failure_flags); + + // if any subcase has failed - the whole test case has failed + testCaseSuccess = !(failure_flags && !ok_to_fail); + if(!testCaseSuccess) + numTestCasesFailed++; + } + }; + + ContextState* g_cs = nullptr; + + // used to avoid locks for the debug output + // TODO: figure out if this is indeed necessary/correct - seems like either there still + // could be a race or that there wouldn't be a race even if using the context directly + DOCTEST_THREAD_LOCAL bool g_no_colors; + +#endif // DOCTEST_CONFIG_DISABLE +} // namespace detail + +char* String::allocate(size_type sz) { + if (sz <= last) { + buf[sz] = '\0'; + setLast(last - sz); + return buf; + } else { + setOnHeap(); + data.size = sz; + data.capacity = data.size + 1; + data.ptr = new char[data.capacity]; + data.ptr[sz] = '\0'; + return data.ptr; + } +} + +void String::setOnHeap() noexcept { *reinterpret_cast(&buf[last]) = 128; } +void String::setLast(size_type in) noexcept { buf[last] = char(in); } +void String::setSize(size_type sz) noexcept { + if (isOnStack()) { buf[sz] = '\0'; setLast(last - sz); } + else { data.ptr[sz] = '\0'; data.size = sz; } +} + +void String::copy(const String& other) { + if(other.isOnStack()) { + memcpy(buf, other.buf, len); + } else { + memcpy(allocate(other.data.size), other.data.ptr, other.data.size); + } +} + +String::String() noexcept { + buf[0] = '\0'; + setLast(); +} + +String::~String() { + if(!isOnStack()) + delete[] data.ptr; +} // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks) + +String::String(const char* in) + : String(in, strlen(in)) {} + +String::String(const char* in, size_type in_size) { + memcpy(allocate(in_size), in, in_size); +} + +String::String(std::istream& in, size_type in_size) { + in.read(allocate(in_size), in_size); +} + +String::String(const String& other) { copy(other); } + +String& String::operator=(const String& other) { + if(this != &other) { + if(!isOnStack()) + delete[] data.ptr; + + copy(other); + } + + return *this; +} + +String& String::operator+=(const String& other) { + const size_type my_old_size = size(); + const size_type other_size = other.size(); + const size_type total_size = my_old_size + other_size; + if(isOnStack()) { + if(total_size < len) { + // append to the current stack space + memcpy(buf + my_old_size, other.c_str(), other_size + 1); + // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) + setLast(last - total_size); + } else { + // alloc new chunk + char* temp = new char[total_size + 1]; + // copy current data to new location before writing in the union + memcpy(temp, buf, my_old_size); // skip the +1 ('\0') for speed + // update data in union + setOnHeap(); + data.size = total_size; + data.capacity = data.size + 1; + data.ptr = temp; + // transfer the rest of the data + memcpy(data.ptr + my_old_size, other.c_str(), other_size + 1); + } + } else { + if(data.capacity > total_size) { + // append to the current heap block + data.size = total_size; + memcpy(data.ptr + my_old_size, other.c_str(), other_size + 1); + } else { + // resize + data.capacity *= 2; + if(data.capacity <= total_size) + data.capacity = total_size + 1; + // alloc new chunk + char* temp = new char[data.capacity]; + // copy current data to new location before releasing it + memcpy(temp, data.ptr, my_old_size); // skip the +1 ('\0') for speed + // release old chunk + delete[] data.ptr; + // update the rest of the union members + data.size = total_size; + data.ptr = temp; + // transfer the rest of the data + memcpy(data.ptr + my_old_size, other.c_str(), other_size + 1); + } + } + + return *this; +} + +String::String(String&& other) noexcept { + memcpy(buf, other.buf, len); + other.buf[0] = '\0'; + other.setLast(); +} + +String& String::operator=(String&& other) noexcept { + if(this != &other) { + if(!isOnStack()) + delete[] data.ptr; + memcpy(buf, other.buf, len); + other.buf[0] = '\0'; + other.setLast(); + } + return *this; +} + +char String::operator[](size_type i) const { + return const_cast(this)->operator[](i); +} + +char& String::operator[](size_type i) { + if(isOnStack()) + return reinterpret_cast(buf)[i]; + return data.ptr[i]; +} + +DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wmaybe-uninitialized") +String::size_type String::size() const { + if(isOnStack()) + return last - (size_type(buf[last]) & 31); // using "last" would work only if "len" is 32 + return data.size; +} +DOCTEST_GCC_SUPPRESS_WARNING_POP + +String::size_type String::capacity() const { + if(isOnStack()) + return len; + return data.capacity; +} + +String String::substr(size_type pos, size_type cnt) && { + cnt = std::min(cnt, size() - 1 - pos); + char* cptr = c_str(); + memmove(cptr, cptr + pos, cnt); + setSize(cnt); + return std::move(*this); +} + +String String::substr(size_type pos, size_type cnt) const & { + cnt = std::min(cnt, size() - 1 - pos); + return String{ c_str() + pos, cnt }; +} + +String::size_type String::find(char ch, size_type pos) const { + const char* begin = c_str(); + const char* end = begin + size(); + const char* it = begin + pos; + for (; it < end && *it != ch; it++); + if (it < end) { return static_cast(it - begin); } + else { return npos; } +} + +String::size_type String::rfind(char ch, size_type pos) const { + const char* begin = c_str(); + const char* it = begin + std::min(pos, size() - 1); + for (; it >= begin && *it != ch; it--); + if (it >= begin) { return static_cast(it - begin); } + else { return npos; } +} + +int String::compare(const char* other, bool no_case) const { + if(no_case) + return doctest::stricmp(c_str(), other); + return std::strcmp(c_str(), other); +} + +int String::compare(const String& other, bool no_case) const { + return compare(other.c_str(), no_case); +} + +String operator+(const String& lhs, const String& rhs) { return String(lhs) += rhs; } + +bool operator==(const String& lhs, const String& rhs) { return lhs.compare(rhs) == 0; } +bool operator!=(const String& lhs, const String& rhs) { return lhs.compare(rhs) != 0; } +bool operator< (const String& lhs, const String& rhs) { return lhs.compare(rhs) < 0; } +bool operator> (const String& lhs, const String& rhs) { return lhs.compare(rhs) > 0; } +bool operator<=(const String& lhs, const String& rhs) { return (lhs != rhs) ? lhs.compare(rhs) < 0 : true; } +bool operator>=(const String& lhs, const String& rhs) { return (lhs != rhs) ? lhs.compare(rhs) > 0 : true; } + +std::ostream& operator<<(std::ostream& s, const String& in) { return s << in.c_str(); } + +Contains::Contains(const String& str) : string(str) { } + +bool Contains::checkWith(const String& other) const { + return strstr(other.c_str(), string.c_str()) != nullptr; +} + +String toString(const Contains& in) { + return "Contains( " + in.string + " )"; +} + +bool operator==(const String& lhs, const Contains& rhs) { return rhs.checkWith(lhs); } +bool operator==(const Contains& lhs, const String& rhs) { return lhs.checkWith(rhs); } +bool operator!=(const String& lhs, const Contains& rhs) { return !rhs.checkWith(lhs); } +bool operator!=(const Contains& lhs, const String& rhs) { return !lhs.checkWith(rhs); } + +namespace { + void color_to_stream(std::ostream&, Color::Enum) DOCTEST_BRANCH_ON_DISABLED({}, ;) +} // namespace + +namespace Color { + std::ostream& operator<<(std::ostream& s, Color::Enum code) { + color_to_stream(s, code); + return s; + } +} // namespace Color + +// clang-format off +const char* assertString(assertType::Enum at) { + DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4061) // enum 'x' in switch of enum 'y' is not explicitly handled + #define DOCTEST_GENERATE_ASSERT_TYPE_CASE(assert_type) case assertType::DT_ ## assert_type: return #assert_type + #define DOCTEST_GENERATE_ASSERT_TYPE_CASES(assert_type) \ + DOCTEST_GENERATE_ASSERT_TYPE_CASE(WARN_ ## assert_type); \ + DOCTEST_GENERATE_ASSERT_TYPE_CASE(CHECK_ ## assert_type); \ + DOCTEST_GENERATE_ASSERT_TYPE_CASE(REQUIRE_ ## assert_type) + switch(at) { + DOCTEST_GENERATE_ASSERT_TYPE_CASE(WARN); + DOCTEST_GENERATE_ASSERT_TYPE_CASE(CHECK); + DOCTEST_GENERATE_ASSERT_TYPE_CASE(REQUIRE); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(FALSE); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(THROWS); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(THROWS_AS); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(THROWS_WITH); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(THROWS_WITH_AS); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(NOTHROW); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(EQ); + DOCTEST_GENERATE_ASSERT_TYPE_CASES(NE); + DOCTEST_GENERATE_ASSERT_TYPE_CASES(GT); + DOCTEST_GENERATE_ASSERT_TYPE_CASES(LT); + DOCTEST_GENERATE_ASSERT_TYPE_CASES(GE); + DOCTEST_GENERATE_ASSERT_TYPE_CASES(LE); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(UNARY); + DOCTEST_GENERATE_ASSERT_TYPE_CASES(UNARY_FALSE); + + default: DOCTEST_INTERNAL_ERROR("Tried stringifying invalid assert type!"); + } + DOCTEST_MSVC_SUPPRESS_WARNING_POP +} +// clang-format on + +const char* failureString(assertType::Enum at) { + if(at & assertType::is_warn) //!OCLINT bitwise operator in conditional + return "WARNING"; + if(at & assertType::is_check) //!OCLINT bitwise operator in conditional + return "ERROR"; + if(at & assertType::is_require) //!OCLINT bitwise operator in conditional + return "FATAL ERROR"; + return ""; +} + +DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wnull-dereference") +DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wnull-dereference") +// depending on the current options this will remove the path of filenames +const char* skipPathFromFilename(const char* file) { +#ifndef DOCTEST_CONFIG_DISABLE + if(getContextOptions()->no_path_in_filenames) { + auto back = std::strrchr(file, '\\'); + auto forward = std::strrchr(file, '/'); + if(back || forward) { + if(back > forward) + forward = back; + return forward + 1; + } + } +#endif // DOCTEST_CONFIG_DISABLE + return file; +} +DOCTEST_CLANG_SUPPRESS_WARNING_POP +DOCTEST_GCC_SUPPRESS_WARNING_POP + +bool SubcaseSignature::operator==(const SubcaseSignature& other) const { + return m_line == other.m_line + && std::strcmp(m_file, other.m_file) == 0 + && m_name == other.m_name; +} + +bool SubcaseSignature::operator<(const SubcaseSignature& other) const { + if(m_line != other.m_line) + return m_line < other.m_line; + if(std::strcmp(m_file, other.m_file) != 0) + return std::strcmp(m_file, other.m_file) < 0; + return m_name.compare(other.m_name) < 0; +} + +DOCTEST_DEFINE_INTERFACE(IContextScope) + +namespace detail { + void filldata::fill(std::ostream* stream, const void* in) { + if (in) { *stream << in; } + else { *stream << "nullptr"; } + } + + template + String toStreamLit(T t) { + std::ostream* os = tlssPush(); + os->operator<<(t); + return tlssPop(); + } +} + +#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING +String toString(const char* in) { return String("\"") + (in ? in : "{null string}") + "\""; } +#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING + +#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0) +// see this issue on why this is needed: https://github.com/doctest/doctest/issues/183 +String toString(const std::string& in) { return in.c_str(); } +#endif // VS 2019 + +String toString(String in) { return in; } + +String toString(std::nullptr_t) { return "nullptr"; } + +String toString(bool in) { return in ? "true" : "false"; } + +String toString(float in) { return toStreamLit(in); } +String toString(double in) { return toStreamLit(in); } +String toString(double long in) { return toStreamLit(in); } + +String toString(char in) { return toStreamLit(static_cast(in)); } +String toString(char signed in) { return toStreamLit(static_cast(in)); } +String toString(char unsigned in) { return toStreamLit(static_cast(in)); } +String toString(short in) { return toStreamLit(in); } +String toString(short unsigned in) { return toStreamLit(in); } +String toString(signed in) { return toStreamLit(in); } +String toString(unsigned in) { return toStreamLit(in); } +String toString(long in) { return toStreamLit(in); } +String toString(long unsigned in) { return toStreamLit(in); } +String toString(long long in) { return toStreamLit(in); } +String toString(long long unsigned in) { return toStreamLit(in); } + +Approx::Approx(double value) + : m_epsilon(static_cast(std::numeric_limits::epsilon()) * 100) + , m_scale(1.0) + , m_value(value) {} + +Approx Approx::operator()(double value) const { + Approx approx(value); + approx.epsilon(m_epsilon); + approx.scale(m_scale); + return approx; +} + +Approx& Approx::epsilon(double newEpsilon) { + m_epsilon = newEpsilon; + return *this; +} +Approx& Approx::scale(double newScale) { + m_scale = newScale; + return *this; +} + +bool operator==(double lhs, const Approx& rhs) { + // Thanks to Richard Harris for his help refining this formula + return std::fabs(lhs - rhs.m_value) < + rhs.m_epsilon * (rhs.m_scale + std::max(std::fabs(lhs), std::fabs(rhs.m_value))); +} +bool operator==(const Approx& lhs, double rhs) { return operator==(rhs, lhs); } +bool operator!=(double lhs, const Approx& rhs) { return !operator==(lhs, rhs); } +bool operator!=(const Approx& lhs, double rhs) { return !operator==(rhs, lhs); } +bool operator<=(double lhs, const Approx& rhs) { return lhs < rhs.m_value || lhs == rhs; } +bool operator<=(const Approx& lhs, double rhs) { return lhs.m_value < rhs || lhs == rhs; } +bool operator>=(double lhs, const Approx& rhs) { return lhs > rhs.m_value || lhs == rhs; } +bool operator>=(const Approx& lhs, double rhs) { return lhs.m_value > rhs || lhs == rhs; } +bool operator<(double lhs, const Approx& rhs) { return lhs < rhs.m_value && lhs != rhs; } +bool operator<(const Approx& lhs, double rhs) { return lhs.m_value < rhs && lhs != rhs; } +bool operator>(double lhs, const Approx& rhs) { return lhs > rhs.m_value && lhs != rhs; } +bool operator>(const Approx& lhs, double rhs) { return lhs.m_value > rhs && lhs != rhs; } + +String toString(const Approx& in) { + return "Approx( " + doctest::toString(in.m_value) + " )"; +} +const ContextOptions* getContextOptions() { return DOCTEST_BRANCH_ON_DISABLED(nullptr, g_cs); } + +DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4738) +template +IsNaN::operator bool() const { + return std::isnan(value) ^ flipped; +} +DOCTEST_MSVC_SUPPRESS_WARNING_POP +template struct DOCTEST_INTERFACE_DEF IsNaN; +template struct DOCTEST_INTERFACE_DEF IsNaN; +template struct DOCTEST_INTERFACE_DEF IsNaN; +template +String toString(IsNaN in) { return String(in.flipped ? "! " : "") + "IsNaN( " + doctest::toString(in.value) + " )"; } +String toString(IsNaN in) { return toString(in); } +String toString(IsNaN in) { return toString(in); } +String toString(IsNaN in) { return toString(in); } + +} // namespace doctest + +#ifdef DOCTEST_CONFIG_DISABLE +namespace doctest { +Context::Context(int, const char* const*) {} +Context::~Context() = default; +void Context::applyCommandLine(int, const char* const*) {} +void Context::addFilter(const char*, const char*) {} +void Context::clearFilters() {} +void Context::setOption(const char*, bool) {} +void Context::setOption(const char*, int) {} +void Context::setOption(const char*, const char*) {} +bool Context::shouldExit() { return false; } +void Context::setAsDefaultForAssertsOutOfTestCases() {} +void Context::setAssertHandler(detail::assert_handler) {} +void Context::setCout(std::ostream*) {} +int Context::run() { return 0; } + +int IReporter::get_num_active_contexts() { return 0; } +const IContextScope* const* IReporter::get_active_contexts() { return nullptr; } +int IReporter::get_num_stringified_contexts() { return 0; } +const String* IReporter::get_stringified_contexts() { return nullptr; } + +int registerReporter(const char*, int, IReporter*) { return 0; } + +} // namespace doctest +#else // DOCTEST_CONFIG_DISABLE + +#if !defined(DOCTEST_CONFIG_COLORS_NONE) +#if !defined(DOCTEST_CONFIG_COLORS_WINDOWS) && !defined(DOCTEST_CONFIG_COLORS_ANSI) +#ifdef DOCTEST_PLATFORM_WINDOWS +#define DOCTEST_CONFIG_COLORS_WINDOWS +#else // linux +#define DOCTEST_CONFIG_COLORS_ANSI +#endif // platform +#endif // DOCTEST_CONFIG_COLORS_WINDOWS && DOCTEST_CONFIG_COLORS_ANSI +#endif // DOCTEST_CONFIG_COLORS_NONE + +namespace doctest_detail_test_suite_ns { +// holds the current test suite +doctest::detail::TestSuite& getCurrentTestSuite() { + static doctest::detail::TestSuite data{}; + return data; +} +} // namespace doctest_detail_test_suite_ns + +namespace doctest { +namespace { + // the int (priority) is part of the key for automatic sorting - sadly one can register a + // reporter with a duplicate name and a different priority but hopefully that won't happen often :| + using reporterMap = std::map, reporterCreatorFunc>; + + reporterMap& getReporters() { + static reporterMap data; + return data; + } + reporterMap& getListeners() { + static reporterMap data; + return data; + } +} // namespace +namespace detail { +#define DOCTEST_ITERATE_THROUGH_REPORTERS(function, ...) \ + for(auto& curr_rep : g_cs->reporters_currently_used) \ + curr_rep->function(__VA_ARGS__) + + bool checkIfShouldThrow(assertType::Enum at) { + if(at & assertType::is_require) //!OCLINT bitwise operator in conditional + return true; + + if((at & assertType::is_check) //!OCLINT bitwise operator in conditional + && getContextOptions()->abort_after > 0 && + (g_cs->numAssertsFailed + g_cs->numAssertsFailedCurrentTest_atomic) >= + getContextOptions()->abort_after) + return true; + + return false; + } + +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS + DOCTEST_NORETURN void throwException() { + g_cs->shouldLogCurrentException = false; + throw TestFailureException(); // NOLINT(hicpp-exception-baseclass) + } +#else // DOCTEST_CONFIG_NO_EXCEPTIONS + void throwException() {} +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS +} // namespace detail + +namespace { + using namespace detail; + // matching of a string against a wildcard mask (case sensitivity configurable) taken from + // https://www.codeproject.com/Articles/1088/Wildcard-string-compare-globbing + int wildcmp(const char* str, const char* wild, bool caseSensitive) { + const char* cp = str; + const char* mp = wild; + + while((*str) && (*wild != '*')) { + if((caseSensitive ? (*wild != *str) : (tolower(*wild) != tolower(*str))) && + (*wild != '?')) { + return 0; + } + wild++; + str++; + } + + while(*str) { + if(*wild == '*') { + if(!*++wild) { + return 1; + } + mp = wild; + cp = str + 1; + } else if((caseSensitive ? (*wild == *str) : (tolower(*wild) == tolower(*str))) || + (*wild == '?')) { + wild++; + str++; + } else { + wild = mp; //!OCLINT parameter reassignment + str = cp++; //!OCLINT parameter reassignment + } + } + + while(*wild == '*') { + wild++; + } + return !*wild; + } + + // checks if the name matches any of the filters (and can be configured what to do when empty) + bool matchesAny(const char* name, const std::vector& filters, bool matchEmpty, + bool caseSensitive) { + if (filters.empty() && matchEmpty) + return true; + for (auto& curr : filters) + if (wildcmp(name, curr.c_str(), caseSensitive)) + return true; + return false; + } + + DOCTEST_NO_SANITIZE_INTEGER + unsigned long long hash(unsigned long long a, unsigned long long b) { + return (a << 5) + b; + } + + // C string hash function (djb2) - taken from http://www.cse.yorku.ca/~oz/hash.html + DOCTEST_NO_SANITIZE_INTEGER + unsigned long long hash(const char* str) { + unsigned long long hash = 5381; + char c; + while ((c = *str++)) + hash = ((hash << 5) + hash) + c; // hash * 33 + c + return hash; + } + + unsigned long long hash(const SubcaseSignature& sig) { + return hash(hash(hash(sig.m_file), hash(sig.m_name.c_str())), sig.m_line); + } + + unsigned long long hash(const std::vector& sigs, size_t count) { + unsigned long long running = 0; + auto end = sigs.begin() + count; + for (auto it = sigs.begin(); it != end; it++) { + running = hash(running, hash(*it)); + } + return running; + } + + unsigned long long hash(const std::vector& sigs) { + unsigned long long running = 0; + for (const SubcaseSignature& sig : sigs) { + running = hash(running, hash(sig)); + } + return running; + } +} // namespace +namespace detail { + bool Subcase::checkFilters() { + if (g_cs->subcaseStack.size() < size_t(g_cs->subcase_filter_levels)) { + if (!matchesAny(m_signature.m_name.c_str(), g_cs->filters[6], true, g_cs->case_sensitive)) + return true; + if (matchesAny(m_signature.m_name.c_str(), g_cs->filters[7], false, g_cs->case_sensitive)) + return true; + } + return false; + } + + Subcase::Subcase(const String& name, const char* file, int line) + : m_signature({name, file, line}) { + if (!g_cs->reachedLeaf) { + if (g_cs->nextSubcaseStack.size() <= g_cs->subcaseStack.size() + || g_cs->nextSubcaseStack[g_cs->subcaseStack.size()] == m_signature) { + // Going down. + if (checkFilters()) { return; } + + g_cs->subcaseStack.push_back(m_signature); + g_cs->currentSubcaseDepth++; + m_entered = true; + DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_start, m_signature); + } + } else { + if (g_cs->subcaseStack[g_cs->currentSubcaseDepth] == m_signature) { + // This subcase is reentered via control flow. + g_cs->currentSubcaseDepth++; + m_entered = true; + DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_start, m_signature); + } else if (g_cs->nextSubcaseStack.size() <= g_cs->currentSubcaseDepth + && g_cs->fullyTraversedSubcases.find(hash(hash(g_cs->subcaseStack, g_cs->currentSubcaseDepth), hash(m_signature))) + == g_cs->fullyTraversedSubcases.end()) { + if (checkFilters()) { return; } + // This subcase is part of the one to be executed next. + g_cs->nextSubcaseStack.clear(); + g_cs->nextSubcaseStack.insert(g_cs->nextSubcaseStack.end(), + g_cs->subcaseStack.begin(), g_cs->subcaseStack.begin() + g_cs->currentSubcaseDepth); + g_cs->nextSubcaseStack.push_back(m_signature); + } + } + } + + DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4996) // std::uncaught_exception is deprecated in C++17 + DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations") + DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations") + + Subcase::~Subcase() { + if (m_entered) { + g_cs->currentSubcaseDepth--; + + if (!g_cs->reachedLeaf) { + // Leaf. + g_cs->fullyTraversedSubcases.insert(hash(g_cs->subcaseStack)); + g_cs->nextSubcaseStack.clear(); + g_cs->reachedLeaf = true; + } else if (g_cs->nextSubcaseStack.empty()) { + // All children are finished. + g_cs->fullyTraversedSubcases.insert(hash(g_cs->subcaseStack)); + } + +#if defined(__cpp_lib_uncaught_exceptions) && __cpp_lib_uncaught_exceptions >= 201411L && (!defined(__MAC_OS_X_VERSION_MIN_REQUIRED) || __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200) + if(std::uncaught_exceptions() > 0 +#else + if(std::uncaught_exception() +#endif + && g_cs->shouldLogCurrentException) { + DOCTEST_ITERATE_THROUGH_REPORTERS( + test_case_exception, {"exception thrown in subcase - will translate later " + "when the whole test case has been exited (cannot " + "translate while there is an active exception)", + false}); + g_cs->shouldLogCurrentException = false; + } + + DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_end, DOCTEST_EMPTY); + } + } + + DOCTEST_CLANG_SUPPRESS_WARNING_POP + DOCTEST_GCC_SUPPRESS_WARNING_POP + DOCTEST_MSVC_SUPPRESS_WARNING_POP + + Subcase::operator bool() const { return m_entered; } + + Result::Result(bool passed, const String& decomposition) + : m_passed(passed) + , m_decomp(decomposition) {} + + ExpressionDecomposer::ExpressionDecomposer(assertType::Enum at) + : m_at(at) {} + + TestSuite& TestSuite::operator*(const char* in) { + m_test_suite = in; + return *this; + } + + TestCase::TestCase(funcType test, const char* file, unsigned line, const TestSuite& test_suite, + const String& type, int template_id) { + m_file = file; + m_line = line; + m_name = nullptr; // will be later overridden in operator* + m_test_suite = test_suite.m_test_suite; + m_description = test_suite.m_description; + m_skip = test_suite.m_skip; + m_no_breaks = test_suite.m_no_breaks; + m_no_output = test_suite.m_no_output; + m_may_fail = test_suite.m_may_fail; + m_should_fail = test_suite.m_should_fail; + m_expected_failures = test_suite.m_expected_failures; + m_timeout = test_suite.m_timeout; + + m_test = test; + m_type = type; + m_template_id = template_id; + } + + TestCase::TestCase(const TestCase& other) + : TestCaseData() { + *this = other; + } + + DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(26434) // hides a non-virtual function + TestCase& TestCase::operator=(const TestCase& other) { + TestCaseData::operator=(other); + m_test = other.m_test; + m_type = other.m_type; + m_template_id = other.m_template_id; + m_full_name = other.m_full_name; + + if(m_template_id != -1) + m_name = m_full_name.c_str(); + return *this; + } + DOCTEST_MSVC_SUPPRESS_WARNING_POP + + TestCase& TestCase::operator*(const char* in) { + m_name = in; + // make a new name with an appended type for templated test case + if(m_template_id != -1) { + m_full_name = String(m_name) + "<" + m_type + ">"; + // redirect the name to point to the newly constructed full name + m_name = m_full_name.c_str(); + } + return *this; + } + + bool TestCase::operator<(const TestCase& other) const { + // this will be used only to differentiate between test cases - not relevant for sorting + if(m_line != other.m_line) + return m_line < other.m_line; + const int name_cmp = strcmp(m_name, other.m_name); + if(name_cmp != 0) + return name_cmp < 0; + const int file_cmp = m_file.compare(other.m_file); + if(file_cmp != 0) + return file_cmp < 0; + return m_template_id < other.m_template_id; + } + + // all the registered tests + std::set& getRegisteredTests() { + static std::set data; + return data; + } +} // namespace detail +namespace { + using namespace detail; + // for sorting tests by file/line + bool fileOrderComparator(const TestCase* lhs, const TestCase* rhs) { + // this is needed because MSVC gives different case for drive letters + // for __FILE__ when evaluated in a header and a source file + const int res = lhs->m_file.compare(rhs->m_file, bool(DOCTEST_MSVC)); + if(res != 0) + return res < 0; + if(lhs->m_line != rhs->m_line) + return lhs->m_line < rhs->m_line; + return lhs->m_template_id < rhs->m_template_id; + } + + // for sorting tests by suite/file/line + bool suiteOrderComparator(const TestCase* lhs, const TestCase* rhs) { + const int res = std::strcmp(lhs->m_test_suite, rhs->m_test_suite); + if(res != 0) + return res < 0; + return fileOrderComparator(lhs, rhs); + } + + // for sorting tests by name/suite/file/line + bool nameOrderComparator(const TestCase* lhs, const TestCase* rhs) { + const int res = std::strcmp(lhs->m_name, rhs->m_name); + if(res != 0) + return res < 0; + return suiteOrderComparator(lhs, rhs); + } + + DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations") + void color_to_stream(std::ostream& s, Color::Enum code) { + static_cast(s); // for DOCTEST_CONFIG_COLORS_NONE or DOCTEST_CONFIG_COLORS_WINDOWS + static_cast(code); // for DOCTEST_CONFIG_COLORS_NONE +#ifdef DOCTEST_CONFIG_COLORS_ANSI + if(g_no_colors || + (isatty(STDOUT_FILENO) == false && getContextOptions()->force_colors == false)) + return; + + auto col = ""; + // clang-format off + switch(code) { //!OCLINT missing break in switch statement / unnecessary default statement in covered switch statement + case Color::Red: col = "[0;31m"; break; + case Color::Green: col = "[0;32m"; break; + case Color::Blue: col = "[0;34m"; break; + case Color::Cyan: col = "[0;36m"; break; + case Color::Yellow: col = "[0;33m"; break; + case Color::Grey: col = "[1;30m"; break; + case Color::LightGrey: col = "[0;37m"; break; + case Color::BrightRed: col = "[1;31m"; break; + case Color::BrightGreen: col = "[1;32m"; break; + case Color::BrightWhite: col = "[1;37m"; break; + case Color::Bright: // invalid + case Color::None: + case Color::White: + default: col = "[0m"; + } + // clang-format on + s << "\033" << col; +#endif // DOCTEST_CONFIG_COLORS_ANSI + +#ifdef DOCTEST_CONFIG_COLORS_WINDOWS + if(g_no_colors || + (_isatty(_fileno(stdout)) == false && getContextOptions()->force_colors == false)) + return; + + static struct ConsoleHelper { + HANDLE stdoutHandle; + WORD origFgAttrs; + WORD origBgAttrs; + + ConsoleHelper() { + stdoutHandle = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO csbiInfo; + GetConsoleScreenBufferInfo(stdoutHandle, &csbiInfo); + origFgAttrs = csbiInfo.wAttributes & ~(BACKGROUND_GREEN | BACKGROUND_RED | + BACKGROUND_BLUE | BACKGROUND_INTENSITY); + origBgAttrs = csbiInfo.wAttributes & ~(FOREGROUND_GREEN | FOREGROUND_RED | + FOREGROUND_BLUE | FOREGROUND_INTENSITY); + } + } ch; + +#define DOCTEST_SET_ATTR(x) SetConsoleTextAttribute(ch.stdoutHandle, x | ch.origBgAttrs) + + // clang-format off + switch (code) { + case Color::White: DOCTEST_SET_ATTR(FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE); break; + case Color::Red: DOCTEST_SET_ATTR(FOREGROUND_RED); break; + case Color::Green: DOCTEST_SET_ATTR(FOREGROUND_GREEN); break; + case Color::Blue: DOCTEST_SET_ATTR(FOREGROUND_BLUE); break; + case Color::Cyan: DOCTEST_SET_ATTR(FOREGROUND_BLUE | FOREGROUND_GREEN); break; + case Color::Yellow: DOCTEST_SET_ATTR(FOREGROUND_RED | FOREGROUND_GREEN); break; + case Color::Grey: DOCTEST_SET_ATTR(0); break; + case Color::LightGrey: DOCTEST_SET_ATTR(FOREGROUND_INTENSITY); break; + case Color::BrightRed: DOCTEST_SET_ATTR(FOREGROUND_INTENSITY | FOREGROUND_RED); break; + case Color::BrightGreen: DOCTEST_SET_ATTR(FOREGROUND_INTENSITY | FOREGROUND_GREEN); break; + case Color::BrightWhite: DOCTEST_SET_ATTR(FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE); break; + case Color::None: + case Color::Bright: // invalid + default: DOCTEST_SET_ATTR(ch.origFgAttrs); + } + // clang-format on +#endif // DOCTEST_CONFIG_COLORS_WINDOWS + } + DOCTEST_CLANG_SUPPRESS_WARNING_POP + + std::vector& getExceptionTranslators() { + static std::vector data; + return data; + } + + String translateActiveException() { +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS + String res; + auto& translators = getExceptionTranslators(); + for(auto& curr : translators) + if(curr->translate(res)) + return res; + // clang-format off + DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wcatch-value") + try { + throw; + } catch(std::exception& ex) { + return ex.what(); + } catch(std::string& msg) { + return msg.c_str(); + } catch(const char* msg) { + return msg; + } catch(...) { + return "unknown exception"; + } + DOCTEST_GCC_SUPPRESS_WARNING_POP +// clang-format on +#else // DOCTEST_CONFIG_NO_EXCEPTIONS + return ""; +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS + } +} // namespace + +namespace detail { + // used by the macros for registering tests + int regTest(const TestCase& tc) { + getRegisteredTests().insert(tc); + return 0; + } + + // sets the current test suite + int setTestSuite(const TestSuite& ts) { + doctest_detail_test_suite_ns::getCurrentTestSuite() = ts; + return 0; + } + +#ifdef DOCTEST_IS_DEBUGGER_ACTIVE + bool isDebuggerActive() { return DOCTEST_IS_DEBUGGER_ACTIVE(); } +#else // DOCTEST_IS_DEBUGGER_ACTIVE +#ifdef DOCTEST_PLATFORM_LINUX + class ErrnoGuard { + public: + ErrnoGuard() : m_oldErrno(errno) {} + ~ErrnoGuard() { errno = m_oldErrno; } + private: + int m_oldErrno; + }; + // See the comments in Catch2 for the reasoning behind this implementation: + // https://github.com/catchorg/Catch2/blob/v2.13.1/include/internal/catch_debugger.cpp#L79-L102 + bool isDebuggerActive() { + ErrnoGuard guard; + std::ifstream in("/proc/self/status"); + for(std::string line; std::getline(in, line);) { + static const int PREFIX_LEN = 11; + if(line.compare(0, PREFIX_LEN, "TracerPid:\t") == 0) { + return line.length() > PREFIX_LEN && line[PREFIX_LEN] != '0'; + } + } + return false; + } +#elif defined(DOCTEST_PLATFORM_MAC) + // The following function is taken directly from the following technical note: + // https://developer.apple.com/library/archive/qa/qa1361/_index.html + // Returns true if the current process is being debugged (either + // running under the debugger or has a debugger attached post facto). + bool isDebuggerActive() { + int mib[4]; + kinfo_proc info; + size_t size; + // Initialize the flags so that, if sysctl fails for some bizarre + // reason, we get a predictable result. + info.kp_proc.p_flag = 0; + // Initialize mib, which tells sysctl the info we want, in this case + // we're looking for information about a specific process ID. + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PID; + mib[3] = getpid(); + // Call sysctl. + size = sizeof(info); + if(sysctl(mib, DOCTEST_COUNTOF(mib), &info, &size, 0, 0) != 0) { + std::cerr << "\nCall to sysctl failed - unable to determine if debugger is active **\n"; + return false; + } + // We're being debugged if the P_TRACED flag is set. + return ((info.kp_proc.p_flag & P_TRACED) != 0); + } +#elif DOCTEST_MSVC || defined(__MINGW32__) || defined(__MINGW64__) + bool isDebuggerActive() { return ::IsDebuggerPresent() != 0; } +#else + bool isDebuggerActive() { return false; } +#endif // Platform +#endif // DOCTEST_IS_DEBUGGER_ACTIVE + + void registerExceptionTranslatorImpl(const IExceptionTranslator* et) { + if(std::find(getExceptionTranslators().begin(), getExceptionTranslators().end(), et) == + getExceptionTranslators().end()) + getExceptionTranslators().push_back(et); + } + + DOCTEST_THREAD_LOCAL std::vector g_infoContexts; // for logging with INFO() + + ContextScopeBase::ContextScopeBase() { + g_infoContexts.push_back(this); + } + + ContextScopeBase::ContextScopeBase(ContextScopeBase&& other) noexcept { + if (other.need_to_destroy) { + other.destroy(); + } + other.need_to_destroy = false; + g_infoContexts.push_back(this); + } + + DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4996) // std::uncaught_exception is deprecated in C++17 + DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations") + DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations") + + // destroy cannot be inlined into the destructor because that would mean calling stringify after + // ContextScope has been destroyed (base class destructors run after derived class destructors). + // Instead, ContextScope calls this method directly from its destructor. + void ContextScopeBase::destroy() { +#if defined(__cpp_lib_uncaught_exceptions) && __cpp_lib_uncaught_exceptions >= 201411L && (!defined(__MAC_OS_X_VERSION_MIN_REQUIRED) || __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200) + if(std::uncaught_exceptions() > 0) { +#else + if(std::uncaught_exception()) { +#endif + std::ostringstream s; + this->stringify(&s); + g_cs->stringifiedContexts.push_back(s.str().c_str()); + } + g_infoContexts.pop_back(); + } + + DOCTEST_CLANG_SUPPRESS_WARNING_POP + DOCTEST_GCC_SUPPRESS_WARNING_POP + DOCTEST_MSVC_SUPPRESS_WARNING_POP +} // namespace detail +namespace { + using namespace detail; + +#if !defined(DOCTEST_CONFIG_POSIX_SIGNALS) && !defined(DOCTEST_CONFIG_WINDOWS_SEH) + struct FatalConditionHandler + { + static void reset() {} + static void allocateAltStackMem() {} + static void freeAltStackMem() {} + }; +#else // DOCTEST_CONFIG_POSIX_SIGNALS || DOCTEST_CONFIG_WINDOWS_SEH + + void reportFatal(const std::string&); + +#ifdef DOCTEST_PLATFORM_WINDOWS + + struct SignalDefs + { + DWORD id; + const char* name; + }; + // There is no 1-1 mapping between signals and windows exceptions. + // Windows can easily distinguish between SO and SigSegV, + // but SigInt, SigTerm, etc are handled differently. + SignalDefs signalDefs[] = { + {static_cast(EXCEPTION_ILLEGAL_INSTRUCTION), + "SIGILL - Illegal instruction signal"}, + {static_cast(EXCEPTION_STACK_OVERFLOW), "SIGSEGV - Stack overflow"}, + {static_cast(EXCEPTION_ACCESS_VIOLATION), + "SIGSEGV - Segmentation violation signal"}, + {static_cast(EXCEPTION_INT_DIVIDE_BY_ZERO), "Divide by zero error"}, + }; + + struct FatalConditionHandler + { + static LONG CALLBACK handleException(PEXCEPTION_POINTERS ExceptionInfo) { + // Multiple threads may enter this filter/handler at once. We want the error message to be printed on the + // console just once no matter how many threads have crashed. + DOCTEST_DECLARE_STATIC_MUTEX(mutex) + static bool execute = true; + { + DOCTEST_LOCK_MUTEX(mutex) + if(execute) { + bool reported = false; + for(size_t i = 0; i < DOCTEST_COUNTOF(signalDefs); ++i) { + if(ExceptionInfo->ExceptionRecord->ExceptionCode == signalDefs[i].id) { + reportFatal(signalDefs[i].name); + reported = true; + break; + } + } + if(reported == false) + reportFatal("Unhandled SEH exception caught"); + if(isDebuggerActive() && !g_cs->no_breaks) + DOCTEST_BREAK_INTO_DEBUGGER(); + } + execute = false; + } + std::exit(EXIT_FAILURE); + } + + static void allocateAltStackMem() {} + static void freeAltStackMem() {} + + FatalConditionHandler() { + isSet = true; + // 32k seems enough for doctest to handle stack overflow, + // but the value was found experimentally, so there is no strong guarantee + guaranteeSize = 32 * 1024; + // Register an unhandled exception filter + previousTop = SetUnhandledExceptionFilter(handleException); + // Pass in guarantee size to be filled + SetThreadStackGuarantee(&guaranteeSize); + + // On Windows uncaught exceptions from another thread, exceptions from + // destructors, or calls to std::terminate are not a SEH exception + + // The terminal handler gets called when: + // - std::terminate is called FROM THE TEST RUNNER THREAD + // - an exception is thrown from a destructor FROM THE TEST RUNNER THREAD + original_terminate_handler = std::get_terminate(); + std::set_terminate([]() DOCTEST_NOEXCEPT { + reportFatal("Terminate handler called"); + if(isDebuggerActive() && !g_cs->no_breaks) + DOCTEST_BREAK_INTO_DEBUGGER(); + std::exit(EXIT_FAILURE); // explicitly exit - otherwise the SIGABRT handler may be called as well + }); + + // SIGABRT is raised when: + // - std::terminate is called FROM A DIFFERENT THREAD + // - an exception is thrown from a destructor FROM A DIFFERENT THREAD + // - an uncaught exception is thrown FROM A DIFFERENT THREAD + prev_sigabrt_handler = std::signal(SIGABRT, [](int signal) DOCTEST_NOEXCEPT { + if(signal == SIGABRT) { + reportFatal("SIGABRT - Abort (abnormal termination) signal"); + if(isDebuggerActive() && !g_cs->no_breaks) + DOCTEST_BREAK_INTO_DEBUGGER(); + std::exit(EXIT_FAILURE); + } + }); + + // The following settings are taken from google test, and more + // specifically from UnitTest::Run() inside of gtest.cc + + // the user does not want to see pop-up dialogs about crashes + prev_error_mode_1 = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT | + SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); + // This forces the abort message to go to stderr in all circumstances. + prev_error_mode_2 = _set_error_mode(_OUT_TO_STDERR); + // In the debug version, Visual Studio pops up a separate dialog + // offering a choice to debug the aborted program - we want to disable that. + prev_abort_behavior = _set_abort_behavior(0x0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT); + // In debug mode, the Windows CRT can crash with an assertion over invalid + // input (e.g. passing an invalid file descriptor). The default handling + // for these assertions is to pop up a dialog and wait for user input. + // Instead ask the CRT to dump such assertions to stderr non-interactively. + prev_report_mode = _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG); + prev_report_file = _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); + } + + static void reset() { + if(isSet) { + // Unregister handler and restore the old guarantee + SetUnhandledExceptionFilter(previousTop); + SetThreadStackGuarantee(&guaranteeSize); + std::set_terminate(original_terminate_handler); + std::signal(SIGABRT, prev_sigabrt_handler); + SetErrorMode(prev_error_mode_1); + _set_error_mode(prev_error_mode_2); + _set_abort_behavior(prev_abort_behavior, _WRITE_ABORT_MSG | _CALL_REPORTFAULT); + static_cast(_CrtSetReportMode(_CRT_ASSERT, prev_report_mode)); + static_cast(_CrtSetReportFile(_CRT_ASSERT, prev_report_file)); + isSet = false; + } + } + + ~FatalConditionHandler() { reset(); } + + private: + static UINT prev_error_mode_1; + static int prev_error_mode_2; + static unsigned int prev_abort_behavior; + static int prev_report_mode; + static _HFILE prev_report_file; + static void (DOCTEST_CDECL *prev_sigabrt_handler)(int); + static std::terminate_handler original_terminate_handler; + static bool isSet; + static ULONG guaranteeSize; + static LPTOP_LEVEL_EXCEPTION_FILTER previousTop; + }; + + UINT FatalConditionHandler::prev_error_mode_1; + int FatalConditionHandler::prev_error_mode_2; + unsigned int FatalConditionHandler::prev_abort_behavior; + int FatalConditionHandler::prev_report_mode; + _HFILE FatalConditionHandler::prev_report_file; + void (DOCTEST_CDECL *FatalConditionHandler::prev_sigabrt_handler)(int); + std::terminate_handler FatalConditionHandler::original_terminate_handler; + bool FatalConditionHandler::isSet = false; + ULONG FatalConditionHandler::guaranteeSize = 0; + LPTOP_LEVEL_EXCEPTION_FILTER FatalConditionHandler::previousTop = nullptr; + +#else // DOCTEST_PLATFORM_WINDOWS + + struct SignalDefs + { + int id; + const char* name; + }; + SignalDefs signalDefs[] = {{SIGINT, "SIGINT - Terminal interrupt signal"}, + {SIGILL, "SIGILL - Illegal instruction signal"}, + {SIGFPE, "SIGFPE - Floating point error signal"}, + {SIGSEGV, "SIGSEGV - Segmentation violation signal"}, + {SIGTERM, "SIGTERM - Termination request signal"}, + {SIGABRT, "SIGABRT - Abort (abnormal termination) signal"}}; + + struct FatalConditionHandler + { + static bool isSet; + static struct sigaction oldSigActions[DOCTEST_COUNTOF(signalDefs)]; + static stack_t oldSigStack; + static size_t altStackSize; + static char* altStackMem; + + static void handleSignal(int sig) { + const char* name = ""; + for(std::size_t i = 0; i < DOCTEST_COUNTOF(signalDefs); ++i) { + SignalDefs& def = signalDefs[i]; + if(sig == def.id) { + name = def.name; + break; + } + } + reset(); + reportFatal(name); + raise(sig); + } + + static void allocateAltStackMem() { + altStackMem = new char[altStackSize]; + } + + static void freeAltStackMem() { + delete[] altStackMem; + } + + FatalConditionHandler() { + isSet = true; + stack_t sigStack; + sigStack.ss_sp = altStackMem; + sigStack.ss_size = altStackSize; + sigStack.ss_flags = 0; + sigaltstack(&sigStack, &oldSigStack); + struct sigaction sa = {}; + sa.sa_handler = handleSignal; + sa.sa_flags = SA_ONSTACK; + for(std::size_t i = 0; i < DOCTEST_COUNTOF(signalDefs); ++i) { + sigaction(signalDefs[i].id, &sa, &oldSigActions[i]); + } + } + + ~FatalConditionHandler() { reset(); } + static void reset() { + if(isSet) { + // Set signals back to previous values -- hopefully nobody overwrote them in the meantime + for(std::size_t i = 0; i < DOCTEST_COUNTOF(signalDefs); ++i) { + sigaction(signalDefs[i].id, &oldSigActions[i], nullptr); + } + // Return the old stack + sigaltstack(&oldSigStack, nullptr); + isSet = false; + } + } + }; + + bool FatalConditionHandler::isSet = false; + struct sigaction FatalConditionHandler::oldSigActions[DOCTEST_COUNTOF(signalDefs)] = {}; + stack_t FatalConditionHandler::oldSigStack = {}; + size_t FatalConditionHandler::altStackSize = 4 * SIGSTKSZ; + char* FatalConditionHandler::altStackMem = nullptr; + +#endif // DOCTEST_PLATFORM_WINDOWS +#endif // DOCTEST_CONFIG_POSIX_SIGNALS || DOCTEST_CONFIG_WINDOWS_SEH + +} // namespace + +namespace { + using namespace detail; + +#ifdef DOCTEST_PLATFORM_WINDOWS +#define DOCTEST_OUTPUT_DEBUG_STRING(text) ::OutputDebugStringA(text) +#else + // TODO: integration with XCode and other IDEs +#define DOCTEST_OUTPUT_DEBUG_STRING(text) +#endif // Platform + + void addAssert(assertType::Enum at) { + if((at & assertType::is_warn) == 0) //!OCLINT bitwise operator in conditional + g_cs->numAssertsCurrentTest_atomic++; + } + + void addFailedAssert(assertType::Enum at) { + if((at & assertType::is_warn) == 0) //!OCLINT bitwise operator in conditional + g_cs->numAssertsFailedCurrentTest_atomic++; + } + +#if defined(DOCTEST_CONFIG_POSIX_SIGNALS) || defined(DOCTEST_CONFIG_WINDOWS_SEH) + void reportFatal(const std::string& message) { + g_cs->failure_flags |= TestCaseFailureReason::Crash; + + DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_exception, {message.c_str(), true}); + + while (g_cs->subcaseStack.size()) { + g_cs->subcaseStack.pop_back(); + DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_end, DOCTEST_EMPTY); + } + + g_cs->finalizeTestCaseData(); + + DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_end, *g_cs); + + DOCTEST_ITERATE_THROUGH_REPORTERS(test_run_end, *g_cs); + } +#endif // DOCTEST_CONFIG_POSIX_SIGNALS || DOCTEST_CONFIG_WINDOWS_SEH +} // namespace + +AssertData::AssertData(assertType::Enum at, const char* file, int line, const char* expr, + const char* exception_type, const StringContains& exception_string) + : m_test_case(g_cs->currentTest), m_at(at), m_file(file), m_line(line), m_expr(expr), + m_failed(true), m_threw(false), m_threw_as(false), m_exception_type(exception_type), + m_exception_string(exception_string) { +#if DOCTEST_MSVC + if (m_expr[0] == ' ') // this happens when variadic macros are disabled under MSVC + ++m_expr; +#endif // MSVC +} + +namespace detail { + ResultBuilder::ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr, + const char* exception_type, const String& exception_string) + : AssertData(at, file, line, expr, exception_type, exception_string) { } + + ResultBuilder::ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr, + const char* exception_type, const Contains& exception_string) + : AssertData(at, file, line, expr, exception_type, exception_string) { } + + void ResultBuilder::setResult(const Result& res) { + m_decomp = res.m_decomp; + m_failed = !res.m_passed; + } + + void ResultBuilder::translateException() { + m_threw = true; + m_exception = translateActiveException(); + } + + bool ResultBuilder::log() { + if(m_at & assertType::is_throws) { //!OCLINT bitwise operator in conditional + m_failed = !m_threw; + } else if((m_at & assertType::is_throws_as) && (m_at & assertType::is_throws_with)) { //!OCLINT + m_failed = !m_threw_as || !m_exception_string.check(m_exception); + } else if(m_at & assertType::is_throws_as) { //!OCLINT bitwise operator in conditional + m_failed = !m_threw_as; + } else if(m_at & assertType::is_throws_with) { //!OCLINT bitwise operator in conditional + m_failed = !m_exception_string.check(m_exception); + } else if(m_at & assertType::is_nothrow) { //!OCLINT bitwise operator in conditional + m_failed = m_threw; + } + + if(m_exception.size()) + m_exception = "\"" + m_exception + "\""; + + if(is_running_in_test) { + addAssert(m_at); + DOCTEST_ITERATE_THROUGH_REPORTERS(log_assert, *this); + + if(m_failed) + addFailedAssert(m_at); + } else if(m_failed) { + failed_out_of_a_testing_context(*this); + } + + return m_failed && isDebuggerActive() && !getContextOptions()->no_breaks && + (g_cs->currentTest == nullptr || !g_cs->currentTest->m_no_breaks); // break into debugger + } + + void ResultBuilder::react() const { + if(m_failed && checkIfShouldThrow(m_at)) + throwException(); + } + + void failed_out_of_a_testing_context(const AssertData& ad) { + if(g_cs->ah) + g_cs->ah(ad); + else + std::abort(); + } + + bool decomp_assert(assertType::Enum at, const char* file, int line, const char* expr, + const Result& result) { + bool failed = !result.m_passed; + + // ################################################################################### + // IF THE DEBUGGER BREAKS HERE - GO 1 LEVEL UP IN THE CALLSTACK FOR THE FAILING ASSERT + // THIS IS THE EFFECT OF HAVING 'DOCTEST_CONFIG_SUPER_FAST_ASSERTS' DEFINED + // ################################################################################### + DOCTEST_ASSERT_OUT_OF_TESTS(result.m_decomp); + DOCTEST_ASSERT_IN_TESTS(result.m_decomp); + return !failed; + } + + MessageBuilder::MessageBuilder(const char* file, int line, assertType::Enum severity) { + m_stream = tlssPush(); + m_file = file; + m_line = line; + m_severity = severity; + } + + MessageBuilder::~MessageBuilder() { + if (!logged) + tlssPop(); + } + + DOCTEST_DEFINE_INTERFACE(IExceptionTranslator) + + bool MessageBuilder::log() { + if (!logged) { + m_string = tlssPop(); + logged = true; + } + + DOCTEST_ITERATE_THROUGH_REPORTERS(log_message, *this); + + const bool isWarn = m_severity & assertType::is_warn; + + // warn is just a message in this context so we don't treat it as an assert + if(!isWarn) { + addAssert(m_severity); + addFailedAssert(m_severity); + } + + return isDebuggerActive() && !getContextOptions()->no_breaks && !isWarn && + (g_cs->currentTest == nullptr || !g_cs->currentTest->m_no_breaks); // break into debugger + } + + void MessageBuilder::react() { + if(m_severity & assertType::is_require) //!OCLINT bitwise operator in conditional + throwException(); + } +} // namespace detail +namespace { + using namespace detail; + + // clang-format off + +// ================================================================================================= +// The following code has been taken verbatim from Catch2/include/internal/catch_xmlwriter.h/cpp +// This is done so cherry-picking bug fixes is trivial - even the style/formatting is untouched. +// ================================================================================================= + + class XmlEncode { + public: + enum ForWhat { ForTextNodes, ForAttributes }; + + XmlEncode( std::string const& str, ForWhat forWhat = ForTextNodes ); + + void encodeTo( std::ostream& os ) const; + + friend std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode ); + + private: + std::string m_str; + ForWhat m_forWhat; + }; + + class XmlWriter { + public: + + class ScopedElement { + public: + ScopedElement( XmlWriter* writer ); + + ScopedElement( ScopedElement&& other ) DOCTEST_NOEXCEPT; + ScopedElement& operator=( ScopedElement&& other ) DOCTEST_NOEXCEPT; + + ~ScopedElement(); + + ScopedElement& writeText( std::string const& text, bool indent = true ); + + template + ScopedElement& writeAttribute( std::string const& name, T const& attribute ) { + m_writer->writeAttribute( name, attribute ); + return *this; + } + + private: + mutable XmlWriter* m_writer = nullptr; + }; + +#ifndef DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM + XmlWriter( std::ostream& os = std::cout ); +#else // DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM + XmlWriter( std::ostream& os ); +#endif // DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM + ~XmlWriter(); + + XmlWriter( XmlWriter const& ) = delete; + XmlWriter& operator=( XmlWriter const& ) = delete; + + XmlWriter& startElement( std::string const& name ); + + ScopedElement scopedElement( std::string const& name ); + + XmlWriter& endElement(); + + XmlWriter& writeAttribute( std::string const& name, std::string const& attribute ); + + XmlWriter& writeAttribute( std::string const& name, const char* attribute ); + + XmlWriter& writeAttribute( std::string const& name, bool attribute ); + + template + XmlWriter& writeAttribute( std::string const& name, T const& attribute ) { + std::stringstream rss; + rss << attribute; + return writeAttribute( name, rss.str() ); + } + + XmlWriter& writeText( std::string const& text, bool indent = true ); + + //XmlWriter& writeComment( std::string const& text ); + + //void writeStylesheetRef( std::string const& url ); + + //XmlWriter& writeBlankLine(); + + void ensureTagClosed(); + + void writeDeclaration(); + + private: + + void newlineIfNecessary(); + + bool m_tagIsOpen = false; + bool m_needsNewline = false; + std::vector m_tags; + std::string m_indent; + std::ostream& m_os; + }; + +// ================================================================================================= +// The following code has been taken verbatim from Catch2/include/internal/catch_xmlwriter.h/cpp +// This is done so cherry-picking bug fixes is trivial - even the style/formatting is untouched. +// ================================================================================================= + +using uchar = unsigned char; + +namespace { + + size_t trailingBytes(unsigned char c) { + if ((c & 0xE0) == 0xC0) { + return 2; + } + if ((c & 0xF0) == 0xE0) { + return 3; + } + if ((c & 0xF8) == 0xF0) { + return 4; + } + DOCTEST_INTERNAL_ERROR("Invalid multibyte utf-8 start byte encountered"); + } + + uint32_t headerValue(unsigned char c) { + if ((c & 0xE0) == 0xC0) { + return c & 0x1F; + } + if ((c & 0xF0) == 0xE0) { + return c & 0x0F; + } + if ((c & 0xF8) == 0xF0) { + return c & 0x07; + } + DOCTEST_INTERNAL_ERROR("Invalid multibyte utf-8 start byte encountered"); + } + + void hexEscapeChar(std::ostream& os, unsigned char c) { + std::ios_base::fmtflags f(os.flags()); + os << "\\x" + << std::uppercase << std::hex << std::setfill('0') << std::setw(2) + << static_cast(c); + os.flags(f); + } + +} // anonymous namespace + + XmlEncode::XmlEncode( std::string const& str, ForWhat forWhat ) + : m_str( str ), + m_forWhat( forWhat ) + {} + + void XmlEncode::encodeTo( std::ostream& os ) const { + // Apostrophe escaping not necessary if we always use " to write attributes + // (see: https://www.w3.org/TR/xml/#syntax) + + for( std::size_t idx = 0; idx < m_str.size(); ++ idx ) { + uchar c = m_str[idx]; + switch (c) { + case '<': os << "<"; break; + case '&': os << "&"; break; + + case '>': + // See: https://www.w3.org/TR/xml/#syntax + if (idx > 2 && m_str[idx - 1] == ']' && m_str[idx - 2] == ']') + os << ">"; + else + os << c; + break; + + case '\"': + if (m_forWhat == ForAttributes) + os << """; + else + os << c; + break; + + default: + // Check for control characters and invalid utf-8 + + // Escape control characters in standard ascii + // see https://stackoverflow.com/questions/404107/why-are-control-characters-illegal-in-xml-1-0 + if (c < 0x09 || (c > 0x0D && c < 0x20) || c == 0x7F) { + hexEscapeChar(os, c); + break; + } + + // Plain ASCII: Write it to stream + if (c < 0x7F) { + os << c; + break; + } + + // UTF-8 territory + // Check if the encoding is valid and if it is not, hex escape bytes. + // Important: We do not check the exact decoded values for validity, only the encoding format + // First check that this bytes is a valid lead byte: + // This means that it is not encoded as 1111 1XXX + // Or as 10XX XXXX + if (c < 0xC0 || + c >= 0xF8) { + hexEscapeChar(os, c); + break; + } + + auto encBytes = trailingBytes(c); + // Are there enough bytes left to avoid accessing out-of-bounds memory? + if (idx + encBytes - 1 >= m_str.size()) { + hexEscapeChar(os, c); + break; + } + // The header is valid, check data + // The next encBytes bytes must together be a valid utf-8 + // This means: bitpattern 10XX XXXX and the extracted value is sane (ish) + bool valid = true; + uint32_t value = headerValue(c); + for (std::size_t n = 1; n < encBytes; ++n) { + uchar nc = m_str[idx + n]; + valid &= ((nc & 0xC0) == 0x80); + value = (value << 6) | (nc & 0x3F); + } + + if ( + // Wrong bit pattern of following bytes + (!valid) || + // Overlong encodings + (value < 0x80) || + ( value < 0x800 && encBytes > 2) || // removed "0x80 <= value &&" because redundant + (0x800 < value && value < 0x10000 && encBytes > 3) || + // Encoded value out of range + (value >= 0x110000) + ) { + hexEscapeChar(os, c); + break; + } + + // If we got here, this is in fact a valid(ish) utf-8 sequence + for (std::size_t n = 0; n < encBytes; ++n) { + os << m_str[idx + n]; + } + idx += encBytes - 1; + break; + } + } + } + + std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode ) { + xmlEncode.encodeTo( os ); + return os; + } + + XmlWriter::ScopedElement::ScopedElement( XmlWriter* writer ) + : m_writer( writer ) + {} + + XmlWriter::ScopedElement::ScopedElement( ScopedElement&& other ) DOCTEST_NOEXCEPT + : m_writer( other.m_writer ){ + other.m_writer = nullptr; + } + XmlWriter::ScopedElement& XmlWriter::ScopedElement::operator=( ScopedElement&& other ) DOCTEST_NOEXCEPT { + if ( m_writer ) { + m_writer->endElement(); + } + m_writer = other.m_writer; + other.m_writer = nullptr; + return *this; + } + + + XmlWriter::ScopedElement::~ScopedElement() { + if( m_writer ) + m_writer->endElement(); + } + + XmlWriter::ScopedElement& XmlWriter::ScopedElement::writeText( std::string const& text, bool indent ) { + m_writer->writeText( text, indent ); + return *this; + } + + XmlWriter::XmlWriter( std::ostream& os ) : m_os( os ) + { + // writeDeclaration(); // called explicitly by the reporters that use the writer class - see issue #627 + } + + XmlWriter::~XmlWriter() { + while( !m_tags.empty() ) + endElement(); + } + + XmlWriter& XmlWriter::startElement( std::string const& name ) { + ensureTagClosed(); + newlineIfNecessary(); + m_os << m_indent << '<' << name; + m_tags.push_back( name ); + m_indent += " "; + m_tagIsOpen = true; + return *this; + } + + XmlWriter::ScopedElement XmlWriter::scopedElement( std::string const& name ) { + ScopedElement scoped( this ); + startElement( name ); + return scoped; + } + + XmlWriter& XmlWriter::endElement() { + newlineIfNecessary(); + m_indent = m_indent.substr( 0, m_indent.size()-2 ); + if( m_tagIsOpen ) { + m_os << "/>"; + m_tagIsOpen = false; + } + else { + m_os << m_indent << ""; + } + m_os << std::endl; + m_tags.pop_back(); + return *this; + } + + XmlWriter& XmlWriter::writeAttribute( std::string const& name, std::string const& attribute ) { + if( !name.empty() && !attribute.empty() ) + m_os << ' ' << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << '"'; + return *this; + } + + XmlWriter& XmlWriter::writeAttribute( std::string const& name, const char* attribute ) { + if( !name.empty() && attribute && attribute[0] != '\0' ) + m_os << ' ' << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << '"'; + return *this; + } + + XmlWriter& XmlWriter::writeAttribute( std::string const& name, bool attribute ) { + m_os << ' ' << name << "=\"" << ( attribute ? "true" : "false" ) << '"'; + return *this; + } + + XmlWriter& XmlWriter::writeText( std::string const& text, bool indent ) { + if( !text.empty() ){ + bool tagWasOpen = m_tagIsOpen; + ensureTagClosed(); + if( tagWasOpen && indent ) + m_os << m_indent; + m_os << XmlEncode( text ); + m_needsNewline = true; + } + return *this; + } + + //XmlWriter& XmlWriter::writeComment( std::string const& text ) { + // ensureTagClosed(); + // m_os << m_indent << ""; + // m_needsNewline = true; + // return *this; + //} + + //void XmlWriter::writeStylesheetRef( std::string const& url ) { + // m_os << "\n"; + //} + + //XmlWriter& XmlWriter::writeBlankLine() { + // ensureTagClosed(); + // m_os << '\n'; + // return *this; + //} + + void XmlWriter::ensureTagClosed() { + if( m_tagIsOpen ) { + m_os << ">" << std::endl; + m_tagIsOpen = false; + } + } + + void XmlWriter::writeDeclaration() { + m_os << "\n"; + } + + void XmlWriter::newlineIfNecessary() { + if( m_needsNewline ) { + m_os << std::endl; + m_needsNewline = false; + } + } + +// ================================================================================================= +// End of copy-pasted code from Catch +// ================================================================================================= + + // clang-format on + + struct XmlReporter : public IReporter + { + XmlWriter xml; + DOCTEST_DECLARE_MUTEX(mutex) + + // caching pointers/references to objects of these types - safe to do + const ContextOptions& opt; + const TestCaseData* tc = nullptr; + + XmlReporter(const ContextOptions& co) + : xml(*co.cout) + , opt(co) {} + + void log_contexts() { + int num_contexts = get_num_active_contexts(); + if(num_contexts) { + auto contexts = get_active_contexts(); + std::stringstream ss; + for(int i = 0; i < num_contexts; ++i) { + contexts[i]->stringify(&ss); + xml.scopedElement("Info").writeText(ss.str()); + ss.str(""); + } + } + } + + unsigned line(unsigned l) const { return opt.no_line_numbers ? 0 : l; } + + void test_case_start_impl(const TestCaseData& in) { + bool open_ts_tag = false; + if(tc != nullptr) { // we have already opened a test suite + if(std::strcmp(tc->m_test_suite, in.m_test_suite) != 0) { + xml.endElement(); + open_ts_tag = true; + } + } + else { + open_ts_tag = true; // first test case ==> first test suite + } + + if(open_ts_tag) { + xml.startElement("TestSuite"); + xml.writeAttribute("name", in.m_test_suite); + } + + tc = ∈ + xml.startElement("TestCase") + .writeAttribute("name", in.m_name) + .writeAttribute("filename", skipPathFromFilename(in.m_file.c_str())) + .writeAttribute("line", line(in.m_line)) + .writeAttribute("description", in.m_description); + + if(Approx(in.m_timeout) != 0) + xml.writeAttribute("timeout", in.m_timeout); + if(in.m_may_fail) + xml.writeAttribute("may_fail", true); + if(in.m_should_fail) + xml.writeAttribute("should_fail", true); + } + + // ========================================================================================= + // WHAT FOLLOWS ARE OVERRIDES OF THE VIRTUAL METHODS OF THE REPORTER INTERFACE + // ========================================================================================= + + void report_query(const QueryData& in) override { + test_run_start(); + if(opt.list_reporters) { + for(auto& curr : getListeners()) + xml.scopedElement("Listener") + .writeAttribute("priority", curr.first.first) + .writeAttribute("name", curr.first.second); + for(auto& curr : getReporters()) + xml.scopedElement("Reporter") + .writeAttribute("priority", curr.first.first) + .writeAttribute("name", curr.first.second); + } else if(opt.count || opt.list_test_cases) { + for(unsigned i = 0; i < in.num_data; ++i) { + xml.scopedElement("TestCase").writeAttribute("name", in.data[i]->m_name) + .writeAttribute("testsuite", in.data[i]->m_test_suite) + .writeAttribute("filename", skipPathFromFilename(in.data[i]->m_file.c_str())) + .writeAttribute("line", line(in.data[i]->m_line)) + .writeAttribute("skipped", in.data[i]->m_skip); + } + xml.scopedElement("OverallResultsTestCases") + .writeAttribute("unskipped", in.run_stats->numTestCasesPassingFilters); + } else if(opt.list_test_suites) { + for(unsigned i = 0; i < in.num_data; ++i) + xml.scopedElement("TestSuite").writeAttribute("name", in.data[i]->m_test_suite); + xml.scopedElement("OverallResultsTestCases") + .writeAttribute("unskipped", in.run_stats->numTestCasesPassingFilters); + xml.scopedElement("OverallResultsTestSuites") + .writeAttribute("unskipped", in.run_stats->numTestSuitesPassingFilters); + } + xml.endElement(); + } + + void test_run_start() override { + xml.writeDeclaration(); + + // remove .exe extension - mainly to have the same output on UNIX and Windows + std::string binary_name = skipPathFromFilename(opt.binary_name.c_str()); +#ifdef DOCTEST_PLATFORM_WINDOWS + if(binary_name.rfind(".exe") != std::string::npos) + binary_name = binary_name.substr(0, binary_name.length() - 4); +#endif // DOCTEST_PLATFORM_WINDOWS + + xml.startElement("doctest").writeAttribute("binary", binary_name); + if(opt.no_version == false) + xml.writeAttribute("version", DOCTEST_VERSION_STR); + + // only the consequential ones (TODO: filters) + xml.scopedElement("Options") + .writeAttribute("order_by", opt.order_by.c_str()) + .writeAttribute("rand_seed", opt.rand_seed) + .writeAttribute("first", opt.first) + .writeAttribute("last", opt.last) + .writeAttribute("abort_after", opt.abort_after) + .writeAttribute("subcase_filter_levels", opt.subcase_filter_levels) + .writeAttribute("case_sensitive", opt.case_sensitive) + .writeAttribute("no_throw", opt.no_throw) + .writeAttribute("no_skip", opt.no_skip); + } + + void test_run_end(const TestRunStats& p) override { + if(tc) // the TestSuite tag - only if there has been at least 1 test case + xml.endElement(); + + xml.scopedElement("OverallResultsAsserts") + .writeAttribute("successes", p.numAsserts - p.numAssertsFailed) + .writeAttribute("failures", p.numAssertsFailed); + + xml.startElement("OverallResultsTestCases") + .writeAttribute("successes", + p.numTestCasesPassingFilters - p.numTestCasesFailed) + .writeAttribute("failures", p.numTestCasesFailed); + if(opt.no_skipped_summary == false) + xml.writeAttribute("skipped", p.numTestCases - p.numTestCasesPassingFilters); + xml.endElement(); + + xml.endElement(); + } + + void test_case_start(const TestCaseData& in) override { + test_case_start_impl(in); + xml.ensureTagClosed(); + } + + void test_case_reenter(const TestCaseData&) override {} + + void test_case_end(const CurrentTestCaseStats& st) override { + xml.startElement("OverallResultsAsserts") + .writeAttribute("successes", + st.numAssertsCurrentTest - st.numAssertsFailedCurrentTest) + .writeAttribute("failures", st.numAssertsFailedCurrentTest) + .writeAttribute("test_case_success", st.testCaseSuccess); + if(opt.duration) + xml.writeAttribute("duration", st.seconds); + if(tc->m_expected_failures) + xml.writeAttribute("expected_failures", tc->m_expected_failures); + xml.endElement(); + + xml.endElement(); + } + + void test_case_exception(const TestCaseException& e) override { + DOCTEST_LOCK_MUTEX(mutex) + + xml.scopedElement("Exception") + .writeAttribute("crash", e.is_crash) + .writeText(e.error_string.c_str()); + } + + void subcase_start(const SubcaseSignature& in) override { + xml.startElement("SubCase") + .writeAttribute("name", in.m_name) + .writeAttribute("filename", skipPathFromFilename(in.m_file)) + .writeAttribute("line", line(in.m_line)); + xml.ensureTagClosed(); + } + + void subcase_end() override { xml.endElement(); } + + void log_assert(const AssertData& rb) override { + if(!rb.m_failed && !opt.success) + return; + + DOCTEST_LOCK_MUTEX(mutex) + + xml.startElement("Expression") + .writeAttribute("success", !rb.m_failed) + .writeAttribute("type", assertString(rb.m_at)) + .writeAttribute("filename", skipPathFromFilename(rb.m_file)) + .writeAttribute("line", line(rb.m_line)); + + xml.scopedElement("Original").writeText(rb.m_expr); + + if(rb.m_threw) + xml.scopedElement("Exception").writeText(rb.m_exception.c_str()); + + if(rb.m_at & assertType::is_throws_as) + xml.scopedElement("ExpectedException").writeText(rb.m_exception_type); + if(rb.m_at & assertType::is_throws_with) + xml.scopedElement("ExpectedExceptionString").writeText(rb.m_exception_string.c_str()); + if((rb.m_at & assertType::is_normal) && !rb.m_threw) + xml.scopedElement("Expanded").writeText(rb.m_decomp.c_str()); + + log_contexts(); + + xml.endElement(); + } + + void log_message(const MessageData& mb) override { + DOCTEST_LOCK_MUTEX(mutex) + + xml.startElement("Message") + .writeAttribute("type", failureString(mb.m_severity)) + .writeAttribute("filename", skipPathFromFilename(mb.m_file)) + .writeAttribute("line", line(mb.m_line)); + + xml.scopedElement("Text").writeText(mb.m_string.c_str()); + + log_contexts(); + + xml.endElement(); + } + + void test_case_skipped(const TestCaseData& in) override { + if(opt.no_skipped_summary == false) { + test_case_start_impl(in); + xml.writeAttribute("skipped", "true"); + xml.endElement(); + } + } + }; + + DOCTEST_REGISTER_REPORTER("xml", 0, XmlReporter); + + void fulltext_log_assert_to_stream(std::ostream& s, const AssertData& rb) { + if((rb.m_at & (assertType::is_throws_as | assertType::is_throws_with)) == + 0) //!OCLINT bitwise operator in conditional + s << Color::Cyan << assertString(rb.m_at) << "( " << rb.m_expr << " ) " + << Color::None; + + if(rb.m_at & assertType::is_throws) { //!OCLINT bitwise operator in conditional + s << (rb.m_threw ? "threw as expected!" : "did NOT throw at all!") << "\n"; + } else if((rb.m_at & assertType::is_throws_as) && + (rb.m_at & assertType::is_throws_with)) { //!OCLINT + s << Color::Cyan << assertString(rb.m_at) << "( " << rb.m_expr << ", \"" + << rb.m_exception_string.c_str() + << "\", " << rb.m_exception_type << " ) " << Color::None; + if(rb.m_threw) { + if(!rb.m_failed) { + s << "threw as expected!\n"; + } else { + s << "threw a DIFFERENT exception! (contents: " << rb.m_exception << ")\n"; + } + } else { + s << "did NOT throw at all!\n"; + } + } else if(rb.m_at & + assertType::is_throws_as) { //!OCLINT bitwise operator in conditional + s << Color::Cyan << assertString(rb.m_at) << "( " << rb.m_expr << ", " + << rb.m_exception_type << " ) " << Color::None + << (rb.m_threw ? (rb.m_threw_as ? "threw as expected!" : + "threw a DIFFERENT exception: ") : + "did NOT throw at all!") + << Color::Cyan << rb.m_exception << "\n"; + } else if(rb.m_at & + assertType::is_throws_with) { //!OCLINT bitwise operator in conditional + s << Color::Cyan << assertString(rb.m_at) << "( " << rb.m_expr << ", \"" + << rb.m_exception_string.c_str() + << "\" ) " << Color::None + << (rb.m_threw ? (!rb.m_failed ? "threw as expected!" : + "threw a DIFFERENT exception: ") : + "did NOT throw at all!") + << Color::Cyan << rb.m_exception << "\n"; + } else if(rb.m_at & assertType::is_nothrow) { //!OCLINT bitwise operator in conditional + s << (rb.m_threw ? "THREW exception: " : "didn't throw!") << Color::Cyan + << rb.m_exception << "\n"; + } else { + s << (rb.m_threw ? "THREW exception: " : + (!rb.m_failed ? "is correct!\n" : "is NOT correct!\n")); + if(rb.m_threw) + s << rb.m_exception << "\n"; + else + s << " values: " << assertString(rb.m_at) << "( " << rb.m_decomp << " )\n"; + } + } + + // TODO: + // - log_message() + // - respond to queries + // - honor remaining options + // - more attributes in tags + struct JUnitReporter : public IReporter + { + XmlWriter xml; + DOCTEST_DECLARE_MUTEX(mutex) + Timer timer; + std::vector deepestSubcaseStackNames; + + struct JUnitTestCaseData + { + static std::string getCurrentTimestamp() { + // Beware, this is not reentrant because of backward compatibility issues + // Also, UTC only, again because of backward compatibility (%z is C++11) + time_t rawtime; + std::time(&rawtime); + auto const timeStampSize = sizeof("2017-01-16T17:06:45Z"); + + std::tm timeInfo; +#ifdef DOCTEST_PLATFORM_WINDOWS + gmtime_s(&timeInfo, &rawtime); +#else // DOCTEST_PLATFORM_WINDOWS + gmtime_r(&rawtime, &timeInfo); +#endif // DOCTEST_PLATFORM_WINDOWS + + char timeStamp[timeStampSize]; + const char* const fmt = "%Y-%m-%dT%H:%M:%SZ"; + + std::strftime(timeStamp, timeStampSize, fmt, &timeInfo); + return std::string(timeStamp); + } + + struct JUnitTestMessage + { + JUnitTestMessage(const std::string& _message, const std::string& _type, const std::string& _details) + : message(_message), type(_type), details(_details) {} + + JUnitTestMessage(const std::string& _message, const std::string& _details) + : message(_message), type(), details(_details) {} + + std::string message, type, details; + }; + + struct JUnitTestCase + { + JUnitTestCase(const std::string& _classname, const std::string& _name) + : classname(_classname), name(_name), time(0), failures() {} + + std::string classname, name; + double time; + std::vector failures, errors; + }; + + void add(const std::string& classname, const std::string& name) { + testcases.emplace_back(classname, name); + } + + void appendSubcaseNamesToLastTestcase(std::vector nameStack) { + for(auto& curr: nameStack) + if(curr.size()) + testcases.back().name += std::string("/") + curr.c_str(); + } + + void addTime(double time) { + if(time < 1e-4) + time = 0; + testcases.back().time = time; + totalSeconds += time; + } + + void addFailure(const std::string& message, const std::string& type, const std::string& details) { + testcases.back().failures.emplace_back(message, type, details); + ++totalFailures; + } + + void addError(const std::string& message, const std::string& details) { + testcases.back().errors.emplace_back(message, details); + ++totalErrors; + } + + std::vector testcases; + double totalSeconds = 0; + int totalErrors = 0, totalFailures = 0; + }; + + JUnitTestCaseData testCaseData; + + // caching pointers/references to objects of these types - safe to do + const ContextOptions& opt; + const TestCaseData* tc = nullptr; + + JUnitReporter(const ContextOptions& co) + : xml(*co.cout) + , opt(co) {} + + unsigned line(unsigned l) const { return opt.no_line_numbers ? 0 : l; } + + // ========================================================================================= + // WHAT FOLLOWS ARE OVERRIDES OF THE VIRTUAL METHODS OF THE REPORTER INTERFACE + // ========================================================================================= + + void report_query(const QueryData&) override { + xml.writeDeclaration(); + } + + void test_run_start() override { + xml.writeDeclaration(); + } + + void test_run_end(const TestRunStats& p) override { + // remove .exe extension - mainly to have the same output on UNIX and Windows + std::string binary_name = skipPathFromFilename(opt.binary_name.c_str()); +#ifdef DOCTEST_PLATFORM_WINDOWS + if(binary_name.rfind(".exe") != std::string::npos) + binary_name = binary_name.substr(0, binary_name.length() - 4); +#endif // DOCTEST_PLATFORM_WINDOWS + xml.startElement("testsuites"); + xml.startElement("testsuite").writeAttribute("name", binary_name) + .writeAttribute("errors", testCaseData.totalErrors) + .writeAttribute("failures", testCaseData.totalFailures) + .writeAttribute("tests", p.numAsserts); + if(opt.no_time_in_output == false) { + xml.writeAttribute("time", testCaseData.totalSeconds); + xml.writeAttribute("timestamp", JUnitTestCaseData::getCurrentTimestamp()); + } + if(opt.no_version == false) + xml.writeAttribute("doctest_version", DOCTEST_VERSION_STR); + + for(const auto& testCase : testCaseData.testcases) { + xml.startElement("testcase") + .writeAttribute("classname", testCase.classname) + .writeAttribute("name", testCase.name); + if(opt.no_time_in_output == false) + xml.writeAttribute("time", testCase.time); + // This is not ideal, but it should be enough to mimic gtest's junit output. + xml.writeAttribute("status", "run"); + + for(const auto& failure : testCase.failures) { + xml.scopedElement("failure") + .writeAttribute("message", failure.message) + .writeAttribute("type", failure.type) + .writeText(failure.details, false); + } + + for(const auto& error : testCase.errors) { + xml.scopedElement("error") + .writeAttribute("message", error.message) + .writeText(error.details); + } + + xml.endElement(); + } + xml.endElement(); + xml.endElement(); + } + + void test_case_start(const TestCaseData& in) override { + testCaseData.add(skipPathFromFilename(in.m_file.c_str()), in.m_name); + timer.start(); + } + + void test_case_reenter(const TestCaseData& in) override { + testCaseData.addTime(timer.getElapsedSeconds()); + testCaseData.appendSubcaseNamesToLastTestcase(deepestSubcaseStackNames); + deepestSubcaseStackNames.clear(); + + timer.start(); + testCaseData.add(skipPathFromFilename(in.m_file.c_str()), in.m_name); + } + + void test_case_end(const CurrentTestCaseStats&) override { + testCaseData.addTime(timer.getElapsedSeconds()); + testCaseData.appendSubcaseNamesToLastTestcase(deepestSubcaseStackNames); + deepestSubcaseStackNames.clear(); + } + + void test_case_exception(const TestCaseException& e) override { + DOCTEST_LOCK_MUTEX(mutex) + testCaseData.addError("exception", e.error_string.c_str()); + } + + void subcase_start(const SubcaseSignature& in) override { + deepestSubcaseStackNames.push_back(in.m_name); + } + + void subcase_end() override {} + + void log_assert(const AssertData& rb) override { + if(!rb.m_failed) // report only failures & ignore the `success` option + return; + + DOCTEST_LOCK_MUTEX(mutex) + + std::ostringstream os; + os << skipPathFromFilename(rb.m_file) << (opt.gnu_file_line ? ":" : "(") + << line(rb.m_line) << (opt.gnu_file_line ? ":" : "):") << std::endl; + + fulltext_log_assert_to_stream(os, rb); + log_contexts(os); + testCaseData.addFailure(rb.m_decomp.c_str(), assertString(rb.m_at), os.str()); + } + + void log_message(const MessageData& mb) override { + if(mb.m_severity & assertType::is_warn) // report only failures + return; + + DOCTEST_LOCK_MUTEX(mutex) + + std::ostringstream os; + os << skipPathFromFilename(mb.m_file) << (opt.gnu_file_line ? ":" : "(") + << line(mb.m_line) << (opt.gnu_file_line ? ":" : "):") << std::endl; + + os << mb.m_string.c_str() << "\n"; + log_contexts(os); + + testCaseData.addFailure(mb.m_string.c_str(), + mb.m_severity & assertType::is_check ? "FAIL_CHECK" : "FAIL", os.str()); + } + + void test_case_skipped(const TestCaseData&) override {} + + void log_contexts(std::ostringstream& s) { + int num_contexts = get_num_active_contexts(); + if(num_contexts) { + auto contexts = get_active_contexts(); + + s << " logged: "; + for(int i = 0; i < num_contexts; ++i) { + s << (i == 0 ? "" : " "); + contexts[i]->stringify(&s); + s << std::endl; + } + } + } + }; + + DOCTEST_REGISTER_REPORTER("junit", 0, JUnitReporter); + + struct Whitespace + { + int nrSpaces; + explicit Whitespace(int nr) + : nrSpaces(nr) {} + }; + + std::ostream& operator<<(std::ostream& out, const Whitespace& ws) { + if(ws.nrSpaces != 0) + out << std::setw(ws.nrSpaces) << ' '; + return out; + } + + struct ConsoleReporter : public IReporter + { + std::ostream& s; + bool hasLoggedCurrentTestStart; + std::vector subcasesStack; + size_t currentSubcaseLevel; + DOCTEST_DECLARE_MUTEX(mutex) + + // caching pointers/references to objects of these types - safe to do + const ContextOptions& opt; + const TestCaseData* tc; + + ConsoleReporter(const ContextOptions& co) + : s(*co.cout) + , opt(co) {} + + ConsoleReporter(const ContextOptions& co, std::ostream& ostr) + : s(ostr) + , opt(co) {} + + // ========================================================================================= + // WHAT FOLLOWS ARE HELPERS USED BY THE OVERRIDES OF THE VIRTUAL METHODS OF THE INTERFACE + // ========================================================================================= + + void separator_to_stream() { + s << Color::Yellow + << "===============================================================================" + "\n"; + } + + const char* getSuccessOrFailString(bool success, assertType::Enum at, + const char* success_str) { + if(success) + return success_str; + return failureString(at); + } + + Color::Enum getSuccessOrFailColor(bool success, assertType::Enum at) { + return success ? Color::BrightGreen : + (at & assertType::is_warn) ? Color::Yellow : Color::Red; + } + + void successOrFailColoredStringToStream(bool success, assertType::Enum at, + const char* success_str = "SUCCESS") { + s << getSuccessOrFailColor(success, at) + << getSuccessOrFailString(success, at, success_str) << ": "; + } + + void log_contexts() { + int num_contexts = get_num_active_contexts(); + if(num_contexts) { + auto contexts = get_active_contexts(); + + s << Color::None << " logged: "; + for(int i = 0; i < num_contexts; ++i) { + s << (i == 0 ? "" : " "); + contexts[i]->stringify(&s); + s << "\n"; + } + } + + s << "\n"; + } + + // this was requested to be made virtual so users could override it + virtual void file_line_to_stream(const char* file, int line, + const char* tail = "") { + s << Color::LightGrey << skipPathFromFilename(file) << (opt.gnu_file_line ? ":" : "(") + << (opt.no_line_numbers ? 0 : line) // 0 or the real num depending on the option + << (opt.gnu_file_line ? ":" : "):") << tail; + } + + void logTestStart() { + if(hasLoggedCurrentTestStart) + return; + + separator_to_stream(); + file_line_to_stream(tc->m_file.c_str(), tc->m_line, "\n"); + if(tc->m_description) + s << Color::Yellow << "DESCRIPTION: " << Color::None << tc->m_description << "\n"; + if(tc->m_test_suite && tc->m_test_suite[0] != '\0') + s << Color::Yellow << "TEST SUITE: " << Color::None << tc->m_test_suite << "\n"; + if(strncmp(tc->m_name, " Scenario:", 11) != 0) + s << Color::Yellow << "TEST CASE: "; + s << Color::None << tc->m_name << "\n"; + + for(size_t i = 0; i < currentSubcaseLevel; ++i) { + if(subcasesStack[i].m_name[0] != '\0') + s << " " << subcasesStack[i].m_name << "\n"; + } + + if(currentSubcaseLevel != subcasesStack.size()) { + s << Color::Yellow << "\nDEEPEST SUBCASE STACK REACHED (DIFFERENT FROM THE CURRENT ONE):\n" << Color::None; + for(size_t i = 0; i < subcasesStack.size(); ++i) { + if(subcasesStack[i].m_name[0] != '\0') + s << " " << subcasesStack[i].m_name << "\n"; + } + } + + s << "\n"; + + hasLoggedCurrentTestStart = true; + } + + void printVersion() { + if(opt.no_version == false) + s << Color::Cyan << "[doctest] " << Color::None << "doctest version is \"" + << DOCTEST_VERSION_STR << "\"\n"; + } + + void printIntro() { + if(opt.no_intro == false) { + printVersion(); + s << Color::Cyan << "[doctest] " << Color::None + << "run with \"--" DOCTEST_OPTIONS_PREFIX_DISPLAY "help\" for options\n"; + } + } + + void printHelp() { + int sizePrefixDisplay = static_cast(strlen(DOCTEST_OPTIONS_PREFIX_DISPLAY)); + printVersion(); + // clang-format off + s << Color::Cyan << "[doctest]\n" << Color::None; + s << Color::Cyan << "[doctest] " << Color::None; + s << "boolean values: \"1/on/yes/true\" or \"0/off/no/false\"\n"; + s << Color::Cyan << "[doctest] " << Color::None; + s << "filter values: \"str1,str2,str3\" (comma separated strings)\n"; + s << Color::Cyan << "[doctest]\n" << Color::None; + s << Color::Cyan << "[doctest] " << Color::None; + s << "filters use wildcards for matching strings\n"; + s << Color::Cyan << "[doctest] " << Color::None; + s << "something passes a filter if any of the strings in a filter matches\n"; +#ifndef DOCTEST_CONFIG_NO_UNPREFIXED_OPTIONS + s << Color::Cyan << "[doctest]\n" << Color::None; + s << Color::Cyan << "[doctest] " << Color::None; + s << "ALL FLAGS, OPTIONS AND FILTERS ALSO AVAILABLE WITH A \"" DOCTEST_CONFIG_OPTIONS_PREFIX "\" PREFIX!!!\n"; +#endif + s << Color::Cyan << "[doctest]\n" << Color::None; + s << Color::Cyan << "[doctest] " << Color::None; + s << "Query flags - the program quits after them. Available:\n\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "?, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "help, -" DOCTEST_OPTIONS_PREFIX_DISPLAY "h " + << Whitespace(sizePrefixDisplay*0) << "prints this message\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "v, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "version " + << Whitespace(sizePrefixDisplay*1) << "prints the version\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "c, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "count " + << Whitespace(sizePrefixDisplay*1) << "prints the number of matching tests\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "ltc, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "list-test-cases " + << Whitespace(sizePrefixDisplay*1) << "lists all matching tests by name\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "lts, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "list-test-suites " + << Whitespace(sizePrefixDisplay*1) << "lists all matching test suites\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "lr, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "list-reporters " + << Whitespace(sizePrefixDisplay*1) << "lists all registered reporters\n\n"; + // ================================================================================== << 79 + s << Color::Cyan << "[doctest] " << Color::None; + s << "The available / options/filters are:\n\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "tc, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "test-case= " + << Whitespace(sizePrefixDisplay*1) << "filters tests by their name\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "tce, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "test-case-exclude= " + << Whitespace(sizePrefixDisplay*1) << "filters OUT tests by their name\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "sf, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "source-file= " + << Whitespace(sizePrefixDisplay*1) << "filters tests by their file\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "sfe, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "source-file-exclude= " + << Whitespace(sizePrefixDisplay*1) << "filters OUT tests by their file\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "ts, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "test-suite= " + << Whitespace(sizePrefixDisplay*1) << "filters tests by their test suite\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "tse, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "test-suite-exclude= " + << Whitespace(sizePrefixDisplay*1) << "filters OUT tests by their test suite\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "sc, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "subcase= " + << Whitespace(sizePrefixDisplay*1) << "filters subcases by their name\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "sce, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "subcase-exclude= " + << Whitespace(sizePrefixDisplay*1) << "filters OUT subcases by their name\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "r, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "reporters= " + << Whitespace(sizePrefixDisplay*1) << "reporters to use (console is default)\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "o, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "out= " + << Whitespace(sizePrefixDisplay*1) << "output filename\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "ob, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "order-by= " + << Whitespace(sizePrefixDisplay*1) << "how the tests should be ordered\n"; + s << Whitespace(sizePrefixDisplay*3) << " - [file/suite/name/rand/none]\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "rs, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "rand-seed= " + << Whitespace(sizePrefixDisplay*1) << "seed for random ordering\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "f, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "first= " + << Whitespace(sizePrefixDisplay*1) << "the first test passing the filters to\n"; + s << Whitespace(sizePrefixDisplay*3) << " execute - for range-based execution\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "l, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "last= " + << Whitespace(sizePrefixDisplay*1) << "the last test passing the filters to\n"; + s << Whitespace(sizePrefixDisplay*3) << " execute - for range-based execution\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "aa, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "abort-after= " + << Whitespace(sizePrefixDisplay*1) << "stop after failed assertions\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "scfl,--" DOCTEST_OPTIONS_PREFIX_DISPLAY "subcase-filter-levels= " + << Whitespace(sizePrefixDisplay*1) << "apply filters for the first levels\n"; + s << Color::Cyan << "\n[doctest] " << Color::None; + s << "Bool options - can be used like flags and true is assumed. Available:\n\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "s, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "success= " + << Whitespace(sizePrefixDisplay*1) << "include successful assertions in output\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "cs, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "case-sensitive= " + << Whitespace(sizePrefixDisplay*1) << "filters being treated as case sensitive\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "e, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "exit= " + << Whitespace(sizePrefixDisplay*1) << "exits after the tests finish\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "d, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "duration= " + << Whitespace(sizePrefixDisplay*1) << "prints the time duration of each test\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "m, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "minimal= " + << Whitespace(sizePrefixDisplay*1) << "minimal console output (only failures)\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "q, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "quiet= " + << Whitespace(sizePrefixDisplay*1) << "no console output\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nt, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-throw= " + << Whitespace(sizePrefixDisplay*1) << "skips exceptions-related assert checks\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "ne, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-exitcode= " + << Whitespace(sizePrefixDisplay*1) << "returns (or exits) always with success\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nr, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-run= " + << Whitespace(sizePrefixDisplay*1) << "skips all runtime doctest operations\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "ni, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-intro= " + << Whitespace(sizePrefixDisplay*1) << "omit the framework intro in the output\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nv, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-version= " + << Whitespace(sizePrefixDisplay*1) << "omit the framework version in the output\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nc, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-colors= " + << Whitespace(sizePrefixDisplay*1) << "disables colors in output\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "fc, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "force-colors= " + << Whitespace(sizePrefixDisplay*1) << "use colors even when not in a tty\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nb, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-breaks= " + << Whitespace(sizePrefixDisplay*1) << "disables breakpoints in debuggers\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "ns, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-skip= " + << Whitespace(sizePrefixDisplay*1) << "don't skip test cases marked as skip\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "gfl, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "gnu-file-line= " + << Whitespace(sizePrefixDisplay*1) << ":n: vs (n): for line numbers in output\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "npf, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-path-filenames= " + << Whitespace(sizePrefixDisplay*1) << "only filenames and no paths in output\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nln, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-line-numbers= " + << Whitespace(sizePrefixDisplay*1) << "0 instead of real line numbers in output\n"; + // ================================================================================== << 79 + // clang-format on + + s << Color::Cyan << "\n[doctest] " << Color::None; + s << "for more information visit the project documentation\n\n"; + } + + void printRegisteredReporters() { + printVersion(); + auto printReporters = [this] (const reporterMap& reporters, const char* type) { + if(reporters.size()) { + s << Color::Cyan << "[doctest] " << Color::None << "listing all registered " << type << "\n"; + for(auto& curr : reporters) + s << "priority: " << std::setw(5) << curr.first.first + << " name: " << curr.first.second << "\n"; + } + }; + printReporters(getListeners(), "listeners"); + printReporters(getReporters(), "reporters"); + } + + // ========================================================================================= + // WHAT FOLLOWS ARE OVERRIDES OF THE VIRTUAL METHODS OF THE REPORTER INTERFACE + // ========================================================================================= + + void report_query(const QueryData& in) override { + if(opt.version) { + printVersion(); + } else if(opt.help) { + printHelp(); + } else if(opt.list_reporters) { + printRegisteredReporters(); + } else if(opt.count || opt.list_test_cases) { + if(opt.list_test_cases) { + s << Color::Cyan << "[doctest] " << Color::None + << "listing all test case names\n"; + separator_to_stream(); + } + + for(unsigned i = 0; i < in.num_data; ++i) + s << Color::None << in.data[i]->m_name << "\n"; + + separator_to_stream(); + + s << Color::Cyan << "[doctest] " << Color::None + << "unskipped test cases passing the current filters: " + << g_cs->numTestCasesPassingFilters << "\n"; + + } else if(opt.list_test_suites) { + s << Color::Cyan << "[doctest] " << Color::None << "listing all test suites\n"; + separator_to_stream(); + + for(unsigned i = 0; i < in.num_data; ++i) + s << Color::None << in.data[i]->m_test_suite << "\n"; + + separator_to_stream(); + + s << Color::Cyan << "[doctest] " << Color::None + << "unskipped test cases passing the current filters: " + << g_cs->numTestCasesPassingFilters << "\n"; + s << Color::Cyan << "[doctest] " << Color::None + << "test suites with unskipped test cases passing the current filters: " + << g_cs->numTestSuitesPassingFilters << "\n"; + } + } + + void test_run_start() override { + if(!opt.minimal) + printIntro(); + } + + void test_run_end(const TestRunStats& p) override { + if(opt.minimal && p.numTestCasesFailed == 0) + return; + + separator_to_stream(); + s << std::dec; + + auto totwidth = int(std::ceil(log10(static_cast(std::max(p.numTestCasesPassingFilters, static_cast(p.numAsserts))) + 1))); + auto passwidth = int(std::ceil(log10(static_cast(std::max(p.numTestCasesPassingFilters - p.numTestCasesFailed, static_cast(p.numAsserts - p.numAssertsFailed))) + 1))); + auto failwidth = int(std::ceil(log10(static_cast(std::max(p.numTestCasesFailed, static_cast(p.numAssertsFailed))) + 1))); + const bool anythingFailed = p.numTestCasesFailed > 0 || p.numAssertsFailed > 0; + s << Color::Cyan << "[doctest] " << Color::None << "test cases: " << std::setw(totwidth) + << p.numTestCasesPassingFilters << " | " + << ((p.numTestCasesPassingFilters == 0 || anythingFailed) ? Color::None : + Color::Green) + << std::setw(passwidth) << p.numTestCasesPassingFilters - p.numTestCasesFailed << " passed" + << Color::None << " | " << (p.numTestCasesFailed > 0 ? Color::Red : Color::None) + << std::setw(failwidth) << p.numTestCasesFailed << " failed" << Color::None << " |"; + if(opt.no_skipped_summary == false) { + const int numSkipped = p.numTestCases - p.numTestCasesPassingFilters; + s << " " << (numSkipped == 0 ? Color::None : Color::Yellow) << numSkipped + << " skipped" << Color::None; + } + s << "\n"; + s << Color::Cyan << "[doctest] " << Color::None << "assertions: " << std::setw(totwidth) + << p.numAsserts << " | " + << ((p.numAsserts == 0 || anythingFailed) ? Color::None : Color::Green) + << std::setw(passwidth) << (p.numAsserts - p.numAssertsFailed) << " passed" << Color::None + << " | " << (p.numAssertsFailed > 0 ? Color::Red : Color::None) << std::setw(failwidth) + << p.numAssertsFailed << " failed" << Color::None << " |\n"; + s << Color::Cyan << "[doctest] " << Color::None + << "Status: " << (p.numTestCasesFailed > 0 ? Color::Red : Color::Green) + << ((p.numTestCasesFailed > 0) ? "FAILURE!" : "SUCCESS!") << Color::None << std::endl; + } + + void test_case_start(const TestCaseData& in) override { + hasLoggedCurrentTestStart = false; + tc = ∈ + subcasesStack.clear(); + currentSubcaseLevel = 0; + } + + void test_case_reenter(const TestCaseData&) override { + subcasesStack.clear(); + } + + void test_case_end(const CurrentTestCaseStats& st) override { + if(tc->m_no_output) + return; + + // log the preamble of the test case only if there is something + // else to print - something other than that an assert has failed + if(opt.duration || + (st.failure_flags && st.failure_flags != static_cast(TestCaseFailureReason::AssertFailure))) + logTestStart(); + + if(opt.duration) + s << Color::None << std::setprecision(6) << std::fixed << st.seconds + << " s: " << tc->m_name << "\n"; + + if(st.failure_flags & TestCaseFailureReason::Timeout) + s << Color::Red << "Test case exceeded time limit of " << std::setprecision(6) + << std::fixed << tc->m_timeout << "!\n"; + + if(st.failure_flags & TestCaseFailureReason::ShouldHaveFailedButDidnt) { + s << Color::Red << "Should have failed but didn't! Marking it as failed!\n"; + } else if(st.failure_flags & TestCaseFailureReason::ShouldHaveFailedAndDid) { + s << Color::Yellow << "Failed as expected so marking it as not failed\n"; + } else if(st.failure_flags & TestCaseFailureReason::CouldHaveFailedAndDid) { + s << Color::Yellow << "Allowed to fail so marking it as not failed\n"; + } else if(st.failure_flags & TestCaseFailureReason::DidntFailExactlyNumTimes) { + s << Color::Red << "Didn't fail exactly " << tc->m_expected_failures + << " times so marking it as failed!\n"; + } else if(st.failure_flags & TestCaseFailureReason::FailedExactlyNumTimes) { + s << Color::Yellow << "Failed exactly " << tc->m_expected_failures + << " times as expected so marking it as not failed!\n"; + } + if(st.failure_flags & TestCaseFailureReason::TooManyFailedAsserts) { + s << Color::Red << "Aborting - too many failed asserts!\n"; + } + s << Color::None; // lgtm [cpp/useless-expression] + } + + void test_case_exception(const TestCaseException& e) override { + DOCTEST_LOCK_MUTEX(mutex) + if(tc->m_no_output) + return; + + logTestStart(); + + file_line_to_stream(tc->m_file.c_str(), tc->m_line, " "); + successOrFailColoredStringToStream(false, e.is_crash ? assertType::is_require : + assertType::is_check); + s << Color::Red << (e.is_crash ? "test case CRASHED: " : "test case THREW exception: ") + << Color::Cyan << e.error_string << "\n"; + + int num_stringified_contexts = get_num_stringified_contexts(); + if(num_stringified_contexts) { + auto stringified_contexts = get_stringified_contexts(); + s << Color::None << " logged: "; + for(int i = num_stringified_contexts; i > 0; --i) { + s << (i == num_stringified_contexts ? "" : " ") + << stringified_contexts[i - 1] << "\n"; + } + } + s << "\n" << Color::None; + } + + void subcase_start(const SubcaseSignature& subc) override { + subcasesStack.push_back(subc); + ++currentSubcaseLevel; + hasLoggedCurrentTestStart = false; + } + + void subcase_end() override { + --currentSubcaseLevel; + hasLoggedCurrentTestStart = false; + } + + void log_assert(const AssertData& rb) override { + if((!rb.m_failed && !opt.success) || tc->m_no_output) + return; + + DOCTEST_LOCK_MUTEX(mutex) + + logTestStart(); + + file_line_to_stream(rb.m_file, rb.m_line, " "); + successOrFailColoredStringToStream(!rb.m_failed, rb.m_at); + + fulltext_log_assert_to_stream(s, rb); + + log_contexts(); + } + + void log_message(const MessageData& mb) override { + if(tc->m_no_output) + return; + + DOCTEST_LOCK_MUTEX(mutex) + + logTestStart(); + + file_line_to_stream(mb.m_file, mb.m_line, " "); + s << getSuccessOrFailColor(false, mb.m_severity) + << getSuccessOrFailString(mb.m_severity & assertType::is_warn, mb.m_severity, + "MESSAGE") << ": "; + s << Color::None << mb.m_string << "\n"; + log_contexts(); + } + + void test_case_skipped(const TestCaseData&) override {} + }; + + DOCTEST_REGISTER_REPORTER("console", 0, ConsoleReporter); + +#ifdef DOCTEST_PLATFORM_WINDOWS + struct DebugOutputWindowReporter : public ConsoleReporter + { + DOCTEST_THREAD_LOCAL static std::ostringstream oss; + + DebugOutputWindowReporter(const ContextOptions& co) + : ConsoleReporter(co, oss) {} + +#define DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(func, type, arg) \ + void func(type arg) override { \ + bool with_col = g_no_colors; \ + g_no_colors = false; \ + ConsoleReporter::func(arg); \ + if(oss.tellp() != std::streampos{}) { \ + DOCTEST_OUTPUT_DEBUG_STRING(oss.str().c_str()); \ + oss.str(""); \ + } \ + g_no_colors = with_col; \ + } + + DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(test_run_start, DOCTEST_EMPTY, DOCTEST_EMPTY) + DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(test_run_end, const TestRunStats&, in) + DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(test_case_start, const TestCaseData&, in) + DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(test_case_reenter, const TestCaseData&, in) + DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(test_case_end, const CurrentTestCaseStats&, in) + DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(test_case_exception, const TestCaseException&, in) + DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(subcase_start, const SubcaseSignature&, in) + DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(subcase_end, DOCTEST_EMPTY, DOCTEST_EMPTY) + DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(log_assert, const AssertData&, in) + DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(log_message, const MessageData&, in) + DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(test_case_skipped, const TestCaseData&, in) + }; + + DOCTEST_THREAD_LOCAL std::ostringstream DebugOutputWindowReporter::oss; +#endif // DOCTEST_PLATFORM_WINDOWS + + // the implementation of parseOption() + bool parseOptionImpl(int argc, const char* const* argv, const char* pattern, String* value) { + // going from the end to the beginning and stopping on the first occurrence from the end + for(int i = argc; i > 0; --i) { + auto index = i - 1; + auto temp = std::strstr(argv[index], pattern); + if(temp && (value || strlen(temp) == strlen(pattern))) { //!OCLINT prefer early exits and continue + // eliminate matches in which the chars before the option are not '-' + bool noBadCharsFound = true; + auto curr = argv[index]; + while(curr != temp) { + if(*curr++ != '-') { + noBadCharsFound = false; + break; + } + } + if(noBadCharsFound && argv[index][0] == '-') { + if(value) { + // parsing the value of an option + temp += strlen(pattern); + const unsigned len = strlen(temp); + if(len) { + *value = temp; + return true; + } + } else { + // just a flag - no value + return true; + } + } + } + } + return false; + } + + // parses an option and returns the string after the '=' character + bool parseOption(int argc, const char* const* argv, const char* pattern, String* value = nullptr, + const String& defaultVal = String()) { + if(value) + *value = defaultVal; +#ifndef DOCTEST_CONFIG_NO_UNPREFIXED_OPTIONS + // offset (normally 3 for "dt-") to skip prefix + if(parseOptionImpl(argc, argv, pattern + strlen(DOCTEST_CONFIG_OPTIONS_PREFIX), value)) + return true; +#endif // DOCTEST_CONFIG_NO_UNPREFIXED_OPTIONS + return parseOptionImpl(argc, argv, pattern, value); + } + + // locates a flag on the command line + bool parseFlag(int argc, const char* const* argv, const char* pattern) { + return parseOption(argc, argv, pattern); + } + + // parses a comma separated list of words after a pattern in one of the arguments in argv + bool parseCommaSepArgs(int argc, const char* const* argv, const char* pattern, + std::vector& res) { + String filtersString; + if(parseOption(argc, argv, pattern, &filtersString)) { + // tokenize with "," as a separator, unless escaped with backslash + std::ostringstream s; + auto flush = [&s, &res]() { + auto string = s.str(); + if(string.size() > 0) { + res.push_back(string.c_str()); + } + s.str(""); + }; + + bool seenBackslash = false; + const char* current = filtersString.c_str(); + const char* end = current + strlen(current); + while(current != end) { + char character = *current++; + if(seenBackslash) { + seenBackslash = false; + if(character == ',' || character == '\\') { + s.put(character); + continue; + } + s.put('\\'); + } + if(character == '\\') { + seenBackslash = true; + } else if(character == ',') { + flush(); + } else { + s.put(character); + } + } + + if(seenBackslash) { + s.put('\\'); + } + flush(); + return true; + } + return false; + } + + enum optionType + { + option_bool, + option_int + }; + + // parses an int/bool option from the command line + bool parseIntOption(int argc, const char* const* argv, const char* pattern, optionType type, + int& res) { + String parsedValue; + if(!parseOption(argc, argv, pattern, &parsedValue)) + return false; + + if(type) { + // integer + // TODO: change this to use std::stoi or something else! currently it uses undefined behavior - assumes '0' on failed parse... + int theInt = std::atoi(parsedValue.c_str()); + if (theInt != 0) { + res = theInt; //!OCLINT parameter reassignment + return true; + } + } else { + // boolean + const char positive[][5] = { "1", "true", "on", "yes" }; // 5 - strlen("true") + 1 + const char negative[][6] = { "0", "false", "off", "no" }; // 6 - strlen("false") + 1 + + // if the value matches any of the positive/negative possibilities + for (unsigned i = 0; i < 4; i++) { + if (parsedValue.compare(positive[i], true) == 0) { + res = 1; //!OCLINT parameter reassignment + return true; + } + if (parsedValue.compare(negative[i], true) == 0) { + res = 0; //!OCLINT parameter reassignment + return true; + } + } + } + return false; + } +} // namespace + +Context::Context(int argc, const char* const* argv) + : p(new detail::ContextState) { + parseArgs(argc, argv, true); + if(argc) + p->binary_name = argv[0]; +} + +Context::~Context() { + if(g_cs == p) + g_cs = nullptr; + delete p; +} + +void Context::applyCommandLine(int argc, const char* const* argv) { + parseArgs(argc, argv); + if(argc) + p->binary_name = argv[0]; +} + +// parses args +void Context::parseArgs(int argc, const char* const* argv, bool withDefaults) { + using namespace detail; + + // clang-format off + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "source-file=", p->filters[0]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "sf=", p->filters[0]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "source-file-exclude=",p->filters[1]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "sfe=", p->filters[1]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "test-suite=", p->filters[2]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "ts=", p->filters[2]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "test-suite-exclude=", p->filters[3]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "tse=", p->filters[3]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "test-case=", p->filters[4]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "tc=", p->filters[4]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "test-case-exclude=", p->filters[5]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "tce=", p->filters[5]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "subcase=", p->filters[6]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "sc=", p->filters[6]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "subcase-exclude=", p->filters[7]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "sce=", p->filters[7]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "reporters=", p->filters[8]); + parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "r=", p->filters[8]); + // clang-format on + + int intRes = 0; + String strRes; + +#define DOCTEST_PARSE_AS_BOOL_OR_FLAG(name, sname, var, default) \ + if(parseIntOption(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX name "=", option_bool, intRes) || \ + parseIntOption(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX sname "=", option_bool, intRes)) \ + p->var = static_cast(intRes); \ + else if(parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX name) || \ + parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX sname)) \ + p->var = true; \ + else if(withDefaults) \ + p->var = default + +#define DOCTEST_PARSE_INT_OPTION(name, sname, var, default) \ + if(parseIntOption(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX name "=", option_int, intRes) || \ + parseIntOption(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX sname "=", option_int, intRes)) \ + p->var = intRes; \ + else if(withDefaults) \ + p->var = default + +#define DOCTEST_PARSE_STR_OPTION(name, sname, var, default) \ + if(parseOption(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX name "=", &strRes, default) || \ + parseOption(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX sname "=", &strRes, default) || \ + withDefaults) \ + p->var = strRes + + // clang-format off + DOCTEST_PARSE_STR_OPTION("out", "o", out, ""); + DOCTEST_PARSE_STR_OPTION("order-by", "ob", order_by, "file"); + DOCTEST_PARSE_INT_OPTION("rand-seed", "rs", rand_seed, 0); + + DOCTEST_PARSE_INT_OPTION("first", "f", first, 0); + DOCTEST_PARSE_INT_OPTION("last", "l", last, UINT_MAX); + + DOCTEST_PARSE_INT_OPTION("abort-after", "aa", abort_after, 0); + DOCTEST_PARSE_INT_OPTION("subcase-filter-levels", "scfl", subcase_filter_levels, INT_MAX); + + DOCTEST_PARSE_AS_BOOL_OR_FLAG("success", "s", success, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("case-sensitive", "cs", case_sensitive, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("exit", "e", exit, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("duration", "d", duration, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("minimal", "m", minimal, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("quiet", "q", quiet, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-throw", "nt", no_throw, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-exitcode", "ne", no_exitcode, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-run", "nr", no_run, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-intro", "ni", no_intro, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-version", "nv", no_version, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-colors", "nc", no_colors, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("force-colors", "fc", force_colors, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-breaks", "nb", no_breaks, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-skip", "ns", no_skip, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("gnu-file-line", "gfl", gnu_file_line, !bool(DOCTEST_MSVC)); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-path-filenames", "npf", no_path_in_filenames, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-line-numbers", "nln", no_line_numbers, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-debug-output", "ndo", no_debug_output, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-skipped-summary", "nss", no_skipped_summary, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-time-in-output", "ntio", no_time_in_output, false); + // clang-format on + + if(withDefaults) { + p->help = false; + p->version = false; + p->count = false; + p->list_test_cases = false; + p->list_test_suites = false; + p->list_reporters = false; + } + if(parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "help") || + parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "h") || + parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "?")) { + p->help = true; + p->exit = true; + } + if(parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "version") || + parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "v")) { + p->version = true; + p->exit = true; + } + if(parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "count") || + parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "c")) { + p->count = true; + p->exit = true; + } + if(parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "list-test-cases") || + parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "ltc")) { + p->list_test_cases = true; + p->exit = true; + } + if(parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "list-test-suites") || + parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "lts")) { + p->list_test_suites = true; + p->exit = true; + } + if(parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "list-reporters") || + parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "lr")) { + p->list_reporters = true; + p->exit = true; + } +} + +// allows the user to add procedurally to the filters from the command line +void Context::addFilter(const char* filter, const char* value) { setOption(filter, value); } + +// allows the user to clear all filters from the command line +void Context::clearFilters() { + for(auto& curr : p->filters) + curr.clear(); +} + +// allows the user to override procedurally the bool options from the command line +void Context::setOption(const char* option, bool value) { + setOption(option, value ? "true" : "false"); +} + +// allows the user to override procedurally the int options from the command line +void Context::setOption(const char* option, int value) { + setOption(option, toString(value).c_str()); +} + +// allows the user to override procedurally the string options from the command line +void Context::setOption(const char* option, const char* value) { + auto argv = String("-") + option + "=" + value; + auto lvalue = argv.c_str(); + parseArgs(1, &lvalue); +} + +// users should query this in their main() and exit the program if true +bool Context::shouldExit() { return p->exit; } + +void Context::setAsDefaultForAssertsOutOfTestCases() { g_cs = p; } + +void Context::setAssertHandler(detail::assert_handler ah) { p->ah = ah; } + +void Context::setCout(std::ostream* out) { p->cout = out; } + +static class DiscardOStream : public std::ostream +{ +private: + class : public std::streambuf + { + private: + // allowing some buffering decreases the amount of calls to overflow + char buf[1024]; + + protected: + std::streamsize xsputn(const char_type*, std::streamsize count) override { return count; } + + int_type overflow(int_type ch) override { + setp(std::begin(buf), std::end(buf)); + return traits_type::not_eof(ch); + } + } discardBuf; + +public: + DiscardOStream() + : std::ostream(&discardBuf) {} +} discardOut; + +// the main function that does all the filtering and test running +int Context::run() { + using namespace detail; + + // save the old context state in case such was setup - for using asserts out of a testing context + auto old_cs = g_cs; + // this is the current contest + g_cs = p; + is_running_in_test = true; + + g_no_colors = p->no_colors; + p->resetRunData(); + + std::fstream fstr; + if(p->cout == nullptr) { + if(p->quiet) { + p->cout = &discardOut; + } else if(p->out.size()) { + // to a file if specified + fstr.open(p->out.c_str(), std::fstream::out); + p->cout = &fstr; + } else { +#ifndef DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM + // stdout by default + p->cout = &std::cout; +#else // DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM + return EXIT_FAILURE; +#endif // DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM + } + } + + FatalConditionHandler::allocateAltStackMem(); + + auto cleanup_and_return = [&]() { + FatalConditionHandler::freeAltStackMem(); + + if(fstr.is_open()) + fstr.close(); + + // restore context + g_cs = old_cs; + is_running_in_test = false; + + // we have to free the reporters which were allocated when the run started + for(auto& curr : p->reporters_currently_used) + delete curr; + p->reporters_currently_used.clear(); + + if(p->numTestCasesFailed && !p->no_exitcode) + return EXIT_FAILURE; + return EXIT_SUCCESS; + }; + + // setup default reporter if none is given through the command line + if(p->filters[8].empty()) + p->filters[8].push_back("console"); + + // check to see if any of the registered reporters has been selected + for(auto& curr : getReporters()) { + if(matchesAny(curr.first.second.c_str(), p->filters[8], false, p->case_sensitive)) + p->reporters_currently_used.push_back(curr.second(*g_cs)); + } + + // TODO: check if there is nothing in reporters_currently_used + + // prepend all listeners + for(auto& curr : getListeners()) + p->reporters_currently_used.insert(p->reporters_currently_used.begin(), curr.second(*g_cs)); + +#ifdef DOCTEST_PLATFORM_WINDOWS + if(isDebuggerActive() && p->no_debug_output == false) + p->reporters_currently_used.push_back(new DebugOutputWindowReporter(*g_cs)); +#endif // DOCTEST_PLATFORM_WINDOWS + + // handle version, help and no_run + if(p->no_run || p->version || p->help || p->list_reporters) { + DOCTEST_ITERATE_THROUGH_REPORTERS(report_query, QueryData()); + + return cleanup_and_return(); + } + + std::vector testArray; + for(auto& curr : getRegisteredTests()) + testArray.push_back(&curr); + p->numTestCases = testArray.size(); + + // sort the collected records + if(!testArray.empty()) { + if(p->order_by.compare("file", true) == 0) { + std::sort(testArray.begin(), testArray.end(), fileOrderComparator); + } else if(p->order_by.compare("suite", true) == 0) { + std::sort(testArray.begin(), testArray.end(), suiteOrderComparator); + } else if(p->order_by.compare("name", true) == 0) { + std::sort(testArray.begin(), testArray.end(), nameOrderComparator); + } else if(p->order_by.compare("rand", true) == 0) { + std::srand(p->rand_seed); + + // random_shuffle implementation + const auto first = &testArray[0]; + for(size_t i = testArray.size() - 1; i > 0; --i) { + int idxToSwap = std::rand() % (i + 1); + + const auto temp = first[i]; + + first[i] = first[idxToSwap]; + first[idxToSwap] = temp; + } + } else if(p->order_by.compare("none", true) == 0) { + // means no sorting - beneficial for death tests which call into the executable + // with a specific test case in mind - we don't want to slow down the startup times + } + } + + std::set testSuitesPassingFilt; + + bool query_mode = p->count || p->list_test_cases || p->list_test_suites; + std::vector queryResults; + + if(!query_mode) + DOCTEST_ITERATE_THROUGH_REPORTERS(test_run_start, DOCTEST_EMPTY); + + // invoke the registered functions if they match the filter criteria (or just count them) + for(auto& curr : testArray) { + const auto& tc = *curr; + + bool skip_me = false; + if(tc.m_skip && !p->no_skip) + skip_me = true; + + if(!matchesAny(tc.m_file.c_str(), p->filters[0], true, p->case_sensitive)) + skip_me = true; + if(matchesAny(tc.m_file.c_str(), p->filters[1], false, p->case_sensitive)) + skip_me = true; + if(!matchesAny(tc.m_test_suite, p->filters[2], true, p->case_sensitive)) + skip_me = true; + if(matchesAny(tc.m_test_suite, p->filters[3], false, p->case_sensitive)) + skip_me = true; + if(!matchesAny(tc.m_name, p->filters[4], true, p->case_sensitive)) + skip_me = true; + if(matchesAny(tc.m_name, p->filters[5], false, p->case_sensitive)) + skip_me = true; + + if(!skip_me) + p->numTestCasesPassingFilters++; + + // skip the test if it is not in the execution range + if((p->last < p->numTestCasesPassingFilters && p->first <= p->last) || + (p->first > p->numTestCasesPassingFilters)) + skip_me = true; + + if(skip_me) { + if(!query_mode) + DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_skipped, tc); + continue; + } + + // do not execute the test if we are to only count the number of filter passing tests + if(p->count) + continue; + + // print the name of the test and don't execute it + if(p->list_test_cases) { + queryResults.push_back(&tc); + continue; + } + + // print the name of the test suite if not done already and don't execute it + if(p->list_test_suites) { + if((testSuitesPassingFilt.count(tc.m_test_suite) == 0) && tc.m_test_suite[0] != '\0') { + queryResults.push_back(&tc); + testSuitesPassingFilt.insert(tc.m_test_suite); + p->numTestSuitesPassingFilters++; + } + continue; + } + + // execute the test if it passes all the filtering + { + p->currentTest = &tc; + + p->failure_flags = TestCaseFailureReason::None; + p->seconds = 0; + + // reset atomic counters + p->numAssertsFailedCurrentTest_atomic = 0; + p->numAssertsCurrentTest_atomic = 0; + + p->fullyTraversedSubcases.clear(); + + DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_start, tc); + + p->timer.start(); + + bool run_test = true; + + do { + // reset some of the fields for subcases (except for the set of fully passed ones) + p->reachedLeaf = false; + // May not be empty if previous subcase exited via exception. + p->subcaseStack.clear(); + p->currentSubcaseDepth = 0; + + p->shouldLogCurrentException = true; + + // reset stuff for logging with INFO() + p->stringifiedContexts.clear(); + +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS + try { +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS +// MSVC 2015 diagnoses fatalConditionHandler as unused (because reset() is a static method) +DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4101) // unreferenced local variable + FatalConditionHandler fatalConditionHandler; // Handle signals + // execute the test + tc.m_test(); + fatalConditionHandler.reset(); +DOCTEST_MSVC_SUPPRESS_WARNING_POP +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS + } catch(const TestFailureException&) { + p->failure_flags |= TestCaseFailureReason::AssertFailure; + } catch(...) { + DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_exception, + {translateActiveException(), false}); + p->failure_flags |= TestCaseFailureReason::Exception; + } +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS + + // exit this loop if enough assertions have failed - even if there are more subcases + if(p->abort_after > 0 && + p->numAssertsFailed + p->numAssertsFailedCurrentTest_atomic >= p->abort_after) { + run_test = false; + p->failure_flags |= TestCaseFailureReason::TooManyFailedAsserts; + } + + if(!p->nextSubcaseStack.empty() && run_test) + DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_reenter, tc); + if(p->nextSubcaseStack.empty()) + run_test = false; + } while(run_test); + + p->finalizeTestCaseData(); + + DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_end, *g_cs); + + p->currentTest = nullptr; + + // stop executing tests if enough assertions have failed + if(p->abort_after > 0 && p->numAssertsFailed >= p->abort_after) + break; + } + } + + if(!query_mode) { + DOCTEST_ITERATE_THROUGH_REPORTERS(test_run_end, *g_cs); + } else { + QueryData qdata; + qdata.run_stats = g_cs; + qdata.data = queryResults.data(); + qdata.num_data = unsigned(queryResults.size()); + DOCTEST_ITERATE_THROUGH_REPORTERS(report_query, qdata); + } + + return cleanup_and_return(); +} + +DOCTEST_DEFINE_INTERFACE(IReporter) + +int IReporter::get_num_active_contexts() { return detail::g_infoContexts.size(); } +const IContextScope* const* IReporter::get_active_contexts() { + return get_num_active_contexts() ? &detail::g_infoContexts[0] : nullptr; +} + +int IReporter::get_num_stringified_contexts() { return detail::g_cs->stringifiedContexts.size(); } +const String* IReporter::get_stringified_contexts() { + return get_num_stringified_contexts() ? &detail::g_cs->stringifiedContexts[0] : nullptr; +} + +namespace detail { + void registerReporterImpl(const char* name, int priority, reporterCreatorFunc c, bool isReporter) { + if(isReporter) + getReporters().insert(reporterMap::value_type(reporterMap::key_type(priority, name), c)); + else + getListeners().insert(reporterMap::value_type(reporterMap::key_type(priority, name), c)); + } +} // namespace detail + +} // namespace doctest + +#endif // DOCTEST_CONFIG_DISABLE + +#ifdef DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN +DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4007) // 'function' : must be 'attribute' - see issue #182 +int main(int argc, char** argv) { return doctest::Context(argc, argv).run(); } +DOCTEST_MSVC_SUPPRESS_WARNING_POP +#endif // DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN + +DOCTEST_CLANG_SUPPRESS_WARNING_POP +DOCTEST_MSVC_SUPPRESS_WARNING_POP +DOCTEST_GCC_SUPPRESS_WARNING_POP + +DOCTEST_SUPPRESS_COMMON_WARNINGS_POP + +#endif // DOCTEST_LIBRARY_IMPLEMENTATION +#endif // DOCTEST_CONFIG_IMPLEMENT + +#ifdef DOCTEST_UNDEF_WIN32_LEAN_AND_MEAN +#undef WIN32_LEAN_AND_MEAN +#undef DOCTEST_UNDEF_WIN32_LEAN_AND_MEAN +#endif // DOCTEST_UNDEF_WIN32_LEAN_AND_MEAN + +#ifdef DOCTEST_UNDEF_NOMINMAX +#undef NOMINMAX +#undef DOCTEST_UNDEF_NOMINMAX +#endif // DOCTEST_UNDEF_NOMINMAX diff --git a/unit_tests/test_c_interface.cpp b/unit_tests/test_c_interface.cpp index 23cf6b7..6c9691b 100644 --- a/unit_tests/test_c_interface.cpp +++ b/unit_tests/test_c_interface.cpp @@ -73,7 +73,7 @@ TEST_CASE( "TestCWrapperOpenFile" ) "../../../unit_tests/test_data" }; - const std::string rel_file_name = "spectra/drf_cal_HPGe_Am241.pcf"; + const std::string rel_file_name = "spectra/Example1.pcf"; for( const std::string dir : potential_input_paths ) { diff --git a/unit_tests/test_data/spectra/Example1.pcf b/unit_tests/test_data/spectra/Example1.pcf new file mode 100755 index 0000000..65a2685 Binary files /dev/null and b/unit_tests/test_data/spectra/Example1.pcf differ diff --git a/unit_tests/test_iso_time_string.cpp b/unit_tests/test_iso_time_string.cpp index 5e42abc..b09a218 100644 --- a/unit_tests/test_iso_time_string.cpp +++ b/unit_tests/test_iso_time_string.cpp @@ -528,8 +528,15 @@ TEST_CASE( "isoString" ) CHECK_EQ( SpecUtils::to_vax_string( SpecUtils::time_from_string("20140101T14:12:01.623") ), "01-Jan-2014 14:12:01.62" ); CHECK_EQ( SpecUtils::to_vax_string( SpecUtils::time_from_string("20140101T14:12:01.626") ), "01-Jan-2014 14:12:01.63" ); CHECK_EQ( SpecUtils::to_vax_string( SpecUtils::time_from_string("20140101T00:00:00") ), "01-Jan-2014 00:00:00.00" ); + // Check when we need to round the tenth of the second, because the hundreth of a second rounds to 100 + CHECK_EQ( SpecUtils::to_vax_string( SpecUtils::time_from_string("2014-Sep-19 14:12:01.999999") ), "19-Sep-2014 14:12:02.00" ); + CHECK_EQ( SpecUtils::to_vax_string( SpecUtils::time_from_string("2014-Sep-19 14:12:01.994") ), "19-Sep-2014 14:12:01.99" ); + CHECK_EQ( SpecUtils::to_vax_string( SpecUtils::time_from_string("2014-Sep-19 14:12:01.995") ), "19-Sep-2014 14:12:02.00" ); + CHECK_EQ( SpecUtils::to_vax_string( SpecUtils::time_from_string("2014-Sep-19 23:59:59.995") ), "20-Sep-2014 00:00:00.00" ); + CHECK_EQ( SpecUtils::to_vax_string( SpecUtils::time_from_string("2014-Sep-19 23:59:59.994") ), "19-Sep-2014 23:59:59.99" ); + CHECK_EQ( SpecUtils::to_vax_string( SpecUtils::time_from_string("2014-Sep-19 11:59:59.995") ), "19-Sep-2014 12:00:00.00" ); + CHECK_EQ( SpecUtils::to_vax_string( SpecUtils::time_from_string("2014-Sep-19 11:59:59.994") ), "19-Sep-2014 11:59:59.99" ); - /** Converts the input to string in format d-mmm-YYYY HH:MM:SS AM, where mmm is 3 char month name; d is day number with no leading zeros. Returns "not-a-date-time" if input is not valid. diff --git a/unit_tests/test_spec_file.cpp b/unit_tests/test_spec_file.cpp new file mode 100644 index 0000000..65771a9 --- /dev/null +++ b/unit_tests/test_spec_file.cpp @@ -0,0 +1,334 @@ +#include +#include +#include +#include +#include + +#include "SpecUtils/DateTime.h" +#include "SpecUtils/SpecFile.h" +#include "SpecUtils/ParseUtils.h" +#include "SpecUtils/EnergyCalibration.h" + +namespace fs = std::filesystem; + +#undef isnan // Undefine the isnan macro (compile failure in doctest.h on Windows) + +#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN +#include "doctest.h" + +void CheckFileExistanceAndDelete(fs::path filePath) +{ + // Check if the file exists + if (fs::exists(filePath)) + { + std::cout << "File exists. Deleting the file..." << std::endl; + // Delete the file + if (fs::remove(filePath)) + { + std::cout << "File deleted successfully." << std::endl; + } + } +} +using SpecUtils::FloatVec; +using SpecUtils::FloatVecPtr; +using SpecUtils::time_point_t; + +time_point_t getStartTime() +{ + const auto now_sys = std::chrono::system_clock::now(); + const auto now = std::chrono::time_point_cast(now_sys); + return now; +} + +void getGammaSpectrum(FloatVec &spectrum) +{ + for (size_t i = 0; i < 128; i++) + { + spectrum.push_back(i * 1.0F); + } +} + +std::string getDetectorName(int panel, int column, int mca, bool isNeutron = false) +{ + // Validate input parameters + if (panel < 1 || column < 1 || mca < 1) + { + throw std::invalid_argument("Panel, column, and MCA numbers must be greater than 0."); + } + + // Convert panel, column, and MCA to the appropriate characters + char panelChar = 'A' + (panel - 1); // 'A' for panel 1, 'B' for panel 2, etc. + char columnChar = 'a' + (column - 1); // 'a' for column 1, 'b' for column 2, etc. + char mcaChar = '1' + (mca - 1); // '1' for MCA 1, '2' for MCA 2, etc. + + // Construct the detector name + std::string detectorName; + detectorName += panelChar; + detectorName += columnChar; + detectorName += mcaChar; + + // Append 'N' if it's a neutron detector + if (isNeutron) + { + detectorName += 'N'; + } + + return detectorName; +} + +std::array generateDetectorNames() +{ + std::array detectorNames; + + // Random number generation setup + static std::random_device rd; // Obtain a random number from hardware + static std::mt19937 eng(rd()); // Seed the generator + std::uniform_int_distribution<> panelDist(1, 4); // Panel numbers from 1 to 5 + std::uniform_int_distribution<> columnDist(1, 4); // Column numbers from 1 to 5 + std::uniform_int_distribution<> mcaDist(1, 8); // MCA numbers from 1 to 3 + std::uniform_int_distribution<> neutronDist(0, 1); // Randomly decide if it's a neutron detector + + // Generate 10 random detector names + for (int i = 0; i < 10; ++i) + { + int panel = panelDist(eng); + int column = columnDist(eng); + int mca = mcaDist(eng); + // bool isNeutron = neutronDist(eng) == 1; // 50% chance of being a neutron detector + bool isNeutron = false; // 50% chance of being a neutron detector + + detectorNames[i] = getDetectorName(panel, column, mca, isNeutron); + } + + std::sort(detectorNames.begin(), detectorNames.end()); + + return detectorNames; +} + +std::shared_ptr makeMeasurement(int id, std::string detName, char tag) +{ + auto m = std::make_shared(); + + // auto detName = "Aa" + std::to_string(id); + //m->set_detector_name(detName); + + m->set_pcf_tag(tag); + + m->set_start_time(getStartTime()); + + auto title = "Test Measurement " + std::to_string(id) + " Det=" + detName; + + //auto title = "Test Measurement " + std::to_string(id); + m->set_title(title); + + m->update_detector_name_from_title(); + + auto descr = "test_descr " + std::to_string(id); + m->set_measurement_description(descr); + + auto source = "source " + std::to_string(id); + m->set_source_description(source); + + SpecUtils::FloatVec ncounts{id + 99.0F}; + m->set_neutron_counts(ncounts, 0.0F); + m->set_live_time(id + 10.55F); + m->set_real_time(id + 11.66F); + + SpecUtils::FloatVec spectrum; + getGammaSpectrum(spectrum); + + m->set_gamma_counts(spectrum); + + auto ecal = std::make_shared(); + // auto coeffs = std::vector{4.41F, 3198.33F, 1.0F, 2.0F, 1.5f}; + const auto coeffs = std::vector{id * 2.0F, id * 500.0F, id * 20.0F, id * 30.0F, id * 3.0F}; + + auto devPairs = SpecUtils::DeviationPairs(); + for (size_t i = 0; i < 20; i++) + { + auto devPair = std::make_pair(id + i + 10.0f, id + i * -1.0F); + devPairs.push_back(devPair); + } + + ecal->set_full_range_fraction(spectrum.size(), coeffs, devPairs); + m->set_energy_calibration(ecal); + + return m; +} + +TEST_CASE("Round Trip") +{ + auto fname = std::string("round-trip-cpp.pcf"); + auto n42Fname = fname + ".n42"; + + SUBCASE("Write PCF File") + { + SpecUtils::SpecFile specfile; + CheckFileExistanceAndDelete(fname); + CheckFileExistanceAndDelete(n42Fname); + + // auto detNames = generateDetectorNames(); + + // Note that using "Bc3" as a detector name causes the PCF file to use "compressed" deviation + // pairs (i.e., int16_t values for both energy and offset, instead of floats), because the + // "c" indicates third column. + std::vector detNames = {"Ba1", "Aa2", "Bc3", "Cb4"}; + // std::vector detNames = { "Ba1", "Aa2", "Bb3", "Cb4" }; + + auto tags = std::vector{'T', 'K', '-', '<'}; + auto numMeasurements = detNames.size(); + + for (size_t i = 0; i < numMeasurements; i++) + { + auto detName = detNames[i]; + auto tag = tags[i]; + auto m = makeMeasurement(static_cast(i) + 1, detName, tag); + specfile.add_measurement(m); + } + + { + auto &m = *(specfile.measurement(size_t(0))); + + CHECK(m.rpm_panel_number() == 2 - 1); + CHECK(m.rpm_column_number() == 1 - 1); + CHECK(m.rpm_mca_number() == 1 - 1); + } + + { + auto &m = *(specfile.measurement(size_t(2))); + + CHECK(m.rpm_panel_number() == 2 - 1); + CHECK(m.rpm_column_number() == 3 - 1); + CHECK(m.rpm_mca_number() == 3 - 1); + } + specfile.write_to_file(fname, SpecUtils::SaveSpectrumAsType::Pcf); + specfile.write_to_file(n42Fname, SpecUtils::SaveSpectrumAsType::N42_2012); + + SUBCASE("Read PCF File") + { + SpecUtils::SpecFile specfileToRead; + const bool success_reading = specfileToRead.load_file(fname, SpecUtils::ParserType::Pcf); + REQUIRE(success_reading); + + for (size_t i = 0; i < numMeasurements; i++) + { + auto &expectedM = *(specfile.measurement(i)); + auto &actualM = *(specfileToRead.measurement(i)); + CHECK(expectedM.title() == actualM.title()); + CHECK(actualM.pcf_tag() != '\0'); + CHECK(expectedM.pcf_tag() == actualM.pcf_tag()); + + CHECK_FALSE(actualM.detector_name().empty()); + CHECK(actualM.detector_name() == expectedM.detector_name()); + + // I don't think this is the same as MCA + //CHECK(actualM.detector_number() == expectedM.detector_number()); + + CHECK(actualM.rpm_panel_number() >= 0 ); + CHECK(actualM.rpm_panel_number() == expectedM.rpm_panel_number() ); + + CHECK(actualM.rpm_column_number() >= 0 ); + CHECK(actualM.rpm_column_number() == expectedM.rpm_column_number() ); + + CHECK(actualM.rpm_mca_number() >= 0); + CHECK(actualM.rpm_mca_number() == expectedM.rpm_mca_number() ); + + // times for PCFs should be compared as vax strings. + auto timeStr1 = SpecUtils::to_vax_string(expectedM.start_time()); + auto timeStr2 = SpecUtils::to_vax_string(actualM.start_time()); + CHECK(timeStr1 == timeStr2); + + auto &expSpectrum = *expectedM.gamma_counts(); + auto &actualSpectrum = *expectedM.gamma_counts(); + auto sum = std::accumulate(actualSpectrum.begin(), actualSpectrum.end(), 0.0); + CHECK(sum > 0); + CHECK(expSpectrum == actualSpectrum); + + CHECK(actualM.live_time() > 0.0F); + CHECK(actualM.live_time() == expectedM.live_time()); + + CHECK(actualM.real_time() > 0.0F); + CHECK(actualM.real_time() == expectedM.real_time()); + + CHECK(actualM.neutron_counts().at(0) > 0); + CHECK(actualM.neutron_counts() == expectedM.neutron_counts()); + + CHECK_FALSE(actualM.measurement_description().empty()); + CHECK(actualM.measurement_description() == expectedM.measurement_description()); + + CHECK_FALSE(actualM.source_description().empty()); + CHECK(actualM.source_description() == expectedM.source_description()); + + auto newEcal = *actualM.energy_calibration(); + CHECK(newEcal.coefficients() == expectedM.energy_calibration()->coefficients()); + + CHECK_MESSAGE(expectedM.deviation_pairs() == actualM.deviation_pairs(), "devpair assert failed at: ", actualM.detector_name()); + } + } + + SUBCASE("Writing over existing file fails") + { + CHECK_THROWS(specfile.write_to_file(fname, SpecUtils::SaveSpectrumAsType::Pcf)); + } + } +} + +int generateRandomNumber(int min = 64, int max = 1024) +{ + // Create a random device and seed the random number generator + std::random_device rd; + std::mt19937 gen(rd()); + + // Define the range + std::uniform_int_distribution<> dis(min, max); + + // Generate and return the random number + return dis(gen); +} + +TEST_CASE("Get Max Channel Count") +{ + SpecUtils::SpecFile specfile; + auto numMesurments = 20; + int max_channel_count = 0; // Initialize max_channel_count + + for (size_t i = 0; i < numMesurments; i++) + { + auto m = std::make_shared(); + auto numChannels = generateRandomNumber(); + + // Update max_channel_count + max_channel_count = std::max(max_channel_count, numChannels); + + FloatVec spectrum; + for (size_t i = 0; i < numChannels; i++) + { + spectrum.push_back(i * 1.0F); + } + + m->set_gamma_counts(spectrum); + specfile.add_measurement(m); + } + + CHECK(max_channel_count > 0); +} + +TEST_CASE("Find Source String") +{ + SpecUtils::Measurement m; + m.set_source_description("TestSource"); + m.set_measurement_description("TestDescription"); + + auto expected = std::string("TestSource"); + auto actual = m.source_description(); + + CHECK(actual == expected); + SUBCASE("Find Description String") + { + + auto expected = std::string("TestDescription"); + auto actual = m.measurement_description(); + + CHECK(actual == expected); + } +}