diff --git a/.github/actions/shroud/entrypoint.sh b/.github/actions/shroud/entrypoint.sh
index 7fd949634..37ae2a6d1 100755
--- a/.github/actions/shroud/entrypoint.sh
+++ b/.github/actions/shroud/entrypoint.sh
@@ -1,5 +1,7 @@
#!/bin/bash
+set -euo pipefail
+
git config --global --add safe.directory /github/workspace
git config --global --add safe.directory /github/workspace/.radiuss-ci
git config --global --add safe.directory /github/workspace/blt
@@ -13,4 +15,3 @@ git submodule update --init --recursive
mkdir build && cd build
cmake -DCMAKE_CXX_COMPILER=clang++ -DSHROUD_EXECUTABLE=/usr/local/bin/shroud ..
make -j 3 generate_umpire_shroud
-
diff --git a/.github/workflows/generate-shroud.yml b/.github/workflows/generate-shroud.yml
index 5bd94aa6a..db0c45868 100644
--- a/.github/workflows/generate-shroud.yml
+++ b/.github/workflows/generate-shroud.yml
@@ -1,8 +1,10 @@
-on:
+on:
+ workflow_dispatch:
pull_request:
paths:
- '**umpire_shroud.yaml'
- '**genfumpiresplicer.f'
+ - '**gencumpiresplicer.inc'
name: Generate C/FORTRAN Interface
jobs:
diff --git a/docs/sphinx/tutorial/fortran/allocators.rst b/docs/sphinx/tutorial/fortran/allocators.rst
index c358ce63e..34264e3b1 100644
--- a/docs/sphinx/tutorial/fortran/allocators.rst
+++ b/docs/sphinx/tutorial/fortran/allocators.rst
@@ -3,14 +3,14 @@
=======================
FORTRAN API: Allocators
=======================
-
+
The fundamental concept for accessing memory through Umpire is an
:class:`umpire:Allocator`. In FORTRAN, this means using the type
``UmpireAllocator``. This type provides an ``allocate_pointer`` function to
allocate raw memory, and a generic ``allocate`` procedure that takes an array
pointer and an array of dimensions and will allocate the correct amount of
memory.
-
+
As with the native C++ interface, all allocators are accessed via the
:class:`umpire::ResourceManager`. In the FORTRAN API, there is a corresponding
``UmpireResourceManager`` type. To get an ``UmpireAllocator``:
@@ -31,3 +31,7 @@ deallocate memory:
In this case, we allocate a one-dimensional array using the generic
``allocate`` function.
+
+.. note::
+
+ Umpire's FORTRAN interface is generated with the help of `Shroud `_.
diff --git a/src/umpire/interface/c_fortran/gencumpiresplicer.inc b/src/umpire/interface/c_fortran/gencumpiresplicer.inc
new file mode 100644
index 000000000..ef07512ca
--- /dev/null
+++ b/src/umpire/interface/c_fortran/gencumpiresplicer.inc
@@ -0,0 +1,101 @@
+//////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2016-26, Lawrence Livermore National Security, LLC and Umpire
+// project contributors. See the COPYRIGHT file for details.
+//
+// SPDX-License-Identifier: (MIT)
+//////////////////////////////////////////////////////////////////////////////
+//
+// Shroud splicer overrides for C wrappers.
+//
+// These bufferify wrappers correspond to explicit non-type template
+// instantiations such as makeAllocator(...). Shroud emits
+// invalid member calls for these overloads in the generated bufferify helpers,
+// so provide the exact wrapper bodies here.
+
+// splicer begin class.ResourceManager.method.make_allocator_list_pool_untracked_bufferify
+const std::string SHCXX_name(name, Lname);
+umpire::Allocator * SHCXX_allocator =
+ static_cast(allocator.addr);
+umpire::Allocator * SHCXX_rv = new umpire::Allocator;
+*SHCXX_rv = SH_this->makeAllocator(
+ SHCXX_name, *SHCXX_allocator, initial_size, block);
+SHC_rv->addr = SHCXX_rv;
+SHC_rv->idtor = 1;
+return SHC_rv;
+// splicer end class.ResourceManager.method.make_allocator_list_pool_untracked_bufferify
+
+// splicer begin class.ResourceManager.method.make_allocator_quick_pool_untracked_bufferify
+const std::string SHCXX_name(name, Lname);
+umpire::Allocator * SHCXX_allocator =
+ static_cast(allocator.addr);
+umpire::Allocator * SHCXX_rv = new umpire::Allocator;
+*SHCXX_rv = SH_this->makeAllocator(
+ SHCXX_name, *SHCXX_allocator, initial_size, block);
+SHC_rv->addr = SHCXX_rv;
+SHC_rv->idtor = 1;
+return SHC_rv;
+// splicer end class.ResourceManager.method.make_allocator_quick_pool_untracked_bufferify
+
+// splicer begin class.ResourceManager.method.make_allocator_resource_aware_pool_untracked_bufferify
+const std::string SHCXX_name(name, Lname);
+umpire::Allocator * SHCXX_allocator =
+ static_cast(allocator.addr);
+umpire::Allocator * SHCXX_rv = new umpire::Allocator;
+*SHCXX_rv = SH_this->makeAllocator(
+ SHCXX_name, *SHCXX_allocator, initial_size, block);
+SHC_rv->addr = SHCXX_rv;
+SHC_rv->idtor = 1;
+return SHC_rv;
+// splicer end class.ResourceManager.method.make_allocator_resource_aware_pool_untracked_bufferify
+
+// splicer begin class.ResourceManager.method.make_allocator_fixed_pool_untracked_bufferify
+const std::string SHCXX_name(name, Lname);
+umpire::Allocator * SHCXX_allocator =
+ static_cast(allocator.addr);
+umpire::Allocator * SHCXX_rv = new umpire::Allocator;
+*SHCXX_rv = SH_this->makeAllocator(
+ SHCXX_name, *SHCXX_allocator, object_size);
+SHC_rv->addr = SHCXX_rv;
+SHC_rv->idtor = 1;
+return SHC_rv;
+// splicer end class.ResourceManager.method.make_allocator_fixed_pool_untracked_bufferify
+
+// splicer begin class.ResourceManager.method.make_allocator_monotonic_untracked_bufferify
+const std::string SHCXX_name(name, Lname);
+umpire::Allocator * SHCXX_allocator =
+ static_cast(allocator.addr);
+umpire::Allocator * SHCXX_rv = new umpire::Allocator;
+*SHCXX_rv =
+ SH_this->makeAllocator(
+ SHCXX_name, *SHCXX_allocator, object_size);
+SHC_rv->addr = SHCXX_rv;
+SHC_rv->idtor = 1;
+return SHC_rv;
+// splicer end class.ResourceManager.method.make_allocator_monotonic_untracked_bufferify
+
+// splicer begin class.ResourceManager.method.make_allocator_slot_pool_untracked_bufferify
+const std::string SHCXX_name(name, Lname);
+umpire::Allocator * SHCXX_allocator =
+ static_cast(allocator.addr);
+umpire::Allocator * SHCXX_rv = new umpire::Allocator;
+*SHCXX_rv = SH_this->makeAllocator(
+ SHCXX_name, *SHCXX_allocator, object_size);
+SHC_rv->addr = SHCXX_rv;
+SHC_rv->idtor = 1;
+return SHC_rv;
+// splicer end class.ResourceManager.method.make_allocator_slot_pool_untracked_bufferify
+
+// splicer begin class.ResourceManager.method.make_allocator_mixed_pool_untracked_bufferify
+const std::string SHCXX_name(name, Lname);
+umpire::Allocator * SHCXX_allocator =
+ static_cast(allocator.addr);
+umpire::Allocator * SHCXX_rv = new umpire::Allocator;
+*SHCXX_rv = SH_this->makeAllocator(
+ SHCXX_name, *SHCXX_allocator, smallest_fixed_obj_size,
+ largest_fixed_obj_size, max_initial_fixed_pool_size,
+ fixed_size_multiplier, quick_pool_initial_alloc_size,
+ quick_pool_min_alloc_size, quick_pool_align_bytes);
+SHC_rv->addr = SHCXX_rv;
+SHC_rv->idtor = 1;
+return SHC_rv;
+// splicer end class.ResourceManager.method.make_allocator_mixed_pool_untracked_bufferify
diff --git a/src/umpire/interface/c_fortran/wrapResourceManager.cpp b/src/umpire/interface/c_fortran/wrapResourceManager.cpp
index 9b8f1254d..7ac5ef287 100644
--- a/src/umpire/interface/c_fortran/wrapResourceManager.cpp
+++ b/src/umpire/interface/c_fortran/wrapResourceManager.cpp
@@ -675,6 +675,299 @@ umpire_allocator * umpire_resourcemanager_make_allocator_bufferify_prefetcher(
// splicer end class.ResourceManager.method.make_allocator_bufferify_prefetcher
}
+umpire_allocator * umpire_resourcemanager_make_allocator_list_pool_untracked(
+ umpire_resourcemanager * self, const char * name,
+ umpire_allocator allocator, size_t initial_size, size_t block,
+ umpire_allocator * SHC_rv)
+{
+ umpire::ResourceManager *SH_this =
+ static_cast(self->addr);
+ // splicer begin class.ResourceManager.method.make_allocator_list_pool_untracked
+ const std::string SHC_name_cxx(name);
+ umpire::Allocator *SHC_allocator_cxx =
+ static_cast(allocator.addr);
+ umpire::Allocator *SHC_rv_cxx = new umpire::Allocator;
+ *SHC_rv_cxx = SH_this->makeAllocator(
+ SHC_name_cxx, *SHC_allocator_cxx, initial_size, block);
+ SHC_rv->addr = SHC_rv_cxx;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+ // splicer end class.ResourceManager.method.make_allocator_list_pool_untracked
+}
+
+umpire_allocator * umpire_resourcemanager_make_allocator_list_pool_untracked_bufferify(
+ umpire_resourcemanager * self, const char * name, int Lname,
+ umpire_allocator allocator, size_t initial_size, size_t block,
+ umpire_allocator * SHC_rv)
+{
+ umpire::ResourceManager *SH_this =
+ static_cast(self->addr);
+ // splicer begin class.ResourceManager.method.make_allocator_list_pool_untracked_bufferify
+ const std::string SHCXX_name(name, Lname);
+ umpire::Allocator * SHCXX_allocator =
+ static_cast(allocator.addr);
+ umpire::Allocator * SHCXX_rv = new umpire::Allocator;
+ *SHCXX_rv = SH_this->makeAllocator(
+ SHCXX_name, *SHCXX_allocator, initial_size, block);
+ SHC_rv->addr = SHCXX_rv;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+ // splicer end class.ResourceManager.method.make_allocator_list_pool_untracked_bufferify
+}
+
+umpire_allocator * umpire_resourcemanager_make_allocator_quick_pool_untracked(
+ umpire_resourcemanager * self, const char * name,
+ umpire_allocator allocator, size_t initial_size, size_t block,
+ umpire_allocator * SHC_rv)
+{
+ umpire::ResourceManager *SH_this =
+ static_cast(self->addr);
+ // splicer begin class.ResourceManager.method.make_allocator_quick_pool_untracked
+ const std::string SHC_name_cxx(name);
+ umpire::Allocator *SHC_allocator_cxx =
+ static_cast(allocator.addr);
+ umpire::Allocator *SHC_rv_cxx = new umpire::Allocator;
+ *SHC_rv_cxx = SH_this->makeAllocator(
+ SHC_name_cxx, *SHC_allocator_cxx, initial_size, block);
+ SHC_rv->addr = SHC_rv_cxx;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+ // splicer end class.ResourceManager.method.make_allocator_quick_pool_untracked
+}
+
+umpire_allocator * umpire_resourcemanager_make_allocator_quick_pool_untracked_bufferify(
+ umpire_resourcemanager * self, const char * name, int Lname,
+ umpire_allocator allocator, size_t initial_size, size_t block,
+ umpire_allocator * SHC_rv)
+{
+ umpire::ResourceManager *SH_this =
+ static_cast(self->addr);
+ // splicer begin class.ResourceManager.method.make_allocator_quick_pool_untracked_bufferify
+ const std::string SHCXX_name(name, Lname);
+ umpire::Allocator * SHCXX_allocator =
+ static_cast(allocator.addr);
+ umpire::Allocator * SHCXX_rv = new umpire::Allocator;
+ *SHCXX_rv = SH_this->makeAllocator(
+ SHCXX_name, *SHCXX_allocator, initial_size, block);
+ SHC_rv->addr = SHCXX_rv;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+ // splicer end class.ResourceManager.method.make_allocator_quick_pool_untracked_bufferify
+}
+
+umpire_allocator * umpire_resourcemanager_make_allocator_resource_aware_pool_untracked(
+ umpire_resourcemanager * self, const char * name,
+ umpire_allocator allocator, size_t initial_size, size_t block,
+ umpire_allocator * SHC_rv)
+{
+ umpire::ResourceManager *SH_this =
+ static_cast(self->addr);
+ // splicer begin class.ResourceManager.method.make_allocator_resource_aware_pool_untracked
+ const std::string SHC_name_cxx(name);
+ umpire::Allocator *SHC_allocator_cxx =
+ static_cast(allocator.addr);
+ umpire::Allocator *SHC_rv_cxx = new umpire::Allocator;
+ *SHC_rv_cxx = SH_this->makeAllocator(
+ SHC_name_cxx, *SHC_allocator_cxx, initial_size, block);
+ SHC_rv->addr = SHC_rv_cxx;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+ // splicer end class.ResourceManager.method.make_allocator_resource_aware_pool_untracked
+}
+
+umpire_allocator * umpire_resourcemanager_make_allocator_resource_aware_pool_untracked_bufferify(
+ umpire_resourcemanager * self, const char * name, int Lname,
+ umpire_allocator allocator, size_t initial_size, size_t block,
+ umpire_allocator * SHC_rv)
+{
+ umpire::ResourceManager *SH_this =
+ static_cast(self->addr);
+ // splicer begin class.ResourceManager.method.make_allocator_resource_aware_pool_untracked_bufferify
+ const std::string SHCXX_name(name, Lname);
+ umpire::Allocator * SHCXX_allocator =
+ static_cast(allocator.addr);
+ umpire::Allocator * SHCXX_rv = new umpire::Allocator;
+ *SHCXX_rv = SH_this->makeAllocator(
+ SHCXX_name, *SHCXX_allocator, initial_size, block);
+ SHC_rv->addr = SHCXX_rv;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+ // splicer end class.ResourceManager.method.make_allocator_resource_aware_pool_untracked_bufferify
+}
+
+umpire_allocator * umpire_resourcemanager_make_allocator_fixed_pool_untracked(
+ umpire_resourcemanager * self, const char * name,
+ umpire_allocator allocator, size_t object_size,
+ umpire_allocator * SHC_rv)
+{
+ umpire::ResourceManager *SH_this =
+ static_cast(self->addr);
+ // splicer begin class.ResourceManager.method.make_allocator_fixed_pool_untracked
+ const std::string SHC_name_cxx(name);
+ umpire::Allocator *SHC_allocator_cxx =
+ static_cast(allocator.addr);
+ umpire::Allocator *SHC_rv_cxx = new umpire::Allocator;
+ *SHC_rv_cxx = SH_this->makeAllocator(
+ SHC_name_cxx, *SHC_allocator_cxx, object_size);
+ SHC_rv->addr = SHC_rv_cxx;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+ // splicer end class.ResourceManager.method.make_allocator_fixed_pool_untracked
+}
+
+umpire_allocator * umpire_resourcemanager_make_allocator_fixed_pool_untracked_bufferify(
+ umpire_resourcemanager * self, const char * name, int Lname,
+ umpire_allocator allocator, size_t object_size,
+ umpire_allocator * SHC_rv)
+{
+ umpire::ResourceManager *SH_this =
+ static_cast(self->addr);
+ // splicer begin class.ResourceManager.method.make_allocator_fixed_pool_untracked_bufferify
+ const std::string SHCXX_name(name, Lname);
+ umpire::Allocator * SHCXX_allocator =
+ static_cast(allocator.addr);
+ umpire::Allocator * SHCXX_rv = new umpire::Allocator;
+ *SHCXX_rv = SH_this->makeAllocator(
+ SHCXX_name, *SHCXX_allocator, object_size);
+ SHC_rv->addr = SHCXX_rv;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+ // splicer end class.ResourceManager.method.make_allocator_fixed_pool_untracked_bufferify
+}
+
+umpire_allocator * umpire_resourcemanager_make_allocator_monotonic_untracked(
+ umpire_resourcemanager * self, const char * name,
+ umpire_allocator allocator, size_t object_size,
+ umpire_allocator * SHC_rv)
+{
+ umpire::ResourceManager *SH_this =
+ static_cast(self->addr);
+ // splicer begin class.ResourceManager.method.make_allocator_monotonic_untracked
+ const std::string SHC_name_cxx(name);
+ umpire::Allocator *SHC_allocator_cxx =
+ static_cast(allocator.addr);
+ umpire::Allocator *SHC_rv_cxx = new umpire::Allocator;
+ *SHC_rv_cxx = SH_this->makeAllocator(
+ SHC_name_cxx, *SHC_allocator_cxx, object_size);
+ SHC_rv->addr = SHC_rv_cxx;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+ // splicer end class.ResourceManager.method.make_allocator_monotonic_untracked
+}
+
+umpire_allocator * umpire_resourcemanager_make_allocator_monotonic_untracked_bufferify(
+ umpire_resourcemanager * self, const char * name, int Lname,
+ umpire_allocator allocator, size_t object_size,
+ umpire_allocator * SHC_rv)
+{
+ umpire::ResourceManager *SH_this =
+ static_cast(self->addr);
+ // splicer begin class.ResourceManager.method.make_allocator_monotonic_untracked_bufferify
+ const std::string SHCXX_name(name, Lname);
+ umpire::Allocator * SHCXX_allocator =
+ static_cast(allocator.addr);
+ umpire::Allocator * SHCXX_rv = new umpire::Allocator;
+ *SHCXX_rv =
+ SH_this->makeAllocator(
+ SHCXX_name, *SHCXX_allocator, object_size);
+ SHC_rv->addr = SHCXX_rv;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+ // splicer end class.ResourceManager.method.make_allocator_monotonic_untracked_bufferify
+}
+
+umpire_allocator * umpire_resourcemanager_make_allocator_slot_pool_untracked(
+ umpire_resourcemanager * self, const char * name,
+ umpire_allocator allocator, size_t object_size,
+ umpire_allocator * SHC_rv)
+{
+ umpire::ResourceManager *SH_this =
+ static_cast(self->addr);
+ // splicer begin class.ResourceManager.method.make_allocator_slot_pool_untracked
+ const std::string SHC_name_cxx(name);
+ umpire::Allocator *SHC_allocator_cxx =
+ static_cast(allocator.addr);
+ umpire::Allocator *SHC_rv_cxx = new umpire::Allocator;
+ *SHC_rv_cxx = SH_this->makeAllocator(
+ SHC_name_cxx, *SHC_allocator_cxx, object_size);
+ SHC_rv->addr = SHC_rv_cxx;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+ // splicer end class.ResourceManager.method.make_allocator_slot_pool_untracked
+}
+
+umpire_allocator * umpire_resourcemanager_make_allocator_slot_pool_untracked_bufferify(
+ umpire_resourcemanager * self, const char * name, int Lname,
+ umpire_allocator allocator, size_t object_size,
+ umpire_allocator * SHC_rv)
+{
+ umpire::ResourceManager *SH_this =
+ static_cast(self->addr);
+ // splicer begin class.ResourceManager.method.make_allocator_slot_pool_untracked_bufferify
+ const std::string SHCXX_name(name, Lname);
+ umpire::Allocator * SHCXX_allocator =
+ static_cast(allocator.addr);
+ umpire::Allocator * SHCXX_rv = new umpire::Allocator;
+ *SHCXX_rv = SH_this->makeAllocator(
+ SHCXX_name, *SHCXX_allocator, object_size);
+ SHC_rv->addr = SHCXX_rv;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+ // splicer end class.ResourceManager.method.make_allocator_slot_pool_untracked_bufferify
+}
+
+umpire_allocator * umpire_resourcemanager_make_allocator_mixed_pool_untracked(
+ umpire_resourcemanager * self, const char * name,
+ umpire_allocator allocator, size_t smallest_fixed_obj_size,
+ size_t largest_fixed_obj_size, size_t max_initial_fixed_pool_size,
+ size_t fixed_size_multiplier, size_t quick_pool_initial_alloc_size,
+ size_t quick_pool_min_alloc_size, size_t quick_pool_align_bytes,
+ umpire_allocator * SHC_rv)
+{
+ umpire::ResourceManager *SH_this =
+ static_cast(self->addr);
+ // splicer begin class.ResourceManager.method.make_allocator_mixed_pool_untracked
+ const std::string SHC_name_cxx(name);
+ umpire::Allocator *SHC_allocator_cxx =
+ static_cast(allocator.addr);
+ umpire::Allocator *SHC_rv_cxx = new umpire::Allocator;
+ *SHC_rv_cxx = SH_this->makeAllocator(
+ SHC_name_cxx, *SHC_allocator_cxx, smallest_fixed_obj_size,
+ largest_fixed_obj_size, max_initial_fixed_pool_size,
+ fixed_size_multiplier, quick_pool_initial_alloc_size,
+ quick_pool_min_alloc_size, quick_pool_align_bytes);
+ SHC_rv->addr = SHC_rv_cxx;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+ // splicer end class.ResourceManager.method.make_allocator_mixed_pool_untracked
+}
+
+umpire_allocator * umpire_resourcemanager_make_allocator_mixed_pool_untracked_bufferify(
+ umpire_resourcemanager * self, const char * name, int Lname,
+ umpire_allocator allocator, size_t smallest_fixed_obj_size,
+ size_t largest_fixed_obj_size, size_t max_initial_fixed_pool_size,
+ size_t fixed_size_multiplier, size_t quick_pool_initial_alloc_size,
+ size_t quick_pool_min_alloc_size, size_t quick_pool_align_bytes,
+ umpire_allocator * SHC_rv)
+{
+ umpire::ResourceManager *SH_this =
+ static_cast(self->addr);
+ // splicer begin class.ResourceManager.method.make_allocator_mixed_pool_untracked_bufferify
+ const std::string SHCXX_name(name, Lname);
+ umpire::Allocator * SHCXX_allocator =
+ static_cast(allocator.addr);
+ umpire::Allocator * SHCXX_rv = new umpire::Allocator;
+ *SHCXX_rv = SH_this->makeAllocator(
+ SHCXX_name, *SHCXX_allocator, smallest_fixed_obj_size,
+ largest_fixed_obj_size, max_initial_fixed_pool_size,
+ fixed_size_multiplier, quick_pool_initial_alloc_size,
+ quick_pool_min_alloc_size, quick_pool_align_bytes);
+ SHC_rv->addr = SHCXX_rv;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+ // splicer end class.ResourceManager.method.make_allocator_mixed_pool_untracked_bufferify
+}
+
void umpire_resourcemanager_add_alias(umpire_resourcemanager * self,
const char * name, umpire_allocator allocator)
{
diff --git a/src/umpire/interface/c_fortran/wrapResourceManager.h b/src/umpire/interface/c_fortran/wrapResourceManager.h
index 8b2584ac5..b57996a73 100644
--- a/src/umpire/interface/c_fortran/wrapResourceManager.h
+++ b/src/umpire/interface/c_fortran/wrapResourceManager.h
@@ -186,6 +186,82 @@ umpire_allocator * umpire_resourcemanager_make_allocator_bufferify_prefetcher(
umpire_allocator allocator, int device_id,
umpire_allocator * SHC_rv);
+umpire_allocator * umpire_resourcemanager_make_allocator_list_pool_untracked(
+ umpire_resourcemanager * self, const char * name,
+ umpire_allocator allocator, size_t initial_size, size_t block,
+ umpire_allocator * SHC_rv);
+
+umpire_allocator * umpire_resourcemanager_make_allocator_list_pool_untracked_bufferify(
+ umpire_resourcemanager * self, const char * name, int Lname,
+ umpire_allocator allocator, size_t initial_size, size_t block,
+ umpire_allocator * SHC_rv);
+
+umpire_allocator * umpire_resourcemanager_make_allocator_quick_pool_untracked(
+ umpire_resourcemanager * self, const char * name,
+ umpire_allocator allocator, size_t initial_size, size_t block,
+ umpire_allocator * SHC_rv);
+
+umpire_allocator * umpire_resourcemanager_make_allocator_quick_pool_untracked_bufferify(
+ umpire_resourcemanager * self, const char * name, int Lname,
+ umpire_allocator allocator, size_t initial_size, size_t block,
+ umpire_allocator * SHC_rv);
+
+umpire_allocator * umpire_resourcemanager_make_allocator_resource_aware_pool_untracked(
+ umpire_resourcemanager * self, const char * name,
+ umpire_allocator allocator, size_t initial_size, size_t block,
+ umpire_allocator * SHC_rv);
+
+umpire_allocator * umpire_resourcemanager_make_allocator_resource_aware_pool_untracked_bufferify(
+ umpire_resourcemanager * self, const char * name, int Lname,
+ umpire_allocator allocator, size_t initial_size, size_t block,
+ umpire_allocator * SHC_rv);
+
+umpire_allocator * umpire_resourcemanager_make_allocator_fixed_pool_untracked(
+ umpire_resourcemanager * self, const char * name,
+ umpire_allocator allocator, size_t object_size,
+ umpire_allocator * SHC_rv);
+
+umpire_allocator * umpire_resourcemanager_make_allocator_fixed_pool_untracked_bufferify(
+ umpire_resourcemanager * self, const char * name, int Lname,
+ umpire_allocator allocator, size_t object_size,
+ umpire_allocator * SHC_rv);
+
+umpire_allocator * umpire_resourcemanager_make_allocator_monotonic_untracked(
+ umpire_resourcemanager * self, const char * name,
+ umpire_allocator allocator, size_t object_size,
+ umpire_allocator * SHC_rv);
+
+umpire_allocator * umpire_resourcemanager_make_allocator_monotonic_untracked_bufferify(
+ umpire_resourcemanager * self, const char * name, int Lname,
+ umpire_allocator allocator, size_t object_size,
+ umpire_allocator * SHC_rv);
+
+umpire_allocator * umpire_resourcemanager_make_allocator_slot_pool_untracked(
+ umpire_resourcemanager * self, const char * name,
+ umpire_allocator allocator, size_t object_size,
+ umpire_allocator * SHC_rv);
+
+umpire_allocator * umpire_resourcemanager_make_allocator_slot_pool_untracked_bufferify(
+ umpire_resourcemanager * self, const char * name, int Lname,
+ umpire_allocator allocator, size_t object_size,
+ umpire_allocator * SHC_rv);
+
+umpire_allocator * umpire_resourcemanager_make_allocator_mixed_pool_untracked(
+ umpire_resourcemanager * self, const char * name,
+ umpire_allocator allocator, size_t smallest_fixed_obj_size,
+ size_t largest_fixed_obj_size, size_t max_initial_fixed_pool_size,
+ size_t fixed_size_multiplier, size_t quick_pool_initial_alloc_size,
+ size_t quick_pool_min_alloc_size, size_t quick_pool_align_bytes,
+ umpire_allocator * SHC_rv);
+
+umpire_allocator * umpire_resourcemanager_make_allocator_mixed_pool_untracked_bufferify(
+ umpire_resourcemanager * self, const char * name, int Lname,
+ umpire_allocator allocator, size_t smallest_fixed_obj_size,
+ size_t largest_fixed_obj_size, size_t max_initial_fixed_pool_size,
+ size_t fixed_size_multiplier, size_t quick_pool_initial_alloc_size,
+ size_t quick_pool_min_alloc_size, size_t quick_pool_align_bytes,
+ umpire_allocator * SHC_rv);
+
void umpire_resourcemanager_add_alias(umpire_resourcemanager * self,
const char * name, umpire_allocator allocator);
diff --git a/src/umpire/interface/c_fortran/wrapfumpire.f b/src/umpire/interface/c_fortran/wrapfumpire.f
index 1646a604f..f43c8b1fb 100644
--- a/src/umpire/interface/c_fortran/wrapfumpire.f
+++ b/src/umpire/interface/c_fortran/wrapfumpire.f
@@ -242,6 +242,13 @@ module umpire_mod
procedure :: make_allocator_naming_shim => resourcemanager_make_allocator_naming_shim
procedure :: make_allocator_mixed_pool => resourcemanager_make_allocator_mixed_pool
procedure :: make_allocator_prefetcher => resourcemanager_make_allocator_prefetcher
+ procedure :: make_allocator_list_pool_untracked => make_alloc_dynamic_p_list_u
+ procedure :: make_allocator_quick_pool_untracked => make_alloc_quick_p_u
+ procedure :: make_allocator_resource_aware_pool_untracked => make_alloc_res_aware_p_u
+ procedure :: make_allocator_fixed_pool_untracked => make_alloc_fixed_p_u
+ procedure :: make_allocator_monotonic_untracked => make_alloc_monotonic_u
+ procedure :: make_allocator_slot_pool_untracked => make_alloc_slot_p_u
+ procedure :: make_allocator_mixed_pool_untracked => make_alloc_mixed_p_u
procedure :: add_alias => resourcemanager_add_alias
procedure :: remove_alias => resourcemanager_remove_alias
procedure :: destroy_allocator_by_name => resourcemanager_destroy_allocator_by_name
@@ -917,6 +924,251 @@ function c_resourcemanager_make_allocator_bufferify_prefetcher( &
type(C_PTR) SHT_rv
end function c_resourcemanager_make_allocator_bufferify_prefetcher
+ function c_resourcemanager_make_alloc_dynamic_p_list_u(self, &
+ name, allocator, initial_size, block, SHT_crv) &
+ result(SHT_rv) &
+ bind(C, name="umpire_resourcemanager_make_allocator_list_pool_untracked")
+ use iso_c_binding, only : C_CHAR, C_PTR, C_SIZE_T
+ import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule
+ implicit none
+ type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self
+ character(kind=C_CHAR), intent(IN) :: name(*)
+ type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: initial_size
+ integer(C_SIZE_T), value, intent(IN) :: block
+ type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv
+ type(C_PTR) SHT_rv
+ end function c_resourcemanager_make_alloc_dynamic_p_list_u
+
+ function c_resourcemanager_make_alloc_dynamic_p_list_u_bufferify( &
+ self, name, Lname, allocator, initial_size, block, &
+ SHT_crv) &
+ result(SHT_rv) &
+ bind(C, name="umpire_resourcemanager_make_allocator_list_pool_untracked_bufferify")
+ use iso_c_binding, only : C_CHAR, C_INT, C_PTR, C_SIZE_T
+ import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule
+ implicit none
+ type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self
+ character(kind=C_CHAR), intent(IN) :: name(*)
+ integer(C_INT), value, intent(IN) :: Lname
+ type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: initial_size
+ integer(C_SIZE_T), value, intent(IN) :: block
+ type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv
+ type(C_PTR) SHT_rv
+ end function c_resourcemanager_make_alloc_dynamic_p_list_u_bufferify
+
+ function c_resourcemanager_make_alloc_quick_p_u(self, name, &
+ allocator, initial_size, block, SHT_crv) &
+ result(SHT_rv) &
+ bind(C, name="umpire_resourcemanager_make_allocator_quick_pool_untracked")
+ use iso_c_binding, only : C_CHAR, C_PTR, C_SIZE_T
+ import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule
+ implicit none
+ type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self
+ character(kind=C_CHAR), intent(IN) :: name(*)
+ type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: initial_size
+ integer(C_SIZE_T), value, intent(IN) :: block
+ type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv
+ type(C_PTR) SHT_rv
+ end function c_resourcemanager_make_alloc_quick_p_u
+
+ function c_resourcemanager_make_alloc_quick_p_u_bufferify(self, &
+ name, Lname, allocator, initial_size, block, SHT_crv) &
+ result(SHT_rv) &
+ bind(C, name="umpire_resourcemanager_make_allocator_quick_pool_untracked_bufferify")
+ use iso_c_binding, only : C_CHAR, C_INT, C_PTR, C_SIZE_T
+ import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule
+ implicit none
+ type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self
+ character(kind=C_CHAR), intent(IN) :: name(*)
+ integer(C_INT), value, intent(IN) :: Lname
+ type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: initial_size
+ integer(C_SIZE_T), value, intent(IN) :: block
+ type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv
+ type(C_PTR) SHT_rv
+ end function c_resourcemanager_make_alloc_quick_p_u_bufferify
+
+ function c_resourcemanager_make_alloc_res_aware_p_u(self, name, &
+ allocator, initial_size, block, SHT_crv) &
+ result(SHT_rv) &
+ bind(C, name="umpire_resourcemanager_make_allocator_resource_aware_pool_untracked")
+ use iso_c_binding, only : C_CHAR, C_PTR, C_SIZE_T
+ import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule
+ implicit none
+ type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self
+ character(kind=C_CHAR), intent(IN) :: name(*)
+ type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: initial_size
+ integer(C_SIZE_T), value, intent(IN) :: block
+ type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv
+ type(C_PTR) SHT_rv
+ end function c_resourcemanager_make_alloc_res_aware_p_u
+
+ function c_resourcemanager_make_alloc_res_aware_p_u_bufferify( &
+ self, name, Lname, allocator, initial_size, block, &
+ SHT_crv) &
+ result(SHT_rv) &
+ bind(C, name="umpire_resourcemanager_make_allocator_resource_aware_pool_untracked_bufferify")
+ use iso_c_binding, only : C_CHAR, C_INT, C_PTR, C_SIZE_T
+ import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule
+ implicit none
+ type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self
+ character(kind=C_CHAR), intent(IN) :: name(*)
+ integer(C_INT), value, intent(IN) :: Lname
+ type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: initial_size
+ integer(C_SIZE_T), value, intent(IN) :: block
+ type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv
+ type(C_PTR) SHT_rv
+ end function c_resourcemanager_make_alloc_res_aware_p_u_bufferify
+
+ function c_resourcemanager_make_alloc_fixed_p_u(self, name, &
+ allocator, object_size, SHT_crv) &
+ result(SHT_rv) &
+ bind(C, name="umpire_resourcemanager_make_allocator_fixed_pool_untracked")
+ use iso_c_binding, only : C_CHAR, C_PTR, C_SIZE_T
+ import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule
+ implicit none
+ type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self
+ character(kind=C_CHAR), intent(IN) :: name(*)
+ type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: object_size
+ type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv
+ type(C_PTR) SHT_rv
+ end function c_resourcemanager_make_alloc_fixed_p_u
+
+ function c_resourcemanager_make_alloc_fixed_p_u_bufferify(self, &
+ name, Lname, allocator, object_size, SHT_crv) &
+ result(SHT_rv) &
+ bind(C, name="umpire_resourcemanager_make_allocator_fixed_pool_untracked_bufferify")
+ use iso_c_binding, only : C_CHAR, C_INT, C_PTR, C_SIZE_T
+ import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule
+ implicit none
+ type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self
+ character(kind=C_CHAR), intent(IN) :: name(*)
+ integer(C_INT), value, intent(IN) :: Lname
+ type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: object_size
+ type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv
+ type(C_PTR) SHT_rv
+ end function c_resourcemanager_make_alloc_fixed_p_u_bufferify
+
+ function c_resourcemanager_make_alloc_monotonic_u(self, name, &
+ allocator, object_size, SHT_crv) &
+ result(SHT_rv) &
+ bind(C, name="umpire_resourcemanager_make_allocator_monotonic_untracked")
+ use iso_c_binding, only : C_CHAR, C_PTR, C_SIZE_T
+ import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule
+ implicit none
+ type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self
+ character(kind=C_CHAR), intent(IN) :: name(*)
+ type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: object_size
+ type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv
+ type(C_PTR) SHT_rv
+ end function c_resourcemanager_make_alloc_monotonic_u
+
+ function c_resourcemanager_make_alloc_monotonic_u_bufferify( &
+ self, name, Lname, allocator, object_size, SHT_crv) &
+ result(SHT_rv) &
+ bind(C, name="umpire_resourcemanager_make_allocator_monotonic_untracked_bufferify")
+ use iso_c_binding, only : C_CHAR, C_INT, C_PTR, C_SIZE_T
+ import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule
+ implicit none
+ type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self
+ character(kind=C_CHAR), intent(IN) :: name(*)
+ integer(C_INT), value, intent(IN) :: Lname
+ type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: object_size
+ type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv
+ type(C_PTR) SHT_rv
+ end function c_resourcemanager_make_alloc_monotonic_u_bufferify
+
+ function c_resourcemanager_make_alloc_slot_p_u(self, name, &
+ allocator, object_size, SHT_crv) &
+ result(SHT_rv) &
+ bind(C, name="umpire_resourcemanager_make_allocator_slot_pool_untracked")
+ use iso_c_binding, only : C_CHAR, C_PTR, C_SIZE_T
+ import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule
+ implicit none
+ type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self
+ character(kind=C_CHAR), intent(IN) :: name(*)
+ type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: object_size
+ type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv
+ type(C_PTR) SHT_rv
+ end function c_resourcemanager_make_alloc_slot_p_u
+
+ function c_resourcemanager_make_alloc_slot_p_u_bufferify(self, &
+ name, Lname, allocator, object_size, SHT_crv) &
+ result(SHT_rv) &
+ bind(C, name="umpire_resourcemanager_make_allocator_slot_pool_untracked_bufferify")
+ use iso_c_binding, only : C_CHAR, C_INT, C_PTR, C_SIZE_T
+ import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule
+ implicit none
+ type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self
+ character(kind=C_CHAR), intent(IN) :: name(*)
+ integer(C_INT), value, intent(IN) :: Lname
+ type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: object_size
+ type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv
+ type(C_PTR) SHT_rv
+ end function c_resourcemanager_make_alloc_slot_p_u_bufferify
+
+ function c_resourcemanager_make_alloc_mixed_p_u(self, name, &
+ allocator, smallest_fixed_obj_size, &
+ largest_fixed_obj_size, max_initial_fixed_pool_size, &
+ fixed_size_multiplier, quick_pool_initial_alloc_size, &
+ quick_pool_min_alloc_size, quick_pool_align_bytes, &
+ SHT_crv) &
+ result(SHT_rv) &
+ bind(C, name="umpire_resourcemanager_make_allocator_mixed_pool_untracked")
+ use iso_c_binding, only : C_CHAR, C_PTR, C_SIZE_T
+ import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule
+ implicit none
+ type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self
+ character(kind=C_CHAR), intent(IN) :: name(*)
+ type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: smallest_fixed_obj_size
+ integer(C_SIZE_T), value, intent(IN) :: largest_fixed_obj_size
+ integer(C_SIZE_T), value, intent(IN) :: max_initial_fixed_pool_size
+ integer(C_SIZE_T), value, intent(IN) :: fixed_size_multiplier
+ integer(C_SIZE_T), value, intent(IN) :: quick_pool_initial_alloc_size
+ integer(C_SIZE_T), value, intent(IN) :: quick_pool_min_alloc_size
+ integer(C_SIZE_T), value, intent(IN) :: quick_pool_align_bytes
+ type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv
+ type(C_PTR) SHT_rv
+ end function c_resourcemanager_make_alloc_mixed_p_u
+
+ function c_resourcemanager_make_alloc_mixed_p_u_bufferify(self, &
+ name, Lname, allocator, smallest_fixed_obj_size, &
+ largest_fixed_obj_size, max_initial_fixed_pool_size, &
+ fixed_size_multiplier, quick_pool_initial_alloc_size, &
+ quick_pool_min_alloc_size, quick_pool_align_bytes, &
+ SHT_crv) &
+ result(SHT_rv) &
+ bind(C, name="umpire_resourcemanager_make_allocator_mixed_pool_untracked_bufferify")
+ use iso_c_binding, only : C_CHAR, C_INT, C_PTR, C_SIZE_T
+ import :: umpire_SHROUD_allocator_capsule, umpire_SHROUD_resourcemanager_capsule
+ implicit none
+ type(umpire_SHROUD_resourcemanager_capsule), intent(IN) :: self
+ character(kind=C_CHAR), intent(IN) :: name(*)
+ integer(C_INT), value, intent(IN) :: Lname
+ type(umpire_SHROUD_allocator_capsule), intent(IN), value :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: smallest_fixed_obj_size
+ integer(C_SIZE_T), value, intent(IN) :: largest_fixed_obj_size
+ integer(C_SIZE_T), value, intent(IN) :: max_initial_fixed_pool_size
+ integer(C_SIZE_T), value, intent(IN) :: fixed_size_multiplier
+ integer(C_SIZE_T), value, intent(IN) :: quick_pool_initial_alloc_size
+ integer(C_SIZE_T), value, intent(IN) :: quick_pool_min_alloc_size
+ integer(C_SIZE_T), value, intent(IN) :: quick_pool_align_bytes
+ type(umpire_SHROUD_allocator_capsule), intent(OUT) :: SHT_crv
+ type(C_PTR) SHT_rv
+ end function c_resourcemanager_make_alloc_mixed_p_u_bufferify
+
subroutine c_resourcemanager_add_alias(self, name, allocator) &
bind(C, name="umpire_resourcemanager_add_alias")
use iso_c_binding, only : C_CHAR
@@ -3164,6 +3416,137 @@ function resourcemanager_make_allocator_prefetcher(obj, name, &
! splicer end class.ResourceManager.method.make_allocator_prefetcher
end function resourcemanager_make_allocator_prefetcher
+ function make_alloc_dynamic_p_list_u(obj, name, allocator, &
+ initial_size, block) &
+ result(SHT_rv)
+ use iso_c_binding, only : C_INT, C_PTR, C_SIZE_T
+ class(UmpireResourceManager) :: obj
+ character(len=*), intent(IN) :: name
+ type(UmpireAllocator), value, intent(IN) :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: initial_size
+ integer(C_SIZE_T), value, intent(IN) :: block
+ type(UmpireAllocator) :: SHT_rv
+ ! splicer begin class.ResourceManager.method.make_allocator_list_pool_untracked
+ type(C_PTR) :: SHT_prv
+ SHT_prv = c_resourcemanager_make_alloc_dynamic_p_list_u_bufferify(obj%cxxmem, &
+ name, len_trim(name, kind=C_INT), allocator%cxxmem, &
+ initial_size, block, SHT_rv%cxxmem)
+ ! splicer end class.ResourceManager.method.make_allocator_list_pool_untracked
+ end function make_alloc_dynamic_p_list_u
+
+ function make_alloc_quick_p_u(obj, name, allocator, initial_size, &
+ block) &
+ result(SHT_rv)
+ use iso_c_binding, only : C_INT, C_PTR, C_SIZE_T
+ class(UmpireResourceManager) :: obj
+ character(len=*), intent(IN) :: name
+ type(UmpireAllocator), value, intent(IN) :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: initial_size
+ integer(C_SIZE_T), value, intent(IN) :: block
+ type(UmpireAllocator) :: SHT_rv
+ ! splicer begin class.ResourceManager.method.make_allocator_quick_pool_untracked
+ type(C_PTR) :: SHT_prv
+ SHT_prv = c_resourcemanager_make_alloc_quick_p_u_bufferify(obj%cxxmem, &
+ name, len_trim(name, kind=C_INT), allocator%cxxmem, &
+ initial_size, block, SHT_rv%cxxmem)
+ ! splicer end class.ResourceManager.method.make_allocator_quick_pool_untracked
+ end function make_alloc_quick_p_u
+
+ function make_alloc_res_aware_p_u(obj, name, allocator, &
+ initial_size, block) &
+ result(SHT_rv)
+ use iso_c_binding, only : C_INT, C_PTR, C_SIZE_T
+ class(UmpireResourceManager) :: obj
+ character(len=*), intent(IN) :: name
+ type(UmpireAllocator), value, intent(IN) :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: initial_size
+ integer(C_SIZE_T), value, intent(IN) :: block
+ type(UmpireAllocator) :: SHT_rv
+ ! splicer begin class.ResourceManager.method.make_allocator_resource_aware_pool_untracked
+ type(C_PTR) :: SHT_prv
+ SHT_prv = c_resourcemanager_make_alloc_res_aware_p_u_bufferify(obj%cxxmem, &
+ name, len_trim(name, kind=C_INT), allocator%cxxmem, &
+ initial_size, block, SHT_rv%cxxmem)
+ ! splicer end class.ResourceManager.method.make_allocator_resource_aware_pool_untracked
+ end function make_alloc_res_aware_p_u
+
+ function make_alloc_fixed_p_u(obj, name, allocator, object_size) &
+ result(SHT_rv)
+ use iso_c_binding, only : C_INT, C_PTR, C_SIZE_T
+ class(UmpireResourceManager) :: obj
+ character(len=*), intent(IN) :: name
+ type(UmpireAllocator), value, intent(IN) :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: object_size
+ type(UmpireAllocator) :: SHT_rv
+ ! splicer begin class.ResourceManager.method.make_allocator_fixed_pool_untracked
+ type(C_PTR) :: SHT_prv
+ SHT_prv = c_resourcemanager_make_alloc_fixed_p_u_bufferify(obj%cxxmem, &
+ name, len_trim(name, kind=C_INT), allocator%cxxmem, &
+ object_size, SHT_rv%cxxmem)
+ ! splicer end class.ResourceManager.method.make_allocator_fixed_pool_untracked
+ end function make_alloc_fixed_p_u
+
+ function make_alloc_monotonic_u(obj, name, allocator, object_size) &
+ result(SHT_rv)
+ use iso_c_binding, only : C_INT, C_PTR, C_SIZE_T
+ class(UmpireResourceManager) :: obj
+ character(len=*), intent(IN) :: name
+ type(UmpireAllocator), value, intent(IN) :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: object_size
+ type(UmpireAllocator) :: SHT_rv
+ ! splicer begin class.ResourceManager.method.make_allocator_monotonic_untracked
+ type(C_PTR) :: SHT_prv
+ SHT_prv = c_resourcemanager_make_alloc_monotonic_u_bufferify(obj%cxxmem, &
+ name, len_trim(name, kind=C_INT), allocator%cxxmem, &
+ object_size, SHT_rv%cxxmem)
+ ! splicer end class.ResourceManager.method.make_allocator_monotonic_untracked
+ end function make_alloc_monotonic_u
+
+ function make_alloc_slot_p_u(obj, name, allocator, object_size) &
+ result(SHT_rv)
+ use iso_c_binding, only : C_INT, C_PTR, C_SIZE_T
+ class(UmpireResourceManager) :: obj
+ character(len=*), intent(IN) :: name
+ type(UmpireAllocator), value, intent(IN) :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: object_size
+ type(UmpireAllocator) :: SHT_rv
+ ! splicer begin class.ResourceManager.method.make_allocator_slot_pool_untracked
+ type(C_PTR) :: SHT_prv
+ SHT_prv = c_resourcemanager_make_alloc_slot_p_u_bufferify(obj%cxxmem, &
+ name, len_trim(name, kind=C_INT), allocator%cxxmem, &
+ object_size, SHT_rv%cxxmem)
+ ! splicer end class.ResourceManager.method.make_allocator_slot_pool_untracked
+ end function make_alloc_slot_p_u
+
+ function make_alloc_mixed_p_u(obj, name, allocator, &
+ smallest_fixed_obj_size, largest_fixed_obj_size, &
+ max_initial_fixed_pool_size, fixed_size_multiplier, &
+ quick_pool_initial_alloc_size, quick_pool_min_alloc_size, &
+ quick_pool_align_bytes) &
+ result(SHT_rv)
+ use iso_c_binding, only : C_INT, C_PTR, C_SIZE_T
+ class(UmpireResourceManager) :: obj
+ character(len=*), intent(IN) :: name
+ type(UmpireAllocator), value, intent(IN) :: allocator
+ integer(C_SIZE_T), value, intent(IN) :: smallest_fixed_obj_size
+ integer(C_SIZE_T), value, intent(IN) :: largest_fixed_obj_size
+ integer(C_SIZE_T), value, intent(IN) :: max_initial_fixed_pool_size
+ integer(C_SIZE_T), value, intent(IN) :: fixed_size_multiplier
+ integer(C_SIZE_T), value, intent(IN) :: quick_pool_initial_alloc_size
+ integer(C_SIZE_T), value, intent(IN) :: quick_pool_min_alloc_size
+ integer(C_SIZE_T), value, intent(IN) :: quick_pool_align_bytes
+ type(UmpireAllocator) :: SHT_rv
+ ! splicer begin class.ResourceManager.method.make_allocator_mixed_pool_untracked
+ type(C_PTR) :: SHT_prv
+ SHT_prv = c_resourcemanager_make_alloc_mixed_p_u_bufferify(obj%cxxmem, &
+ name, len_trim(name, kind=C_INT), allocator%cxxmem, &
+ smallest_fixed_obj_size, largest_fixed_obj_size, &
+ max_initial_fixed_pool_size, fixed_size_multiplier, &
+ quick_pool_initial_alloc_size, quick_pool_min_alloc_size, &
+ quick_pool_align_bytes, SHT_rv%cxxmem)
+ ! splicer end class.ResourceManager.method.make_allocator_mixed_pool_untracked
+ end function make_alloc_mixed_p_u
+
subroutine resourcemanager_add_alias(obj, name, allocator)
use iso_c_binding, only : C_INT
class(UmpireResourceManager) :: obj
diff --git a/src/umpire/interface/umpire_shroud.yaml b/src/umpire/interface/umpire_shroud.yaml
index 602141467..d0b7d4b60 100644
--- a/src/umpire/interface/umpire_shroud.yaml
+++ b/src/umpire/interface/umpire_shroud.yaml
@@ -1,4 +1,4 @@
-##############################################################################
+##################################################################################
# Copyright (c) 2018-2022, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
#
@@ -11,7 +11,7 @@
#
# For details, see https://github.com/LLNL/Umpire
# Please also see the LICENSE file for MIT license.
-##############################################################################
+##################################################################################
copyright:
- Copyright (c) 2016-26, Lawrence Livermore National Security, LLC and Umpire
@@ -176,14 +176,17 @@ declarations:
cxx_template:
- instantiation:
format:
+ F_name_impl_template: make_alloc_dynamic_p_list
template_suffix: _list_pool
function_suffix: ""
- instantiation:
format:
+ F_name_impl_template: make_alloc_quick_p
template_suffix: _quick_pool
function_suffix: ""
- instantiation:
format:
+ F_name_impl_template: make_alloc_res_aware_p
template_suffix: _resource_aware_pool
function_suffix: ""
@@ -193,6 +196,7 @@ declarations:
cxx_template:
- instantiation:
format:
+ F_name_impl_template: make_alloc_alloc_advisor
template_suffix: _advisor
function_suffix: ""
@@ -202,10 +206,12 @@ declarations:
cxx_template:
- instantiation:
format:
+ F_name_impl_template: make_alloc_named_alloc
template_suffix: _named
function_suffix: ""
- instantiation:
format:
+ F_name_impl_template: make_alloc_thread_safe
template_suffix: _thread_safe
function_suffix: ""
@@ -215,22 +221,27 @@ declarations:
cxx_template:
- instantiation:
format:
+ F_name_impl_template: make_alloc_fixed_p
template_suffix: _fixed_pool
function_suffix: ""
- instantiation:
format:
+ F_name_impl_template: make_alloc_aligned_alloc
template_suffix: _aligned_allocator
function_suffix: ""
- instantiation:
format:
+ F_name_impl_template: make_alloc_size_limit
template_suffix: _size_limiter
function_suffix: ""
- instantiation:
format:
+ F_name_impl_template: make_alloc_monotonic
template_suffix: _monotonic
function_suffix: ""
- instantiation:
format:
+ F_name_impl_template: make_alloc_slot_p
template_suffix: _slot_pool
function_suffix: ""
@@ -240,6 +251,7 @@ declarations:
cxx_template:
- instantiation:
format:
+ F_name_impl_template: make_alloc_naming_shim
template_suffix: _naming_shim
function_suffix: ""
@@ -249,6 +261,7 @@ declarations:
cxx_template:
- instantiation:
format:
+ F_name_impl_template: make_alloc_mixed_p
template_suffix: _mixed_pool
function_suffix: ""
@@ -258,9 +271,136 @@ declarations:
cxx_template:
- instantiation:
format:
+ F_name_impl_template: make_alloc_alloc_prefetch
template_suffix: _prefetcher
function_suffix: ""
+ # Untracked pool allocators need explicit names to keep the generated
+ # Fortran helper identifiers below compiler limits. The corresponding
+ # C bufferify wrappers are overridden by the C splicer include listed
+ # below, since Shroud emits invalid member calls for those helpers.
+ - decl: Allocator makeAllocator_list_pool_untracked(const std::string& name, Allocator allocator, size_t initial_size, size_t block)
+ options:
+ F_C_name_template: c_resourcemanager_make_alloc_dynamic_p_list_u{function_suffix}{template_suffix}
+ format:
+ F_name_impl: make_alloc_dynamic_p_list_u
+ splicer:
+ c: |
+ const std::string SHC_name_cxx(name);
+ umpire::Allocator *SHC_allocator_cxx =
+ static_cast(allocator.addr);
+ umpire::Allocator *SHC_rv_cxx = new umpire::Allocator;
+ *SHC_rv_cxx = SH_this->makeAllocator(
+ SHC_name_cxx, *SHC_allocator_cxx, initial_size, block);
+ SHC_rv->addr = SHC_rv_cxx;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+
+ - decl: Allocator makeAllocator_quick_pool_untracked(const std::string& name, Allocator allocator, size_t initial_size, size_t block)
+ options:
+ F_C_name_template: c_resourcemanager_make_alloc_quick_p_u{function_suffix}{template_suffix}
+ format:
+ F_name_impl: make_alloc_quick_p_u
+ splicer:
+ c: |
+ const std::string SHC_name_cxx(name);
+ umpire::Allocator *SHC_allocator_cxx =
+ static_cast(allocator.addr);
+ umpire::Allocator *SHC_rv_cxx = new umpire::Allocator;
+ *SHC_rv_cxx = SH_this->makeAllocator(
+ SHC_name_cxx, *SHC_allocator_cxx, initial_size, block);
+ SHC_rv->addr = SHC_rv_cxx;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+
+ - decl: Allocator makeAllocator_resource_aware_pool_untracked(const std::string& name, Allocator allocator, size_t initial_size, size_t block)
+ options:
+ F_C_name_template: c_resourcemanager_make_alloc_res_aware_p_u{function_suffix}{template_suffix}
+ format:
+ F_name_impl: make_alloc_res_aware_p_u
+ splicer:
+ c: |
+ const std::string SHC_name_cxx(name);
+ umpire::Allocator *SHC_allocator_cxx =
+ static_cast(allocator.addr);
+ umpire::Allocator *SHC_rv_cxx = new umpire::Allocator;
+ *SHC_rv_cxx = SH_this->makeAllocator(
+ SHC_name_cxx, *SHC_allocator_cxx, initial_size, block);
+ SHC_rv->addr = SHC_rv_cxx;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+
+ - decl: Allocator makeAllocator_fixed_pool_untracked(const std::string& name, Allocator allocator, size_t object_size)
+ options:
+ F_C_name_template: c_resourcemanager_make_alloc_fixed_p_u{function_suffix}{template_suffix}
+ format:
+ F_name_impl: make_alloc_fixed_p_u
+ splicer:
+ c: |
+ const std::string SHC_name_cxx(name);
+ umpire::Allocator *SHC_allocator_cxx =
+ static_cast(allocator.addr);
+ umpire::Allocator *SHC_rv_cxx = new umpire::Allocator;
+ *SHC_rv_cxx = SH_this->makeAllocator(
+ SHC_name_cxx, *SHC_allocator_cxx, object_size);
+ SHC_rv->addr = SHC_rv_cxx;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+
+ - decl: Allocator makeAllocator_monotonic_untracked(const std::string& name, Allocator allocator, size_t object_size)
+ options:
+ F_C_name_template: c_resourcemanager_make_alloc_monotonic_u{function_suffix}{template_suffix}
+ format:
+ F_name_impl: make_alloc_monotonic_u
+ splicer:
+ c: |
+ const std::string SHC_name_cxx(name);
+ umpire::Allocator *SHC_allocator_cxx =
+ static_cast(allocator.addr);
+ umpire::Allocator *SHC_rv_cxx = new umpire::Allocator;
+ *SHC_rv_cxx = SH_this->makeAllocator(
+ SHC_name_cxx, *SHC_allocator_cxx, object_size);
+ SHC_rv->addr = SHC_rv_cxx;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+
+ - decl: Allocator makeAllocator_slot_pool_untracked(const std::string& name, Allocator allocator, size_t object_size)
+ options:
+ F_C_name_template: c_resourcemanager_make_alloc_slot_p_u{function_suffix}{template_suffix}
+ format:
+ F_name_impl: make_alloc_slot_p_u
+ splicer:
+ c: |
+ const std::string SHC_name_cxx(name);
+ umpire::Allocator *SHC_allocator_cxx =
+ static_cast(allocator.addr);
+ umpire::Allocator *SHC_rv_cxx = new umpire::Allocator;
+ *SHC_rv_cxx = SH_this->makeAllocator(
+ SHC_name_cxx, *SHC_allocator_cxx, object_size);
+ SHC_rv->addr = SHC_rv_cxx;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+
+ - decl: Allocator makeAllocator_mixed_pool_untracked(const std::string& name, Allocator allocator, size_t smallest_fixed_obj_size, size_t largest_fixed_obj_size, size_t max_initial_fixed_pool_size, size_t fixed_size_multiplier, size_t quick_pool_initial_alloc_size, size_t quick_pool_min_alloc_size, size_t quick_pool_align_bytes)
+ options:
+ F_C_name_template: c_resourcemanager_make_alloc_mixed_p_u{function_suffix}{template_suffix}
+ format:
+ F_name_impl: make_alloc_mixed_p_u
+ splicer:
+ c: |
+ const std::string SHC_name_cxx(name);
+ umpire::Allocator *SHC_allocator_cxx =
+ static_cast(allocator.addr);
+ umpire::Allocator *SHC_rv_cxx = new umpire::Allocator;
+ *SHC_rv_cxx = SH_this->makeAllocator(
+ SHC_name_cxx, *SHC_allocator_cxx, smallest_fixed_obj_size,
+ largest_fixed_obj_size, max_initial_fixed_pool_size,
+ fixed_size_multiplier, quick_pool_initial_alloc_size,
+ quick_pool_min_alloc_size, quick_pool_align_bytes);
+ SHC_rv->addr = SHC_rv_cxx;
+ SHC_rv->idtor = 1;
+ return SHC_rv;
+
- decl: void addAlias(const std::string& name, Allocator allocator)
- decl: void removeAlias(const std::string& name, Allocator allocator)
@@ -326,5 +466,7 @@ declarations:
- decl: void deregisterAllocation(void* ptr)
splicer:
+ c:
+ - c_fortran/gencumpiresplicer.inc
f:
- c_fortran/genfumpiresplicer.f