
And also fix a few bugs in the PP_ArrayOutput and CallbackWithOutput code. - Make sure POD members of Dispatcher\.* are properly initialized. - Avoid leaking var/resource references in DispatcherWithOutput\.*::operator(). BUG=None TEST=None Review URL: http://codereview.chromium.org/9965080 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@130849 0039d316-1c4b-4281-b951-d872f2087c98
42 lines
1.2 KiB
C++
42 lines
1.2 KiB
C++
// 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.
|
|
|
|
#include "ppapi/cpp/array_output.h"
|
|
|
|
#include "ppapi/cpp/logging.h"
|
|
|
|
namespace pp {
|
|
|
|
// static
|
|
void* ArrayOutputAdapterBase::GetDataBufferThunk(void* user_data,
|
|
uint32_t element_count,
|
|
uint32_t element_size) {
|
|
return static_cast<ArrayOutputAdapterBase*>(user_data)->
|
|
GetDataBuffer(element_count, element_size);
|
|
}
|
|
|
|
VarArrayOutputAdapterWithStorage::VarArrayOutputAdapterWithStorage()
|
|
: ArrayOutputAdapter<PP_Var>() {
|
|
set_output(&temp_storage_);
|
|
}
|
|
|
|
VarArrayOutputAdapterWithStorage::~VarArrayOutputAdapterWithStorage() {
|
|
if (!temp_storage_.empty()) {
|
|
// An easy way to release the var references held by this object.
|
|
output();
|
|
}
|
|
}
|
|
|
|
std::vector<Var>& VarArrayOutputAdapterWithStorage::output() {
|
|
PP_DCHECK(output_storage_.empty());
|
|
|
|
output_storage_.reserve(temp_storage_.size());
|
|
for (size_t i = 0; i < temp_storage_.size(); i++)
|
|
output_storage_.push_back(Var(PASS_REF, temp_storage_[i]));
|
|
temp_storage_.clear();
|
|
return output_storage_;
|
|
}
|
|
|
|
} // namespace pp
|