From 23a103a56c1be9729bc2381ccab592e92dae7f44 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Thu, 3 May 2012 18:09:51 +1000 Subject: [PATCH] Add some useful scoped types in raii.hpp header --- Makefile.am | 1 + raii.hpp | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 raii.hpp diff --git a/Makefile.am b/Makefile.am index b76be4d2..c80acdd3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -71,6 +71,7 @@ UTIL_FILES = \ pool.cpp \ pool.hpp \ preprocessor.hpp \ + raii.hpp \ random.cpp \ random.hpp \ range.cpp \ diff --git a/raii.hpp b/raii.hpp new file mode 100644 index 00000000..533cc041 --- /dev/null +++ b/raii.hpp @@ -0,0 +1,54 @@ +/* + * This file is part of libgim. + * + * libgim is free software: you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * libgim is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with libgim. If not, see . + * + * Copyright 2012 Danny Robson + */ + +#ifndef __UTIL_RAII_HPP +#define __UTIL_RAII_HPP + +#include "preprocessor.hpp" + +#define raii CONCATENATE(__unique_, __COUNTER__) + +namespace util { + template + struct scoped_counter { + scoped_counter (T &_counter): + counter (_counter) + { ++counter; } + + ~scoped_counter () + { --counter; } + + T &counter; + }; + + + template + struct scoped_function { + scoped_function (T &&_func): + func (std::move (_func)) + { ; } + + ~scoped_function () + { func (); } + + T func; + }; +} + +#endif