Program Listing for File GilRelease.cc

Program Listing for File GilRelease.cc#

Return to documentation for file (doxygen_docs/GeneralKModels/GilRelease.cc)

#include "Karana/GeneralKModels/GilRelease.h"
#include "Karana/KCore/Allocator.h"
#include <chrono>
#include <pybind11/pybind11.h>

/**
 * @file
 * @brief GilRelease implementation.
 */

namespace Karana::Models {

    namespace kd = Karana::Dynamics;

    GilRelease::GilRelease(std::string_view name, const kc::ks_ptr<kd::ModelManager> &mm)
        : KModel<GilRelease>(name, mm){};

    kc::ks_ptr<GilRelease> GilRelease::create(std::string_view name,
                                              const kc::ks_ptr<kd::ModelManager> &mm) {
        kc::ks_ptr<GilRelease> srt =
            std::allocate_shared<GilRelease>(kc::Allocator<GilRelease>{}, name, mm);
        mm->registerModel(srt);
        return srt;
    }

    void GilRelease::postHop(const km::Ktime &, const km::Vec &) {
        auto t = std::chrono::high_resolution_clock::now();
        if (t >= _next_gil_release) {
            pybind11::gil_scoped_release release;
            _next_gil_release = t + std::chrono::microseconds(16667);
        }
    }

    // Destructor included for MacOS builds. Must have a key-function out-of-line to avoid dulpicate
    // symbols.
    GilRelease::~GilRelease(){};

} // namespace Karana::Models