blob: 54b9395744f422c7aed54c9ad217626d2d9432e5 [file] [log] [blame]
// 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_VAR_ARRAY_BUFFER_H_
#define PPAPI_CPP_VAR_ARRAY_BUFFER_H_
#include <stdint.h>
#include "ppapi/cpp/var.h"
/// @file
/// This file defines the API for interacting with a JavaScript ArrayBuffer.
namespace pp {
/// <code>VarArrayBuffer</code> provides a way to interact with JavaScript
/// ArrayBuffers, which represent a contiguous sequence of bytes. Note that
/// these vars are not part of the embedding page's DOM, and can only be
/// shared with JavaScript using the <code>PostMessage</code> and
/// <code>HandleMessage</code> functions of <code>Instance</code>.
class VarArrayBuffer : public Var {
public:
/// The default constructor constructs a <code>VarArrayBuffer</code> which is
/// 0 byte long.
VarArrayBuffer();
/// Construct a <code>VarArrayBuffer</code> given a var for which
/// is_array_buffer() is true. This will refer to the same
/// <code>ArrayBuffer</code> as var, but allows you to access methods
/// specific to <code>VarArrayBuffer</code>.
///
/// @param[in] var An <code>ArrayBuffer</code> var.
explicit VarArrayBuffer(const Var& var);
/// Construct a new <code>VarArrayBuffer</code> which is
/// <code>size_in_bytes</code> bytes long and initialized to zero.
///
/// @param[in] size_in_bytes The size of the constructed
/// <code>ArrayBuffer</code> in bytes.
explicit VarArrayBuffer(uint32_t size_in_bytes);
/// Copy constructor.
VarArrayBuffer(const VarArrayBuffer& buffer) : Var(buffer) {}
virtual ~VarArrayBuffer() {}
/// This function assigns one <code>VarArrayBuffer</code> to another
/// <code>VarArrayBuffer</code>.
///
/// @param[in] other The <code>VarArrayBuffer</code> to be assigned.
///
/// @return The resulting <code>VarArrayBuffer</code>.
VarArrayBuffer& operator=(const VarArrayBuffer& other);
/// This function assigns one <code>VarArrayBuffer</code> to another
/// <code>VarArrayBuffer</code>. A Var's assignment operator is overloaded
/// here so that we can check for assigning a non-ArrayBuffer var to a
/// <code>VarArrayBuffer</code>.
///
/// @param[in] other The <code>VarArrayBuffer</code> to be assigned.
///
/// @return The resulting <code>VarArrayBuffer</code> (as a Var&).
virtual Var& operator=(const Var& other);
/// ByteLength() retrieves the length of the <code>VarArrayBuffer</code> in
/// bytes.
///
/// @return The length of the <code>VarArrayBuffer</code> in bytes.
uint32_t ByteLength() const;
/// Map() maps the <code>ArrayBuffer</code> in to the module's address space
/// and returns a pointer to the beginning of the internal buffer for
/// this <code>ArrayBuffer</code>. ArrayBuffers are copied when transmitted,
/// so changes to the underlying memory are not automatically available to
/// the embedding page.
///
/// Note that calling Map() can be a relatively expensive operation. Use care
/// when calling it in performance-critical code. For example, you should call
/// it only once when looping over an <code>ArrayBuffer</code>.
///
/// <strong>Example:</strong>
///
/// @code
/// char* data = static_cast<char*>(array_buffer_var.Map());
/// uint32_t byte_length = array_buffer_var.ByteLength();
/// for (uint32_t i = 0; i < byte_length; ++i)
/// data[i] = 'A';
/// @endcode
///
/// @return A pointer to the internal buffer for this
/// <code>ArrayBuffer</code>.
void* Map();
/// Unmap() unmaps this <code>ArrayBuffer</code> var from the module address
/// space. Use this if you want to save memory but might want to call Map()
/// to map the buffer again later.
void Unmap();
private:
void ConstructWithSize(uint32_t size_in_bytes);
};
} // namespace pp
#endif // PPAPI_CPP_VAR_ARRAY_BUFFER_H_