// 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_