verilator/test_regress/t/TestVpi.h

48 lines
1.4 KiB
C++

// -*- mode: C++; c-file-style: "cc-mode" -*-
//*************************************************************************
//
// Copyright 2013-2017 by Wilson Snyder. This program is free software; you can
// redistribute it and/or modify it under the terms of either the GNU
// Lesser General Public License Version 3 or the Perl Artistic License
// Version 2.0.
// SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
//
//*************************************************************************
#include "vpi_user.h"
//======================================================================
class TestVpiHandle {
/// For testing, etc, wrap vpiHandle in an auto-releasing class
vpiHandle m_handle;
bool m_free;
public:
TestVpiHandle()
: m_handle(NULL)
, m_free(true) {}
TestVpiHandle(vpiHandle h)
: m_handle(h)
, m_free(true) {}
~TestVpiHandle() {
if (m_handle && m_free) {
// Below not VL_DO_DANGLING so is portable
{
vpi_release_handle(m_handle);
m_handle = NULL;
}
}
}
operator vpiHandle() const { return m_handle; }
inline TestVpiHandle& operator=(vpiHandle h) {
m_handle = h;
return *this;
}
// Freed by another action e.g. vpi_scan; so empty and don't free again
void freed() {
m_handle = NULL;
m_free = false;
}
};