--- /dev/null
+
+/*] Copyright (c) 2009-2010, Charles McGarvey [**************************
+**] All rights reserved.
+*
+* vi:ts=4 sw=4 tw=75
+*
+* Distributable under the terms and conditions of the 2-clause BSD license;
+* see the file COPYING for a complete text of the license.
+*
+**************************************************************************/
+
+#ifndef _MOOF_BACKEND_HH_
+#define _MOOF_BACKEND_HH_
+
+/**
+ * \file backend.hh
+ * Initialize the backend libraries and subsystems.
+ */
+
+
+namespace moof {
+
+
+/**
+ * Some classes and subsystems require certain backend libraries to be
+ * initialized. This is the mechanism to accomplish that. Classes which
+ * rely on any backend libraries just need to instantiate this class as a
+ * member. Backend cleanup will occur automagically when there are no more
+ * instances.
+ */
+class backend
+{
+public:
+
+ /**
+ * Construct a backend reference, initializing the backend if it hasn't
+ * already been initialized.
+ */
+ backend();
+
+ /**
+ * Get whether or not the backend has been initialized.
+ * \return True if the backend is initialized, false otherwise.
+ */
+ static bool is_initialized();
+
+
+ // The rest of this stuff is to implement the reference counting.
+
+ backend(const backend& backend);
+ backend& operator=(const backend& backend);
+ ~backend();
+};
+
+
+} // namespace moof
+
+#endif // _MOOF_BACKEND_HH_
+