| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef PPAPI_CPP_ARRAY_OUTPUT_H_ | 5 #ifndef PPAPI_CPP_ARRAY_OUTPUT_H_ |
| 6 #define PPAPI_CPP_ARRAY_OUTPUT_H_ | 6 #define PPAPI_CPP_ARRAY_OUTPUT_H_ |
| 7 | 7 |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "ppapi/c/pp_array_output.h" | 10 #include "ppapi/c/pp_array_output.h" |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 // writing PP_Vars, do this: | 194 // writing PP_Vars, do this: |
| 195 // | 195 // |
| 196 // VarArrayOutputAdapterWithStorage adapter; | 196 // VarArrayOutputAdapterWithStorage adapter; |
| 197 // ppb_foo->GetVars(adapter.pp_output_array()); | 197 // ppb_foo->GetVars(adapter.pp_output_array()); |
| 198 // const std::vector<pp::Var>& result = adapter.output(). | 198 // const std::vector<pp::Var>& result = adapter.output(). |
| 199 // | 199 // |
| 200 // This one is non-inline since it's not templatized. | 200 // This one is non-inline since it's not templatized. |
| 201 class VarArrayOutputAdapterWithStorage : public ArrayOutputAdapter<PP_Var> { | 201 class VarArrayOutputAdapterWithStorage : public ArrayOutputAdapter<PP_Var> { |
| 202 public: | 202 public: |
| 203 VarArrayOutputAdapterWithStorage(); | 203 VarArrayOutputAdapterWithStorage(); |
| 204 virtual ~VarArrayOutputAdapterWithStorage(); |
| 204 | 205 |
| 205 // Returns the final array of resource objects, converting the PP_Vars | 206 // Returns the final array of resource objects, converting the PP_Vars |
| 206 // written by the browser to pp::Var objects. | 207 // written by the browser to pp::Var objects. |
| 207 // | 208 // |
| 208 // This function should only be called once or we would end up converting | 209 // This function should only be called once or we would end up converting |
| 209 // the array more than once, which would mess up the refcounting. | 210 // the array more than once, which would mess up the refcounting. |
| 210 std::vector<Var>& output(); | 211 std::vector<Var>& output(); |
| 211 | 212 |
| 212 private: | 213 private: |
| 213 // The browser will write the PP_Vars into this array. | 214 // The browser will write the PP_Vars into this array. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 230 // ppb_foo->GetFiles(adapter.pp_output_array()); | 231 // ppb_foo->GetFiles(adapter.pp_output_array()); |
| 231 // std::vector<FileRef> result = adapter.output(). | 232 // std::vector<FileRef> result = adapter.output(). |
| 232 template<typename T> | 233 template<typename T> |
| 233 class ResourceArrayOutputAdapterWithStorage | 234 class ResourceArrayOutputAdapterWithStorage |
| 234 : public ArrayOutputAdapter<PP_Resource> { | 235 : public ArrayOutputAdapter<PP_Resource> { |
| 235 public: | 236 public: |
| 236 ResourceArrayOutputAdapterWithStorage() { | 237 ResourceArrayOutputAdapterWithStorage() { |
| 237 set_output(&temp_storage_); | 238 set_output(&temp_storage_); |
| 238 } | 239 } |
| 239 | 240 |
| 241 virtual ~ResourceArrayOutputAdapterWithStorage() { |
| 242 if (!temp_storage_.empty()) { |
| 243 // An easy way to release the resource references held by this object. |
| 244 output(); |
| 245 } |
| 246 } |
| 247 |
| 240 // Returns the final array of resource objects, converting the PP_Resources | 248 // Returns the final array of resource objects, converting the PP_Resources |
| 241 // written by the browser to resource objects. | 249 // written by the browser to resource objects. |
| 242 // | 250 // |
| 243 // This function should only be called once or we would end up converting | 251 // This function should only be called once or we would end up converting |
| 244 // the array more than once, which would mess up the refcounting. | 252 // the array more than once, which would mess up the refcounting. |
| 245 std::vector<T>& output() { | 253 std::vector<T>& output() { |
| 246 PP_DCHECK(output_storage_.empty()); | 254 PP_DCHECK(output_storage_.empty()); |
| 247 | 255 |
| 248 ConvertPPResourceArrayToObjects(PASS_REF, temp_storage_, &output_storage_); | 256 ConvertPPResourceArrayToObjects(PASS_REF, temp_storage_, &output_storage_); |
| 249 temp_storage_.clear(); | 257 temp_storage_.clear(); |
| 250 return output_storage_; | 258 return output_storage_; |
| 251 } | 259 } |
| 252 | 260 |
| 253 private: | 261 private: |
| 254 // The browser will write the PP_Resources into this array. | 262 // The browser will write the PP_Resources into this array. |
| 255 std::vector<PP_Resource> temp_storage_; | 263 std::vector<PP_Resource> temp_storage_; |
| 256 | 264 |
| 257 // When asked for the output, the resources above will be converted to the | 265 // When asked for the output, the resources above will be converted to the |
| 258 // C++ resource objects in this array for passing to the calling code. | 266 // C++ resource objects in this array for passing to the calling code. |
| 259 std::vector<T> output_storage_; | 267 std::vector<T> output_storage_; |
| 260 }; | 268 }; |
| 261 | 269 |
| 262 } // namespace pp | 270 } // namespace pp |
| 263 | 271 |
| 264 #endif // PPAPI_CPP_ARRAY_OUTPUT_H_ | 272 #endif // PPAPI_CPP_ARRAY_OUTPUT_H_ |
| OLD | NEW |