You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
262 lines
8.3 KiB
262 lines
8.3 KiB
9 years ago
|
/* 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.
|
||
|
*/
|
||
|
|
||
|
/* From pp_var.idl modified Thu Apr 10 14:52:30 2014. */
|
||
|
|
||
|
#ifndef PPAPI_C_PP_VAR_H_
|
||
|
#define PPAPI_C_PP_VAR_H_
|
||
|
|
||
|
#include "pp_bool.h"
|
||
|
#include "pp_macros.h"
|
||
|
#include "pp_stdint.h"
|
||
|
|
||
|
/**
|
||
|
* @file
|
||
|
* This file defines the API for handling the passing of data types between
|
||
|
* your module and the page.
|
||
|
*/
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @addtogroup Enums
|
||
|
* @{
|
||
|
*/
|
||
|
/**
|
||
|
* The <code>PP_VarType</code> is an enumeration of the different types that
|
||
|
* can be contained within a <code>PP_Var</code> structure.
|
||
|
*/
|
||
|
typedef enum {
|
||
|
/**
|
||
|
* An undefined value.
|
||
|
*/
|
||
|
PP_VARTYPE_UNDEFINED = 0,
|
||
|
/**
|
||
|
* A NULL value. This is similar to undefined, but JavaScript differentiates
|
||
|
* the two so it is exposed here as well.
|
||
|
*/
|
||
|
PP_VARTYPE_NULL = 1,
|
||
|
/**
|
||
|
* A boolean value, use the <code>as_bool</code> member of the var.
|
||
|
*/
|
||
|
PP_VARTYPE_BOOL = 2,
|
||
|
/**
|
||
|
* A 32-bit integer value. Use the <code>as_int</code> member of the var.
|
||
|
*/
|
||
|
PP_VARTYPE_INT32 = 3,
|
||
|
/**
|
||
|
* A double-precision floating point value. Use the <code>as_double</code>
|
||
|
* member of the var.
|
||
|
*/
|
||
|
PP_VARTYPE_DOUBLE = 4,
|
||
|
/**
|
||
|
* The Var represents a string. The <code>as_id</code> field is used to
|
||
|
* identify the string, which may be created and retrieved from the
|
||
|
* <code>PPB_Var</code> interface. These objects are reference counted, so
|
||
|
* AddRef() and Release() must be used properly to avoid memory leaks.
|
||
|
*/
|
||
|
PP_VARTYPE_STRING = 5,
|
||
|
/**
|
||
|
* Represents a JavaScript object. This vartype is not currently usable
|
||
|
* from modules, although it is used internally for some tasks. These objects
|
||
|
* are reference counted, so AddRef() and Release() must be used properly to
|
||
|
* avoid memory leaks.
|
||
|
*/
|
||
|
PP_VARTYPE_OBJECT = 6,
|
||
|
/**
|
||
|
* Represents an array of Vars. The <code>as_id</code> field is used to
|
||
|
* identify the array, which may be created and manipulated from the
|
||
|
* <code>PPB_VarArray</code> interface. These objects are reference counted,
|
||
|
* so AddRef() and Release() must be used properly to avoid memory leaks.
|
||
|
*/
|
||
|
PP_VARTYPE_ARRAY = 7,
|
||
|
/**
|
||
|
* Represents a mapping from strings to Vars. The <code>as_id</code> field is
|
||
|
* used to identify the dictionary, which may be created and manipulated from
|
||
|
* the <code>PPB_VarDictionary</code> interface. These objects are reference
|
||
|
* counted, so AddRef() and Release() must be used properly to avoid memory
|
||
|
* leaks.
|
||
|
*/
|
||
|
PP_VARTYPE_DICTIONARY = 8,
|
||
|
/**
|
||
|
* ArrayBuffer represents a JavaScript ArrayBuffer. This is the type which
|
||
|
* represents Typed Arrays in JavaScript. Unlike JavaScript 'Array', it is
|
||
|
* only meant to contain basic numeric types, and is always stored
|
||
|
* contiguously. See PPB_VarArrayBuffer_Dev for functions special to
|
||
|
* ArrayBuffer vars. These objects are reference counted, so AddRef() and
|
||
|
* Release() must be used properly to avoid memory leaks.
|
||
|
*/
|
||
|
PP_VARTYPE_ARRAY_BUFFER = 9,
|
||
|
/**
|
||
|
* This type allows the <code>PP_Var</code> to wrap a <code>PP_Resource
|
||
|
* </code>. This can be useful for sending or receiving some types of
|
||
|
* <code>PP_Resource</code> using <code>PPB_Messaging</code> or
|
||
|
* <code>PPP_Messaging</code>.
|
||
|
*
|
||
|
* These objects are reference counted, so AddRef() and Release() must be used
|
||
|
* properly to avoid memory leaks. Under normal circumstances, the
|
||
|
* <code>PP_Var</code> will implicitly hold a reference count on the
|
||
|
* <code>PP_Resource</code> on your behalf. For example, if you call
|
||
|
* VarFromResource(), it implicitly calls PPB_Core::AddRefResource() on the
|
||
|
* <code>PP_Resource</code>. Likewise, PPB_Var::Release() on a Resource
|
||
|
* <code>PP_Var</code> will invoke PPB_Core::ReleaseResource() when the Var
|
||
|
* reference count goes to zero.
|
||
|
*/
|
||
|
PP_VARTYPE_RESOURCE = 10
|
||
|
} PP_VarType;
|
||
|
PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_VarType, 4);
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @addtogroup Structs
|
||
|
* @{
|
||
|
*/
|
||
|
/**
|
||
|
* The PP_VarValue union stores the data for any one of the types listed
|
||
|
* in the PP_VarType enum.
|
||
|
*/
|
||
|
union PP_VarValue {
|
||
|
/**
|
||
|
* If <code>type</code> is <code>PP_VARTYPE_BOOL</code>,
|
||
|
* <code>as_bool</code> represents the value of this <code>PP_Var</code> as
|
||
|
* <code>PP_Bool</code>.
|
||
|
*/
|
||
|
PP_Bool as_bool;
|
||
|
/**
|
||
|
* If <code>type</code> is <code>PP_VARTYPE_INT32</code>,
|
||
|
* <code>as_int</code> represents the value of this <code>PP_Var</code> as
|
||
|
* <code>int32_t</code>.
|
||
|
*/
|
||
|
int32_t as_int;
|
||
|
/**
|
||
|
* If <code>type</code> is <code>PP_VARTYPE_DOUBLE</code>,
|
||
|
* <code>as_double</code> represents the value of this <code>PP_Var</code>
|
||
|
* as <code>double</code>.
|
||
|
*/
|
||
|
double as_double;
|
||
|
/**
|
||
|
* If <code>type</code> is <code>PP_VARTYPE_STRING</code>,
|
||
|
* <code>PP_VARTYPE_OBJECT</code>, <code>PP_VARTYPE_ARRAY</code>,
|
||
|
* <code>PP_VARTYPE_DICTIONARY</code>, <code>PP_VARTYPE_ARRAY_BUFFER</code>,
|
||
|
* or <code>PP_VARTYPE_RESOURCE</code>, <code>as_id</code> represents the
|
||
|
* value of this <code>PP_Var</code> as an opaque handle assigned by the
|
||
|
* browser. This handle is guaranteed never to be 0, so a module can
|
||
|
* initialize this ID to 0 to indicate a "NULL handle."
|
||
|
*/
|
||
|
int64_t as_id;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* The <code>PP_VAR</code> struct is a variant data type and can contain any
|
||
|
* value of one of the types named in the <code>PP_VarType</code> enum. This
|
||
|
* structure is for passing data between native code which can be strongly
|
||
|
* typed and the browser (JavaScript) which isn't strongly typed.
|
||
|
*
|
||
|
* JavaScript has a "number" type for holding a number, and does not
|
||
|
* differentiate between floating point and integer numbers. The
|
||
|
* JavaScript operations will try to optimize operations by using
|
||
|
* integers when possible, but could end up with doubles. Therefore,
|
||
|
* you can't assume a numeric <code>PP_Var</code> will be the type you expect.
|
||
|
* Your code should be capable of handling either int32_t or double for numeric
|
||
|
* PP_Vars sent from JavaScript.
|
||
|
*/
|
||
|
struct PP_Var {
|
||
|
PP_VarType type;
|
||
|
/**
|
||
|
* The <code>padding</code> ensures <code>value</code> is aligned on an
|
||
|
* 8-byte boundary relative to the start of the struct. Some compilers
|
||
|
* align doubles on 8-byte boundaries for 32-bit x86, and some align on
|
||
|
* 4-byte boundaries.
|
||
|
*/
|
||
|
int32_t padding;
|
||
|
/**
|
||
|
* This <code>value</code> represents the contents of the PP_Var. Only one of
|
||
|
* the fields of <code>value</code> is valid at a time based upon
|
||
|
* <code>type</code>.
|
||
|
*/
|
||
|
union PP_VarValue value;
|
||
|
};
|
||
|
PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_Var, 16);
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @addtogroup Functions
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* PP_MakeUndefined() is used to wrap an undefined value into a
|
||
|
* <code>PP_Var</code> struct for passing to the browser.
|
||
|
*
|
||
|
* @return A <code>PP_Var</code> structure.
|
||
|
*/
|
||
|
PP_INLINE struct PP_Var PP_MakeUndefined(void) {
|
||
|
struct PP_Var result = { PP_VARTYPE_UNDEFINED, 0, {PP_FALSE} };
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* PP_MakeNull() is used to wrap a null value into a
|
||
|
* <code>PP_Var</code> struct for passing to the browser.
|
||
|
*
|
||
|
* @return A <code>PP_Var</code> structure,
|
||
|
*/
|
||
|
PP_INLINE struct PP_Var PP_MakeNull(void) {
|
||
|
struct PP_Var result = { PP_VARTYPE_NULL, 0, {PP_FALSE} };
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* PP_MakeBool() is used to wrap a boolean value into a
|
||
|
* <code>PP_Var</code> struct for passing to the browser.
|
||
|
*
|
||
|
* @param[in] value A <code>PP_Bool</code> enumeration to
|
||
|
* wrap.
|
||
|
*
|
||
|
* @return A <code>PP_Var</code> structure.
|
||
|
*/
|
||
|
PP_INLINE struct PP_Var PP_MakeBool(PP_Bool value) {
|
||
|
struct PP_Var result = { PP_VARTYPE_BOOL, 0, {PP_FALSE} };
|
||
|
result.value.as_bool = value;
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* PP_MakeInt32() is used to wrap a 32 bit integer value
|
||
|
* into a <code>PP_Var</code> struct for passing to the browser.
|
||
|
*
|
||
|
* @param[in] value An int32 to wrap.
|
||
|
*
|
||
|
* @return A <code>PP_Var</code> structure.
|
||
|
*/
|
||
|
PP_INLINE struct PP_Var PP_MakeInt32(int32_t value) {
|
||
|
struct PP_Var result = { PP_VARTYPE_INT32, 0, {PP_FALSE} };
|
||
|
result.value.as_int = value;
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* PP_MakeDouble() is used to wrap a double value into a
|
||
|
* <code>PP_Var</code> struct for passing to the browser.
|
||
|
*
|
||
|
* @param[in] value A double to wrap.
|
||
|
*
|
||
|
* @return A <code>PP_Var</code> structure.
|
||
|
*/
|
||
|
PP_INLINE struct PP_Var PP_MakeDouble(double value) {
|
||
|
struct PP_Var result = { PP_VARTYPE_DOUBLE, 0, {PP_FALSE} };
|
||
|
result.value.as_double = value;
|
||
|
return result;
|
||
|
}
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
#endif /* PPAPI_C_PP_VAR_H_ */
|
||
|
|