verilator/test_regress/t/TestVpi.h

47 lines
1.3 KiB
C
Raw Normal View History

// -*- mode: C++; c-file-style: "cc-mode" -*-
//*************************************************************************
//
2017-01-15 17:09:59 +00:00
// 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) {
2020-12-16 03:09:40 +00:00
// Below not VL_DO_DANGLING so is portable
{
vpi_release_handle(m_handle);
2020-12-16 03:09:40 +00:00
m_handle = NULL;
}
}
}
operator vpiHandle() const { return m_handle; }
inline TestVpiHandle& operator=(vpiHandle h) {
m_handle = h;
return *this;
}
TestVpiHandle& nofree() {
m_free = false;
return *this;
}
};