From 5a0b3927a33807cca4c77c40eb873f8a3b51b0b0 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sat, 29 Apr 2023 19:07:11 +0100 Subject: Drop .hpp for header only things Half of them acquired a .cpp part anyway --- lib/glRef.h | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 lib/glRef.h (limited to 'lib/glRef.h') diff --git a/lib/glRef.h b/lib/glRef.h new file mode 100644 index 0000000..3031cf5 --- /dev/null +++ b/lib/glRef.h @@ -0,0 +1,62 @@ +#pragma once + +#include +#include + +template class glRef { +public: + // cppcheck-suppress redundantPointerOp + template explicit glRef(Args &&... args) : id {(*get)(fixed..., std::forward(args)...)} + { + if (!id) { + throw std::runtime_error("Get function failed"); + } + } + + glRef(glRef && other) : id {other.id} + { + other.id = {}; + } + + ~glRef() + { + if (id) { + // cppcheck-suppress redundantPointerOp + (*release)(id); + } + } + + NO_COPY(glRef); + + const auto & + operator=(glRef && other) + { + if (id) { + // cppcheck-suppress redundantPointerOp + (*release)(id); + } + id = other.id; + other.id = {}; + return *this; + } + + auto + operator*() const + { + return id; + } + + auto + operator->() const + { + return id; + } + + operator IdType() const + { + return id; + } + +private: + IdType id; +}; -- cgit v1.2.3