| // Copyright (c) 2012 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_DEV_RESOURCE_ARRAY_DEV_H_ |
| #define PPAPI_CPP_DEV_RESOURCE_ARRAY_DEV_H_ |
| |
| #include "ppapi/c/pp_array_output.h" |
| #include "ppapi/c/pp_completion_callback.h" |
| #include "ppapi/c/pp_stdint.h" |
| #include "ppapi/cpp/resource.h" |
| |
| namespace pp { |
| |
| class InstanceHandle; |
| |
| class ResourceArray_Dev : public Resource { |
| public: |
| // Heap-allocated data passed to ArrayOutputCallbackConverter(). Please see |
| // the comment of ArrayOutputCallbackConverter() for more details. |
| struct ArrayOutputCallbackData { |
| ArrayOutputCallbackData(const PP_ArrayOutput& array_output, |
| const PP_CompletionCallback& callback) |
| : resource_array_output(0), |
| output(array_output), |
| original_callback(callback) { |
| } |
| |
| PP_Resource resource_array_output; |
| PP_ArrayOutput output; |
| PP_CompletionCallback original_callback; |
| }; |
| |
| ResourceArray_Dev(); |
| |
| ResourceArray_Dev(PassRef, PP_Resource resource); |
| |
| ResourceArray_Dev(const ResourceArray_Dev& other); |
| |
| ResourceArray_Dev(const InstanceHandle& instance, |
| const PP_Resource elements[], |
| uint32_t size); |
| |
| virtual ~ResourceArray_Dev(); |
| |
| ResourceArray_Dev& operator=(const ResourceArray_Dev& other); |
| |
| uint32_t size() const; |
| |
| PP_Resource operator[](uint32_t index) const; |
| |
| // This is an adapter for backward compatibility. It works with those APIs |
| // which take a PPB_ResourceArray_Dev resource as output parameter, and |
| // returns results using PP_ArrayOutput. For example: |
| // |
| // ResourceArray_Dev::ArrayOutputCallbackData* data = |
| // new ResourceArray_Dev::ArrayOutputCallbackData( |
| // pp_array_output, callback); |
| // ppb_foo->Bar( |
| // foo_resource, &data->resource_array_output, |
| // PP_MakeCompletionCallback( |
| // &ResourceArray_Dev::ArrayOutputCallbackConverter, data)); |
| // |
| // It takes a heap-allocated ArrayOutputCallbackData struct passed as the user |
| // data, and deletes it when the call completes. |
| static void ArrayOutputCallbackConverter(void* user_data, int32_t result); |
| }; |
| |
| } // namespace pp |
| |
| #endif // PPAPI_CPP_DEV_RESOURCE_ARRAY_DEV_H_ |