Program Listing for File wrapUmpire.cpp¶
↰ Return to documentation for file (umpire/interface/c_fortran/wrapUmpire.cpp
)
// wrapUmpire.cpp
// This file is generated by Shroud 0.12.1. Do not edit.
// Copyright (c) 2016-20, Lawrence Livermore National Security, LLC and Umpire
// project contributors. See the COPYRIGHT file for details.
//
// SPDX-License-Identifier: (MIT)
#include "wrapUmpire.h"
#include <cstddef>
#include <cstdlib>
#include <cstring>
#include <string>
#include "typesUmpire.h"
#include "umpire/Umpire.hpp"
#include "umpire/Allocator.hpp"
// splicer begin CXX_definitions
// splicer end CXX_definitions
extern "C" {
// helper ShroudStrToArray
// Save str metadata into array to allow Fortran to access values.
// CHARACTER(len=elem_size) src
static void ShroudStrToArray(umpire_SHROUD_array *array, const std::string * src, int idtor)
{
array->cxx.addr = const_cast<std::string *>(src);
array->cxx.idtor = idtor;
if (src->empty()) {
array->addr.ccharp = NULL;
array->elem_len = 0;
} else {
array->addr.ccharp = src->data();
array->elem_len = src->length();
}
array->size = 1;
array->rank = 0; // scalar
}
// splicer begin C_definitions
// splicer end C_definitions
bool umpire_pointer_overlaps(void * left, void * right)
{
// splicer begin function.pointer_overlaps
bool SHC_rv = umpire::pointer_overlaps(left, right);
return SHC_rv;
// splicer end function.pointer_overlaps
}
bool umpire_pointer_contains(void * left, void * right)
{
// splicer begin function.pointer_contains
bool SHC_rv = umpire::pointer_contains(left, right);
return SHC_rv;
// splicer end function.pointer_contains
}
void umpire_get_backtrace_bufferify(void * ptr,
umpire_SHROUD_array *DSHF_rv)
{
// splicer begin function.get_backtrace_bufferify
std::string * SHCXX_rv = new std::string;
*SHCXX_rv = umpire::get_backtrace(ptr);
ShroudStrToArray(DSHF_rv, SHCXX_rv, 2);
// splicer end function.get_backtrace_bufferify
}
size_t umpire_get_process_memory_usage(void)
{
// splicer begin function.get_process_memory_usage
size_t SHC_rv = umpire::get_process_memory_usage();
return SHC_rv;
// splicer end function.get_process_memory_usage
}
size_t umpire_get_device_memory_usage(int device_id)
{
// splicer begin function.get_device_memory_usage
size_t SHC_rv = umpire::get_device_memory_usage(device_id);
return SHC_rv;
// splicer end function.get_device_memory_usage
}
// Release library allocated memory.
void umpire_SHROUD_memory_destructor(umpire_SHROUD_capsule_data *cap)
{
void *ptr = cap->addr;
switch (cap->idtor) {
case 0: // --none--
{
// Nothing to delete
break;
}
case 1: // umpire::Allocator
{
umpire::Allocator *cxx_ptr =
reinterpret_cast<umpire::Allocator *>(ptr);
delete cxx_ptr;
break;
}
case 2: // new_string
{
std::string *cxx_ptr = reinterpret_cast<std::string *>(ptr);
delete cxx_ptr;
break;
}
default:
{
// Unexpected case in destructor
break;
}
}
cap->addr = nullptr;
cap->idtor = 0; // avoid deleting again
}
} // extern "C"