sleipnirgroup-jormungandr 0.6.7.dev7__tar.gz → 0.6.7.dev9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of sleipnirgroup-jormungandr might be problematic. Click here for more details.
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/PKG-INFO +1 -1
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/util/pool.hpp +94 -21
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/src/sleipnir/__init__.py +1 -1
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/CMakeLists.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/LICENSE.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/README.md +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/SleipnirConfig.cmake.in +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/cmake/BuildTypes.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/cmake/CompilerFlags.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/cmake/Pybind11Mkdoc.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/cmake/SubdirList.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/cmake/arm-none-eabi.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/autodiff/expression.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/autodiff/expression_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/autodiff/gradient.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/autodiff/hessian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/autodiff/jacobian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/autodiff/slice.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/autodiff/variable.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/autodiff/variable_block.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/multistart.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/ocp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/problem.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/ipm.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/newton.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/options.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/util/assert.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/util/concepts.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/util/empty.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/util/function_ref.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/util/print.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/util/print_diagnostics.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/util/profiler.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/util/scope_exit.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/util/spy.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/include/sleipnir/util/symbol_exports.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/pyproject.toml +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/autodiff/bind_gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/autodiff/bind_hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/autodiff/bind_variable.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/binders.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/docstrings.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/for_each_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/main.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/optimization/bind_ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/optimization/bind_problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/try_cast.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/src/sleipnir/autodiff/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/src/sleipnir/optimization/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/autodiff/gradient_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/autodiff/hessian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/autodiff/jacobian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/autodiff/variable_matrix_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/autodiff/variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/cart_pole_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/cart_pole_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/cart_pole_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/constraints_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/decision_variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/differential_drive_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/differential_drive_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/differential_drive_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/double_integrator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/flywheel_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/flywheel_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/linear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/multistart_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/nonlinear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/problem_spy_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/quadratic_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/rk4.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/solver/exit_status_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/test/optimization/trivial_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/src/autodiff/gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/src/autodiff/hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/src/autodiff/jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/src/autodiff/variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/src/optimization/ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/src/optimization/problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/src/optimization/solver/ipm.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/src/optimization/solver/newton.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/src/optimization/solver/sqp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/src/util/pool.cpp +0 -0
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
#pragma once
|
|
4
4
|
|
|
5
|
+
#include <algorithm>
|
|
5
6
|
#include <cstddef>
|
|
6
7
|
#include <memory>
|
|
7
8
|
|
|
@@ -13,9 +14,11 @@ namespace slp {
|
|
|
13
14
|
|
|
14
15
|
/// This class implements a pool memory resource.
|
|
15
16
|
///
|
|
16
|
-
/// The pool allocates chunks of memory and splits them into blocks managed by
|
|
17
|
-
/// free
|
|
18
|
-
/// return pointers
|
|
17
|
+
/// The pool allocates chunks of memory and splits them into blocks managed by
|
|
18
|
+
/// free lists. Each distinct requested block size gets its own chunks and free
|
|
19
|
+
/// list. Allocations return pointers from the free list for the requested size,
|
|
20
|
+
/// and deallocations return pointers to the free list of the chunk they came
|
|
21
|
+
/// from.
|
|
19
22
|
class SLEIPNIR_DLLEXPORT PoolResource {
|
|
20
23
|
public:
|
|
21
24
|
/// Constructs a default PoolResource.
|
|
@@ -43,29 +46,50 @@ class SLEIPNIR_DLLEXPORT PoolResource {
|
|
|
43
46
|
/// Returns a block of memory from the pool.
|
|
44
47
|
///
|
|
45
48
|
/// @param bytes Number of bytes in the block.
|
|
46
|
-
/// @param alignment Alignment of the block
|
|
49
|
+
/// @param alignment Alignment of the block. Must be a power of two no larger
|
|
50
|
+
/// than alignof(std::max_align_t).
|
|
47
51
|
/// @return A block of memory from the pool.
|
|
48
52
|
[[nodiscard]]
|
|
49
|
-
void* allocate(size_t bytes,
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
void* allocate(size_t bytes, size_t alignment = alignof(std::max_align_t)) {
|
|
54
|
+
// Round up to a multiple of the alignment so consecutive blocks in a chunk
|
|
55
|
+
// stay aligned. `alignment` is a power of two, so `alignment - 1` is a mask
|
|
56
|
+
// of the bits below it.
|
|
57
|
+
//
|
|
58
|
+
// 1. Add `alignment - 1` so the round-down in step 4 becomes a round-up
|
|
59
|
+
// 2. Create mask `alignment - 1` with every bit below the alignment set
|
|
60
|
+
// 3. Invert mask via `~(alignment - 1)` so only higher bits are set
|
|
61
|
+
// 4. Bitwise AND to zero out lower bits, rounding down to a multiple of the
|
|
62
|
+
// alignment
|
|
63
|
+
size_t block_size = (bytes + alignment - 1) & ~(alignment - 1);
|
|
64
|
+
|
|
65
|
+
auto& pool = get_pool(block_size);
|
|
66
|
+
if (pool.free_list.empty()) {
|
|
67
|
+
add_chunk(pool);
|
|
53
68
|
}
|
|
54
69
|
|
|
55
|
-
auto ptr =
|
|
56
|
-
|
|
70
|
+
auto ptr = pool.free_list.back();
|
|
71
|
+
pool.free_list.pop_back();
|
|
57
72
|
return ptr;
|
|
58
73
|
}
|
|
59
74
|
|
|
60
75
|
/// Gives a block of memory back to the pool.
|
|
61
76
|
///
|
|
77
|
+
/// The block is returned to the free list of the chunk it was allocated from,
|
|
78
|
+
/// so the size and alignment don't need to match the original allocation.
|
|
79
|
+
///
|
|
62
80
|
/// @param p A pointer to the block of memory.
|
|
63
81
|
/// @param bytes Number of bytes in the block (unused).
|
|
64
82
|
/// @param alignment Alignment of the block (unused).
|
|
65
83
|
void deallocate(
|
|
66
84
|
void* p, [[maybe_unused]] size_t bytes,
|
|
67
85
|
[[maybe_unused]] size_t alignment = alignof(std::max_align_t)) {
|
|
68
|
-
|
|
86
|
+
// Find the last chunk that starts at or before p
|
|
87
|
+
auto chunk = std::upper_bound(
|
|
88
|
+
m_chunks.begin(), m_chunks.end(), static_cast<std::byte*>(p),
|
|
89
|
+
[](const std::byte* ptr, const Chunk& c) { return ptr < c.begin; });
|
|
90
|
+
--chunk;
|
|
91
|
+
|
|
92
|
+
m_pools[chunk->pool_index].free_list.emplace_back(p);
|
|
69
93
|
}
|
|
70
94
|
|
|
71
95
|
/// Returns true if this pool resource has the same backing storage as
|
|
@@ -82,22 +106,71 @@ class SLEIPNIR_DLLEXPORT PoolResource {
|
|
|
82
106
|
///
|
|
83
107
|
/// @return The number of blocks from this pool resource that are in use.
|
|
84
108
|
size_t blocks_in_use() const noexcept {
|
|
85
|
-
|
|
109
|
+
size_t free_blocks = 0;
|
|
110
|
+
for (const auto& pool : m_pools) {
|
|
111
|
+
free_blocks += pool.free_list.size();
|
|
112
|
+
}
|
|
113
|
+
return m_chunks.size() * blocks_per_chunk - free_blocks;
|
|
86
114
|
}
|
|
87
115
|
|
|
88
116
|
private:
|
|
117
|
+
/// Free list for blocks of one size.
|
|
118
|
+
struct Pool {
|
|
119
|
+
/// Number of bytes per block.
|
|
120
|
+
size_t block_size;
|
|
121
|
+
|
|
122
|
+
/// Pointers to free blocks.
|
|
123
|
+
gch::small_vector<void*> free_list;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
/// Chunk of memory owned by a pool.
|
|
127
|
+
struct Chunk {
|
|
128
|
+
/// Start of the chunk's memory.
|
|
129
|
+
std::byte* begin;
|
|
130
|
+
|
|
131
|
+
/// Index of the pool whose blocks were carved from this chunk.
|
|
132
|
+
size_t pool_index;
|
|
133
|
+
};
|
|
134
|
+
|
|
89
135
|
gch::small_vector<std::unique_ptr<std::byte[]>> m_buffer;
|
|
90
|
-
|
|
136
|
+
|
|
137
|
+
/// Chunks sorted by start address.
|
|
138
|
+
gch::small_vector<Chunk> m_chunks;
|
|
139
|
+
|
|
140
|
+
gch::small_vector<Pool> m_pools;
|
|
91
141
|
size_t blocks_per_chunk;
|
|
92
142
|
|
|
93
|
-
///
|
|
94
|
-
///
|
|
143
|
+
/// Returns the pool for the given block size, creating it if necessary.
|
|
144
|
+
///
|
|
145
|
+
/// @param block_size Number of bytes per block.
|
|
146
|
+
/// @return The pool for the given block size.
|
|
147
|
+
Pool& get_pool(size_t block_size) {
|
|
148
|
+
for (auto& pool : m_pools) {
|
|
149
|
+
if (pool.block_size == block_size) {
|
|
150
|
+
return pool;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return m_pools.emplace_back(Pool{block_size, {}});
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/// Adds a memory chunk to the given pool, partitions it into blocks with the
|
|
158
|
+
/// pool's block size, and appends pointers to them to the pool's free list.
|
|
95
159
|
///
|
|
96
|
-
/// @param
|
|
97
|
-
void add_chunk(
|
|
98
|
-
|
|
160
|
+
/// @param pool The pool.
|
|
161
|
+
void add_chunk(Pool& pool) {
|
|
162
|
+
auto begin =
|
|
163
|
+
m_buffer.emplace_back(new std::byte[pool.block_size * blocks_per_chunk])
|
|
164
|
+
.get();
|
|
165
|
+
|
|
166
|
+
size_t pool_index = &pool - m_pools.data();
|
|
167
|
+
auto pos = std::upper_bound(
|
|
168
|
+
m_chunks.begin(), m_chunks.end(), begin,
|
|
169
|
+
[](const std::byte* ptr, const Chunk& c) { return ptr < c.begin; });
|
|
170
|
+
m_chunks.insert(pos, Chunk{begin, pool_index});
|
|
171
|
+
|
|
99
172
|
for (int i = blocks_per_chunk - 1; i >= 0; --i) {
|
|
100
|
-
|
|
173
|
+
pool.free_list.emplace_back(begin + pool.block_size * i);
|
|
101
174
|
}
|
|
102
175
|
}
|
|
103
176
|
};
|
|
@@ -130,7 +203,7 @@ class PoolAllocator {
|
|
|
130
203
|
/// @return A block of memory from the pool.
|
|
131
204
|
[[nodiscard]]
|
|
132
205
|
constexpr T* allocate(size_t n) {
|
|
133
|
-
return static_cast<T*>(m_memory_resource->allocate(n));
|
|
206
|
+
return static_cast<T*>(m_memory_resource->allocate(n, alignof(T)));
|
|
134
207
|
}
|
|
135
208
|
|
|
136
209
|
/// Gives a block of memory back to the pool.
|
|
@@ -138,7 +211,7 @@ class PoolAllocator {
|
|
|
138
211
|
/// @param p A pointer to the block of memory.
|
|
139
212
|
/// @param n Number of bytes in the block.
|
|
140
213
|
constexpr void deallocate(T* p, size_t n) {
|
|
141
|
-
m_memory_resource->deallocate(p, n);
|
|
214
|
+
m_memory_resource->deallocate(p, n, alignof(T));
|
|
142
215
|
}
|
|
143
216
|
|
|
144
217
|
private:
|
{sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/CMakeLists.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/cmake/BuildTypes.cmake
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/cmake/SubdirList.cmake
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/pyproject.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/binders.hpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/python/cpp/main.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.6.7.dev7 → sleipnirgroup_jormungandr-0.6.7.dev9}/src/util/pool.cpp
RENAMED
|
File without changes
|