summaryrefslogtreecommitdiffstats
path: root/base/memory/scoped_native_library.h
diff options
context:
space:
mode:
Diffstat (limited to 'base/memory/scoped_native_library.h')
-rw-r--r--base/memory/scoped_native_library.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/base/memory/scoped_native_library.h b/base/memory/scoped_native_library.h
new file mode 100644
index 0000000..56116b9
--- /dev/null
+++ b/base/memory/scoped_native_library.h
@@ -0,0 +1,53 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_MEMORY_SCOPED_NATIVE_LIBRARY_H_
+#define BASE_MEMORY_SCOPED_NATIVE_LIBRARY_H_
+#pragma once
+
+#include "base/base_api.h"
+#include "base/native_library.h"
+
+class FilePath;
+
+namespace base {
+
+// A class which encapsulates a base::NativeLibrary object available only in a
+// scope.
+// This class automatically unloads the loaded library in its destructor.
+class BASE_API ScopedNativeLibrary {
+ public:
+ // Initializes with a NULL library.
+ ScopedNativeLibrary();
+
+ // Takes ownership of the given library handle.
+ explicit ScopedNativeLibrary(NativeLibrary library);
+
+ // Opens the given library and manages its lifetime.
+ explicit ScopedNativeLibrary(const FilePath& library_path);
+
+ ~ScopedNativeLibrary();
+
+ // Returns true if there's a valid library loaded.
+ bool is_valid() const { return !!library_; }
+
+ void* GetFunctionPointer(const char* function_name) const;
+
+ // Takes ownership of the given library handle. Any existing handle will
+ // be freed.
+ void Reset(NativeLibrary library);
+
+ // Returns the native library handle and removes it from this object. The
+ // caller must manage the lifetime of the handle.
+ NativeLibrary Release();
+
+ private:
+ NativeLibrary library_;
+
+ DISALLOW_COPY_AND_ASSIGN(ScopedNativeLibrary);
+};
+
+} // namespace base
+
+#endif // BASE_MEMORY_SCOPED_NATIVE_LIBRARY_H_