diff options
Diffstat (limited to 'tools/lldb-mi/MIUtilSingletonBase.h')
-rw-r--r-- | tools/lldb-mi/MIUtilSingletonBase.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/tools/lldb-mi/MIUtilSingletonBase.h b/tools/lldb-mi/MIUtilSingletonBase.h new file mode 100644 index 000000000000..23e971014882 --- /dev/null +++ b/tools/lldb-mi/MIUtilSingletonBase.h @@ -0,0 +1,71 @@ +//===-- MIUtilSingletonBase.h -----------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +//++ +// File: MIUtilSingletonBase.h +// +// Overview: MI::ISingleton interface. +// +// Environment: Compilers: Visual C++ 12. +// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 +// Libraries: See MIReadmetxt. +// +// Copyright: None. +//-- + +#pragma once + +namespace MI +{ + +// MI::ISingleton base class usage: +// +// class CMIDerivedClass +// : public MI::ISingleton< CMIDerivedClass > +// { +// friend MI::ISingleton< CMIDerivedClass >; +// +// // Overridden: +// public: +// // From MI::ISingleton +// virtual bool Initialize( void ); +// virtual bool Shutdown( void ); +// }; + +//++ ============================================================================ +// Details: Base class for the singleton pattern. +// Gotchas: Derived class must specify MI::ISingleton<> as a friend class. +// Authors: Aidan Dodds 17/03/2014. +// Changes: None. +//-- +template< typename T > +class ISingleton +{ +// Statics: +public: + // Return an instance of the derived class + static T & Instance( void ) + { + // This will fail if the derived class has not + // declared itself to be a friend of MI::ISingleton + static T instance; + + return instance; + } + +// Overrideable: +public: + virtual bool Initialize( void ) = 0; + virtual bool Shutdown( void ) = 0; + // + /* dtor */ virtual ~ISingleton( void ) { }; +}; + +} // namespace MI + |