Index: ppapi/shared_impl/scoped_pp_var.cc |
diff --git a/ppapi/shared_impl/scoped_pp_var.cc b/ppapi/shared_impl/scoped_pp_var.cc |
index f612aa1a2ac765dd0652b53b92c6d86b88b9d548..dc6a178a5ec688a57ddc88b5d9790b73e3f91dcc 100644 |
--- a/ppapi/shared_impl/scoped_pp_var.cc |
+++ b/ppapi/shared_impl/scoped_pp_var.cc |
@@ -4,8 +4,10 @@ |
#include "ppapi/shared_impl/scoped_pp_var.h" |
+#include "ppapi/c/dev/ppb_memory_dev.h" |
#include "ppapi/shared_impl/ppapi_globals.h" |
#include "ppapi/shared_impl/var_tracker.h" |
+#include "ppapi/thunk/thunk.h" |
namespace ppapi { |
@@ -46,4 +48,42 @@ PP_Var ScopedPPVar::Release() { |
return result; |
} |
+ScopedPPVarArray::ScopedPPVarArray(const PassPPBMemoryAllocatedRef&, |
+ PP_Var* array, |
+ size_t size) |
+ : array_(array), |
+ size_(size) {} |
+ |
+ScopedPPVarArray::ScopedPPVarArray(size_t size) |
+ : size_(size) { |
+ if (size > 0) { |
+ array_ = static_cast<PP_Var*>( |
+ thunk::GetPPB_Memory_Dev_0_1_Thunk()->MemAlloc(sizeof(PP_Var) * size)); |
+ } |
+ for (size_t i = 0; i < size_; ++i) |
+ array_[i] = PP_MakeUndefined(); |
+} |
+ |
+ScopedPPVarArray::~ScopedPPVarArray() { |
+ for (size_t i = 0; i < size_; ++i) |
+ CallRelease(array_[i]); |
+ if (size_ > 0) |
+ thunk::GetPPB_Memory_Dev_0_1_Thunk()->MemFree(array_); |
+ |
+} |
+ |
+PP_Var* ScopedPPVarArray::Release(size_t* size) { |
+ PP_Var* result = array_; |
+ *size = size_; |
+ array_ = NULL; |
+ size_ = 0; |
+ return result; |
+} |
+ |
+void ScopedPPVarArray::Set(size_t index, PP_Var var) { |
+ DCHECK(index < size_); |
+ CallRelease(array_[index]); |
+ array_[index] = var; |
+} |
+ |
} // namespace ppapi |