5 #ifndef PPAPI_CPP_ARRAY_OUTPUT_H_
6 #define PPAPI_CPP_ARRAY_OUTPUT_H_
13 #include "ppapi/c/pp_array_output.h"
14 #include "ppapi/c/pp_resource.h"
29 template<
typename ResourceObjectType>
30 inline void ConvertPPResourceArrayToObjects(
32 const std::vector<PP_Resource>& input,
33 std::vector<ResourceObjectType>* output) {
35 output->reserve(input.size());
36 for (
size_t i = 0; i < input.size(); i++)
37 output->push_back(ResourceObjectType(PASS_REF, input[i]));
47 pp_array_output_.GetDataBuffer =
48 &ArrayOutputAdapterBase::GetDataBufferThunk;
49 pp_array_output_.user_data =
this;
53 const PP_ArrayOutput& pp_array_output() {
return pp_array_output_; }
56 virtual void* GetDataBuffer(uint32_t element_count,
57 uint32_t element_size) = 0;
60 static void* GetDataBufferThunk(
void* user_data,
61 uint32_t element_count,
62 uint32_t element_size);
64 PP_ArrayOutput pp_array_output_;
94 void set_output(std::vector<T>* output) { output_ = output; }
97 virtual void* GetDataBuffer(uint32_t element_count, uint32_t element_size) {
98 if (element_count == 0)
101 if (element_size !=
sizeof(T))
103 output_->resize(element_count);
104 return &(*output_)[0];
108 std::vector<T>* output_;
137 ConvertPPResourceArrayToObjects(PASS_REF, intermediate_output_, output_);
143 void set_output(T* output) { output_ = output; }
146 virtual void* GetDataBuffer(uint32_t element_count,
147 uint32_t element_size) {
148 if (element_count == 0)
150 PP_DCHECK(element_size ==
sizeof(PP_Resource));
151 if (element_size !=
sizeof(PP_Resource))
153 intermediate_output_.resize(element_count);
154 return &intermediate_output_[0];
158 std::vector<PP_Resource> intermediate_output_;
159 std::vector<T>* output_;
182 this->set_output(&output_storage_);
185 std::vector<T>& output() {
return output_storage_; }
188 std::vector<T> output_storage_;
214 std::vector<Var>& output();
218 std::vector<PP_Var> temp_storage_;
222 std::vector<Var> output_storage_;
241 set_output(&temp_storage_);
245 if (!temp_storage_.empty()) {
256 std::vector<T>& output() {
259 ConvertPPResourceArrayToObjects(PASS_REF, temp_storage_, &output_storage_);
260 temp_storage_.clear();
261 return output_storage_;
266 std::vector<PP_Resource> temp_storage_;
270 std::vector<T> output_storage_;
275 #endif // PPAPI_CPP_ARRAY_OUTPUT_H_
Definition: array_output.h:237
#define PP_DCHECK(a)
Definition: logging.h:16
Definition: array_output.h:44
Definition: array_output.h:87
Definition: array_output.h:204
PassRef
Definition: pass_ref.h:17
Definition: array_output.h:130
Definition: array_output.h:179