// 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_SCOPED_NATIVE_LIBRARY_H_
#define BASE_SCOPED_NATIVE_LIBRARY_H_

#include "base/base_export.h"
#include "base/macros.h"
#include "base/native_library.h"

#if !defined(STARBOARD)

namespace base {

class FilePath;

// 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_EXPORT 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_; }

  NativeLibrary get() 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  // !defined(STARBOARD)
#endif  // BASE_SCOPED_NATIVE_LIBRARY_H_
