| // 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 PPAPI_CPP_RESOURCE_H_ |
| #define PPAPI_CPP_RESOURCE_H_ |
| |
| #include "ppapi/c/pp_resource.h" |
| #include "ppapi/cpp/instance_handle.h" |
| #include "ppapi/cpp/pass_ref.h" |
| |
| /// @file |
| /// This file defines a <code>Resource</code> type representing data associated |
| /// with the module. |
| namespace pp { |
| |
| class Var; |
| |
| /// A reference counted module resource. |
| class Resource { |
| public: |
| /// The default constructor. |
| Resource(); |
| |
| /// A constructor for copying a resource. |
| /// |
| /// @param[in] other A <code>Resource</code>. |
| Resource(const Resource& other); |
| |
| /// Destructor. |
| virtual ~Resource(); |
| |
| /// This function assigns one <code>Resource</code> to another |
| /// <code>Resource</code>. |
| /// |
| /// @param[in] other A Resource. |
| /// |
| /// @return A Resource containing the assigned Resource. |
| Resource& operator=(const Resource& other); |
| |
| /// This functions determines if this resource is invalid or |
| /// uninitialized. |
| /// |
| /// @return true if this resource is invalid or uninitialized. |
| bool is_null() const { return !pp_resource_; } |
| |
| PP_Resource pp_resource() const { return pp_resource_; } |
| |
| /// This function releases ownership of this resource and returns it to the |
| /// caller. |
| /// |
| /// Note that the reference count on the resource is unchanged and the caller |
| /// needs to release the resource. |
| /// |
| /// @return The detached <code>PP_Resource</code>. |
| PP_Resource detach(); |
| |
| protected: |
| /// A constructor used when a <code>PP_Resource</code> is provided as a |
| /// return value whose reference count we need to increment. |
| /// |
| /// @param[in] resource A <code>PP_Resource</code> corresponding to a |
| /// resource. |
| explicit Resource(PP_Resource resource); |
| |
| /// Constructor used when a <code>PP_Resource</code> already has a ref count |
| /// assigned. Add additional refcount is not taken. |
| Resource(PassRef, PP_Resource resource); |
| |
| /// PassRefFromConstructor is called by derived class' constructors to |
| /// initialize this <code>Resource</code> with a <code>PP_Resource</code> |
| /// that has already had its reference count incremented by |
| /// <code>Core::AddRefResource</code>. It also assumes this object has no |
| /// current resource. |
| /// |
| /// The intended usage of this function that the derived class constructor |
| /// will call the default <code>Resource</code> constructor, then make a call |
| /// to create a resource. It then wants to assign the new resource (which, |
| /// since it was returned by the browser, already had its reference count |
| /// increased). |
| /// |
| /// @param[in] resource A <code>PP_Resource</code> corresponding to a |
| /// resource. |
| void PassRefFromConstructor(PP_Resource resource); |
| |
| /// Sets this resource to null. This releases ownership of the resource. |
| void Clear(); |
| |
| private: |
| friend class Var; |
| |
| PP_Resource pp_resource_; |
| }; |
| |
| } // namespace pp |
| |
| inline bool operator==(const pp::Resource& lhs, const pp::Resource& rhs) { |
| return lhs.pp_resource() == rhs.pp_resource(); |
| } |
| |
| inline bool operator!=(const pp::Resource& lhs, const pp::Resource& rhs) { |
| return !(lhs == rhs); |
| } |
| |
| #endif // PPAPI_CPP_RESOURCE_H_ |