- add sources.
[platform/framework/web/crosswalk.git] / src / ppapi / cpp / dev / resource_array_dev.h
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef PPAPI_CPP_DEV_RESOURCE_ARRAY_DEV_H_
6 #define PPAPI_CPP_DEV_RESOURCE_ARRAY_DEV_H_
7
8 #include "ppapi/c/pp_array_output.h"
9 #include "ppapi/c/pp_completion_callback.h"
10 #include "ppapi/c/pp_stdint.h"
11 #include "ppapi/cpp/resource.h"
12
13 namespace pp {
14
15 class InstanceHandle;
16
17 class ResourceArray_Dev : public Resource {
18  public:
19   // Heap-allocated data passed to ArrayOutputCallbackConverter(). Please see
20   // the comment of ArrayOutputCallbackConverter() for more details.
21   struct ArrayOutputCallbackData {
22     ArrayOutputCallbackData(const PP_ArrayOutput& array_output,
23                             const PP_CompletionCallback& callback)
24         : resource_array_output(0),
25           output(array_output),
26           original_callback(callback) {
27     }
28
29     PP_Resource resource_array_output;
30     PP_ArrayOutput output;
31     PP_CompletionCallback original_callback;
32   };
33
34   ResourceArray_Dev();
35
36   ResourceArray_Dev(PassRef, PP_Resource resource);
37
38   ResourceArray_Dev(const ResourceArray_Dev& other);
39
40   ResourceArray_Dev(const InstanceHandle& instance,
41                     const PP_Resource elements[],
42                     uint32_t size);
43
44   virtual ~ResourceArray_Dev();
45
46   ResourceArray_Dev& operator=(const ResourceArray_Dev& other);
47
48   uint32_t size() const;
49
50   PP_Resource operator[](uint32_t index) const;
51
52   // This is an adapter for backward compatibility. It works with those APIs
53   // which take a PPB_ResourceArray_Dev resource as output parameter, and
54   // returns results using PP_ArrayOutput. For example:
55   //
56   //   ResourceArray_Dev::ArrayOutputCallbackData* data =
57   //       new ResourceArray_Dev::ArrayOutputCallbackData(
58   //           pp_array_output, callback);
59   //   ppb_foo->Bar(
60   //       foo_resource, &data->resource_array_output,
61   //       PP_MakeCompletionCallback(
62   //           &ResourceArray_Dev::ArrayOutputCallbackConverter, data));
63   //
64   // It takes a heap-allocated ArrayOutputCallbackData struct passed as the user
65   // data, and deletes it when the call completes.
66   static void ArrayOutputCallbackConverter(void* user_data, int32_t result);
67 };
68
69 }  // namespace pp
70
71 #endif  // PPAPI_CPP_DEV_RESOURCE_ARRAY_DEV_H_