You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by jr...@apache.org on 2018/03/20 18:33:42 UTC
[7/9] qpid-proton git commit: PROTON-1799: Remove deprecated bindings
and APIs
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/proton-c/bindings/javascript/data.js
----------------------------------------------------------------------
diff --git a/proton-c/bindings/javascript/data.js b/proton-c/bindings/javascript/data.js
deleted file mode 100644
index 05e537b..0000000
--- a/proton-c/bindings/javascript/data.js
+++ /dev/null
@@ -1,1582 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-/*****************************************************************************/
-/* */
-/* Data */
-/* */
-/*****************************************************************************/
-
-/**
- * Constructs a proton.Data instance.
- * @classdesc
- * The Data class provides an interface for decoding, extracting, creating, and
- * encoding arbitrary AMQP data. A Data object contains a tree of AMQP values.
- * Leaf nodes in this tree correspond to scalars in the AMQP type system such as
- * ints<INT> or strings<STRING>. Non-leaf nodes in this tree correspond to compound
- * values in the AMQP type system such as lists<LIST>, maps<MAP>, arrays<ARRAY>,
- * or described values<DESCRIBED>. The root node of the tree is the Data object
- * itself and can have an arbitrary number of children.
- * <p>
- * A Data object maintains the notion of the current sibling node and a current
- * parent node. Siblings are ordered within their parent. Values are accessed
- * and/or added by using the next, prev, enter, and exit methods to navigate to
- * the desired location in the tree and using the supplied variety of put* and
- * get* methods to access or add a value of the desired type.
- * <p>
- * The put* methods will always add a value after the current node in the tree.
- * If the current node has a next sibling the put* method will overwrite the value
- * on this node. If there is no current node or the current node has no next
- * sibling then one will be added. The put* methods always set the added/modified
- * node to the current node. The get* methods read the value of the current node
- * and do not change which node is current.
- * @constructor proton.Data
- * @param {number} data an optional pointer to a pn_data_t instance. If supplied
- * the underlying data is "owned" by another object (for example a Message)
- * and that object is assumed to be responsible for freeing the data if
- * necessary. If no data is supplied then the Data is stand-alone and the
- * client application is responsible for freeing the underlying data via
- * a call to free().
- * @param {boolean} decodeBinaryAsString if set decode any AMQP Binary payload
- * objects as strings. This can be useful as the data in Binary objects
- * will be overwritten with subsequent calls to get, so they must be
- * explicitly copied. Needless to say it is only safe to set this flag if
- * you know that the data you are dealing with is actually a string, for
- * example C/C++ applications often seem to encode strings as AMQP binary,
- * a common cause of interoperability problems.
- */
-Module['Data'] = function(data, decodeBinaryAsString) { // Data Constructor.
- if (!data) {
- this._data = _pn_data(16); // Default capacity is 16
- this['free'] = function() {
- _pn_data_free(this._data);
- // Set free to a null function to prevent possibility of a "double free".
- this['free'] = function() {};
- };
- } else {
- this._data = data;
- this['free'] = function() {};
- }
- this._decodeBinaryAsString = decodeBinaryAsString;
-};
-
-// Expose constructor as package scope variable to make internal calls less verbose.
-var Data = Module['Data'];
-
-// Expose prototype as a variable to make method declarations less verbose.
-var _Data_ = Data.prototype;
-
-// ************************** Class properties ********************************
-
-Data['NULL'] = 1;
-Data['BOOL'] = 2;
-Data['UBYTE'] = 3;
-Data['BYTE'] = 4;
-Data['USHORT'] = 5;
-Data['SHORT'] = 6;
-Data['UINT'] = 7;
-Data['INT'] = 8;
-Data['CHAR'] = 9;
-Data['ULONG'] = 10;
-Data['LONG'] = 11;
-Data['TIMESTAMP'] = 12;
-Data['FLOAT'] = 13;
-Data['DOUBLE'] = 14;
-Data['DECIMAL32'] = 15;
-Data['DECIMAL64'] = 16;
-Data['DECIMAL128'] = 17;
-Data['UUID'] = 18;
-Data['BINARY'] = 19;
-Data['STRING'] = 20;
-Data['SYMBOL'] = 21;
-Data['DESCRIBED'] = 22;
-Data['ARRAY'] = 23;
-Data['LIST'] = 24;
-Data['MAP'] = 25;
-
-/**
- * Look-up table mapping proton-c types to the accessor method used to
- * deserialise the type. N.B. this is a simple Array and not a map because the
- * types that we get back from pn_data_type are integers from the pn_type_t enum.
- * @property {Array<String>} TypeNames ['NULL', 'NULL', 'BOOL', 'UBYTE', 'BYTE',
- * 'USHORT', 'SHORT', 'UINT', 'INT', 'CHAR', 'ULONG', 'LONG', 'TIMESTAMP',
- * 'FLOAT', 'DOUBLE', 'DECIMAL32', 'DECIMAL64', 'DECIMAL128', 'UUID',
- * 'BINARY', 'STRING', 'SYMBOL', 'DESCRIBED', 'ARRAY', 'LIST', 'MAP']
- * @memberof! proton.Data
- */
-Data['TypeNames'] = [
- 'NULL', // 0
- 'NULL', // PN_NULL = 1
- 'BOOL', // PN_BOOL = 2
- 'UBYTE', // PN_UBYTE = 3
- 'BYTE', // PN_BYTE = 4
- 'USHORT', // PN_USHORT = 5
- 'SHORT', // PN_SHORT = 6
- 'UINT', // PN_UINT = 7
- 'INT', // PN_INT = 8
- 'CHAR', // PN_CHAR = 9
- 'ULONG', // PN_ULONG = 10
- 'LONG', // PN_LONG = 11
- 'TIMESTAMP', // PN_TIMESTAMP = 12
- 'FLOAT', // PN_FLOAT = 13
- 'DOUBLE', // PN_DOUBLE = 14
- 'DECIMAL32', // PN_DECIMAL32 = 15
- 'DECIMAL64', // PN_DECIMAL64 = 16
- 'DECIMAL128', // PN_DECIMAL128 = 17
- 'UUID', // PN_UUID = 18
- 'BINARY', // PN_BINARY = 19
- 'STRING', // PN_STRING = 20
- 'SYMBOL', // PN_SYMBOL = 21
- 'DESCRIBED', // PN_DESCRIBED = 22
- 'ARRAY', // PN_ARRAY = 23
- 'LIST', // PN_LIST = 24
- 'MAP' // PN_MAP = 25
-];
-
-// *************************** Class methods **********************************
-
-/**
- * Test if a given Object is a JavaScript Array.
- * @method isArray
- * @memberof! proton.Data
- * @param {object} o the Object that we wish to test.
- * @returns {boolean} true iff the Object is a JavaScript Array.
- */
-Data.isArray = Array.isArray || function(o) {
- return Object.prototype.toString.call(o) === '[object Array]';
-};
-
-/**
- * Test if a given Object is a JavaScript Number.
- * @method isNumber
- * @memberof! proton.Data
- * @param {object} o the Object that we wish to test.
- * @returns {boolean} true iff the Object is a JavaScript Number.
- */
-Data.isNumber = function(o) {
- return typeof o === 'number' ||
- (typeof o === 'object' && Object.prototype.toString.call(o) === '[object Number]');
-};
-
-/**
- * Test if a given Object is a JavaScript String.
- * @method isString
- * @memberof! proton.Data
- * @param {object} o the Object that we wish to test.
- * @returns {boolean} true iff the Object is a JavaScript String.
- */
-Data.isString = function(o) {
- return typeof o === 'string' ||
- (typeof o === 'object' && Object.prototype.toString.call(o) === '[object String]');
-};
-
-/**
- * Test if a given Object is a JavaScript Boolean.
- * @method isBoolean
- * @memberof! proton.Data
- * @param {object} o the Object that we wish to test.
- * @returns {boolean} true iff the Object is a JavaScript Boolean.
- */
-Data.isBoolean = function(o) {
- return typeof o === 'boolean' ||
- (typeof o === 'object' && Object.prototype.toString.call(o) === '[object Boolean]');
-};
-
-
-// ************************* Protected methods ********************************
-
-// We use the dot notation rather than associative array form for protected
-// methods so they are visible to this "package", but the Closure compiler will
-// minify and obfuscate names, effectively making a de facto "protected" method.
-
-/**
- * This helper method checks the supplied error code, converts it into an
- * exception and throws the exception. This method will try to use the message
- * populated in pn_data_error(), if present, but if not it will fall
- * back to using the basic error code rendering from pn_code().
- * @param code the error code to check.
- */
-_Data_._check = function(code) {
- if (code < 0) {
- var errno = this['getErrno']();
- var message = errno ? this['getError']() : Pointer_stringify(_pn_code(code));
-
- throw new Module['DataError'](message);
- } else {
- return code;
- }
-};
-
-
-// *************************** Public methods *********************************
-
-/**
- * @method getErrno
- * @memberof! proton.Data#
- * @returns {number} the most recent error message code.
- */
-_Data_['getErrno'] = function() {
- return _pn_data_errno(this._data);
-};
-
-/**
- * @method getError
- * @memberof! proton.Data#
- * @returns {string} the most recent error message as a String.
- */
-_Data_['getError'] = function() {
- return Pointer_stringify(_pn_error_text(_pn_data_error(this._data)));
-};
-
-/**
- * Clears the data object.
- * @method clear
- * @memberof! proton.Data#
- */
-_Data_['clear'] = function() {
- _pn_data_clear(this._data);
-};
-
-/**
- * Clears current node and sets the parent to the root node. Clearing the current
- * node sets it _before_ the first node, calling next() will advance to the first node.
- * @method rewind
- * @memberof! proton.Data#
- */
-_Data_['rewind'] = function() {
- _pn_data_rewind(this._data);
-};
-
-/**
- * Advances the current node to its next sibling and returns its type. If there
- * is no next sibling the current node remains unchanged and null is returned.
- * @method next
- * @memberof! proton.Data#
- * @returns {number} the type of the next sibling or null.
- */
-_Data_['next'] = function() {
- var found = _pn_data_next(this._data);
- if (found) {
- return this.type();
- } else {
- return null;
- }
-};
-
-/**
- * Advances the current node to its previous sibling and returns its type. If there
- * is no previous sibling the current node remains unchanged and null is returned.
- * @method prev
- * @memberof! proton.Data#
- * @returns {number} the type of the previous sibling or null.
- */
-_Data_['prev'] = function() {
- var found = _pn_data_prev(this._data);
- if (found) {
- return this.type();
- } else {
- return null;
- }
-};
-
-/**
- * Sets the parent node to the current node and clears the current node. Clearing
- * the current node sets it _before_ the first child, next() advances to the first child.
- * @method enter
- * @memberof! proton.Data#
- */
-_Data_['enter'] = function() {
- return (_pn_data_enter(this._data) > 0);
-};
-
-/**
- * Sets the current node to the parent node and the parent node to its own parent.
- * @method exit
- * @memberof! proton.Data#
- */
-_Data_['exit'] = function() {
- return (_pn_data_exit(this._data) > 0);
-};
-
-/**
- * Look up a value by name. N.B. Need to use getObject() to retrieve the actual
- * value after lookup succeeds.
- * @method lookup
- * @memberof! proton.Data#
- * @param {string} name the name of the property to look up.
- * @returns {boolean} true iff the lookup succeeded.
- */
-_Data_['lookup'] = function(name) {
- var sp = Runtime.stackSave();
- var lookup = _pn_data_lookup(this._data, allocate(intArrayFromString(name), 'i8', ALLOC_STACK));
- Runtime.stackRestore(sp);
- return (lookup > 0);
-};
-
-// TODO document - not quite sure what these are for?
-_Data_['narrow'] = function() {
- _pn_data_narrow(this._data);
-};
-
-_Data_['widen'] = function() {
- _pn_data_widen(this._data);
-};
-
-/**
- * @method type
- * @memberof! proton.Data#
- * @returns {number} the type of the current node or null if the type is unknown.
- */
-_Data_['type'] = function() {
- var dtype = _pn_data_type(this._data);
- if (dtype === -1) {
- return null;
- } else {
- return dtype;
- }
-};
-
-/**
- * Return a Binary representation of the data encoded in AMQP format. N.B. the
- * returned {@link proton.Data.Binary} "owns" the underlying raw data and is thus
- * responsible for freeing it or passing it to a method that consumes a Binary
- * such as {@link proton.Data.decode} or {@link proton.Data.putBINARY}.
- * @method encode
- * @memberof! proton.Data#
- * @returns {proton.Data.Binary} a representation of the data encoded in AMQP format.
- */
-_Data_['encode'] = function() {
- var size = 1024;
- while (true) {
- var bytes = _malloc(size); // Allocate storage from emscripten heap.
- var cd = _pn_data_encode(this._data, bytes, size);
-
- if (cd === Module['Error']['OVERFLOW']) {
- _free(bytes);
- size *= 2;
- } else if (cd >= 0) {
- return new Data['Binary'](cd, bytes);
- } else {
- _free(bytes);
- this._check(cd);
- return;
- }
- }
-};
-
-/**
- * Decodes the first value from supplied Binary AMQP data and returns a new
- * {@link proton.Data.Binary} containing the remainder of the data or null if
- * all the supplied data has been consumed. N.B. this method "consumes" data
- * from a {@link proton.Data.Binary} in other words it takes responsibility for
- * the underlying data and frees the raw data from the Binary.
- * @method decode
- * @memberof! proton.Data#
- * @param {proton.Data.Binary} encoded the AMQP encoded binary data.
- * @returns {proton.Data.Binary} a Binary containing the remaining bytes or null
- * if all the data has been consumed.
- */
-_Data_['decode'] = function(encoded) {
- var start = encoded.start;
- var size = encoded.size;
- var consumed = this._check(_pn_data_decode(this._data, start, size));
-
- size = size - consumed;
- start = _malloc(size); // Allocate storage from emscripten heap.
- _memcpy(start, encoded.start + consumed, size);
-
- encoded['free'](); // Free the original Binary.
- return size > 0 ? new Data['Binary'](size, start) : null;
-};
-
-/**
- * Puts a list node. Elements may be filled by entering the list
- * node and putting element values.
- * <pre>
- * var data = new proton.Data();
- * data.putLISTNODE();
- * data.enter();
- * data.putINT(1);
- * data.putINT(2);
- * data.putINT(3);
- * data.exit();
- * </pre>
- * @method putLISTNODE
- * @memberof! proton.Data#
- */
-_Data_['putLISTNODE'] = function() {
- this._check(_pn_data_put_list(this._data));
-};
-
-/**
- * Puts a map node. Elements may be filled by entering the map node
- * and putting alternating key value pairs.
- * <pre>
- * var data = new proton.Data();
- * data.putMAPNODE();
- * data.enter();
- * data.putSTRING('key');
- * data.putSTRING('value');
- * data.exit();
- * </pre>
- * @method putMAPNODE
- * @memberof! proton.Data#
- */
-_Data_['putMAPNODE'] = function() {
- this._check(_pn_data_put_map(this._data));
-};
-
-/**
- * Puts an array node. Elements may be filled by entering the array node and
- * putting the element values. The values must all be of the specified array
- * element type. If an array is described then the first child value of the array
- * is the descriptor and may be of any type.
- * <pre>
- * var data = new proton.Data();
- * data.putARRAYNODE(false, proton.Data.INT);
- * data.enter();
- * data.putINT(1);
- * data.putINT(2);
- * data.putINT(3);
- * data.exit();
- *
- * data.putARRAYNODE(true, proton.Data.DOUBLE);
- * data.enter();
- * data.putSYMBOL('array-descriptor');
- * data.putDOUBLE(1.1);
- * data.putDOUBLE(1.2);
- * data.putDOUBLE(1.3);
- * data.exit();
- * </pre>
- * @method putARRAYNODE
- * @param {boolean} described specifies whether the array is described.
- * @param {number} type the type of the array elements.
- * @memberof! proton.Data#
- */
-_Data_['putARRAYNODE'] = function(described, type) {
- this._check(_pn_data_put_array(this._data, described, type));
-};
-
-/**
- * Puts a described node. A described node has two children, the descriptor and
- * value. These are specified by entering the node and putting the desired values.
- * <pre>
- * var data = new proton.Data();
- * data.putDESCRIBEDNODE();
- * data.enter();
- * data.putSYMBOL('value-descriptor');
- * data.putSTRING('the value');
- * data.exit();
- * </pre>
- * @method putDESCRIBEDNODE
- * @memberof! proton.Data#
- */
-_Data_['putDESCRIBEDNODE'] = function() {
- this._check(_pn_data_put_described(this._data));
-};
-
-/**
- * Puts a null value.
- * @method putNULL
- * @memberof! proton.Data#
- */
-_Data_['putNULL'] = function() {
- this._check(_pn_data_put_null(this._data));
-};
-
-/**
- * Puts a boolean value.
- * @method putBOOL
- * @memberof! proton.Data#
- * @param {boolean} b a boolean value.
- */
-_Data_['putBOOL'] = function(b) {
- this._check(_pn_data_put_bool(this._data, b));
-};
-
-/**
- * Puts a unsigned byte value.
- * @method putUBYTE
- * @memberof! proton.Data#
- * @param {number} ub an integral value.
- */
-_Data_['putUBYTE'] = function(ub) {
- this._check(_pn_data_put_ubyte(this._data, ub));
-};
-
-/**
- * Puts a signed byte value.
- * @method putBYTE
- * @memberof! proton.Data#
- * @param {number} b an integral value.
- */
-_Data_['putBYTE'] = function(b) {
- this._check(_pn_data_put_byte(this._data, b));
-};
-
-/**
- * Puts a unsigned short value.
- * @method putUSHORT
- * @memberof! proton.Data#
- * @param {number} us an integral value.
- */
-_Data_['putUSHORT'] = function(us) {
- this._check(_pn_data_put_ushort(this._data, us));
-};
-
-/**
- * Puts a signed short value.
- * @method putSHORT
- * @memberof! proton.Data#
- * @param {number} s an integral value.
- */
-_Data_['putSHORT'] = function(s) {
- this._check(_pn_data_put_short(this._data, s));
-};
-
-/**
- * Puts a unsigned integer value.
- * @method putUINT
- * @memberof! proton.Data#
- * @param {number} ui an integral value.
- */
-_Data_['putUINT'] = function(ui) {
- this._check(_pn_data_put_uint(this._data, ui));
-};
-
-/**
- * Puts a signed integer value.
- * @method putINT
- * @memberof! proton.Data#
- * @param {number} i an integral value.
- */
-_Data_['putINT'] = function(i) {
- this._check(_pn_data_put_int(this._data, i));
-};
-
-/**
- * Puts a signed char value.
- * @method putCHAR
- * @memberof! proton.Data#
- * @param {(string|number)} c a single character expressed either as a string or a number.
- */
-_Data_['putCHAR'] = function(c) {
- c = Data.isString(c) ? c.charCodeAt(0) : c;
- this._check(_pn_data_put_char(this._data, c));
-};
-
-/**
- * Puts a unsigned long value. N.B. large values can suffer from a loss of
- * precision as JavaScript numbers are restricted to 64 bit double values.
- * @method putULONG
- * @memberof! proton.Data#
- * @param {number} ul an integral value.
- */
-_Data_['putULONG'] = function(ul) {
- // If the supplied number exceeds the range of Data.Long invert it before
- // constructing the Data.Long.
- ul = (ul >= Data.Long.TWO_PWR_63_DBL_) ? (ul = -(Data.Long.TWO_PWR_64_DBL_ - ul)) : ul;
- var long = Data.Long.fromNumber(ul);
- this._check(_pn_data_put_ulong(this._data, long.getLowBitsUnsigned(), long.getHighBits()));
-};
-
-/**
- * Puts a signed long value. N.B. large values can suffer from a loss of
- * precision as JavaScript numbers are restricted to 64 bit double values.
- * @method putLONG
- * @memberof! proton.Data#
- * @param {number} i an integral value.
- */
-_Data_['putLONG'] = function(l) {
- var long = Data.Long.fromNumber(l);
- this._check(_pn_data_put_long(this._data, long.getLowBitsUnsigned(), long.getHighBits()));
-};
-
-/**
- * Puts a timestamp.
- * @method putTIMESTAMP
- * @memberof! proton.Data#
- * @param {(number|Date)} d a Date value.
- */
-_Data_['putTIMESTAMP'] = function(d) {
- // Note that a timestamp is a 64 bit number so we have to use a proton.Data.Long.
- var timestamp = Data.Long.fromNumber(d.valueOf());
- this._check(_pn_data_put_timestamp(this._data, timestamp.getLowBitsUnsigned(), timestamp.getHighBits()));
-};
-
-/**
- * Puts a float value. N.B. converting between floats and doubles is imprecise
- * so the resulting value might not quite be what you expect.
- * @method putFLOAT
- * @memberof! proton.Data#
- * @param {number} f a floating point value.
- */
-_Data_['putFLOAT'] = function(f) {
- this._check(_pn_data_put_float(this._data, f));
-};
-
-/**
- * Puts a double value.
- * @method putDOUBLE
- * @memberof! proton.Data#
- * @param {number} d a floating point value.
- */
-_Data_['putDOUBLE'] = function(d) {
- this._check(_pn_data_put_double(this._data, d));
-};
-
-/**
- * Puts a decimal32 value.
- * @method putDECIMAL32
- * @memberof! proton.Data#
- * @param {number} d a decimal32 value.
- */
-_Data_['putDECIMAL32'] = function(d) {
- this._check(_pn_data_put_decimal32(this._data, d));
-};
-
-/**
- * Puts a decimal64 value.
- * @method putDECIMAL64
- * @memberof! proton.Data#
- * @param {number} d a decimal64 value.
- */
-_Data_['putDECIMAL64'] = function(d) {
- this._check(_pn_data_put_decimal64(this._data, d));
-};
-
-/**
- * Puts a decimal128 value.
- * @method putDECIMAL128
- * @memberof! proton.Data#
- * @param {number} d a decimal128 value.
- */
-_Data_['putDECIMAL128'] = function(d) {
- this._check(_pn_data_put_decimal128(this._data, d));
-};
-
-/**
- * Puts a UUID value.
- * @method putUUID
- * @memberof! proton.Data#
- * @param {proton.Data.Uuid} u a uuid value
- */
-_Data_['putUUID'] = function(u) {
- var sp = Runtime.stackSave();
- this._check(_pn_data_put_uuid(this._data, allocate(u['uuid'], 'i8', ALLOC_STACK)));
- Runtime.stackRestore(sp);
-};
-
-/**
- * Puts a binary value consuming the underlying raw data in the process.
- * @method putBINARY
- * @memberof! proton.Data#
- * @param {proton.Data.Binary} b a binary value.
- */
-_Data_['putBINARY'] = function(b) {
- var sp = Runtime.stackSave();
- // The implementation here is a bit "quirky" due to some low-level details
- // of the interaction between emscripten and LLVM and the use of pn_bytes.
- // The JavaScript code below is basically a binding to:
- //
- // pn_data_put_binary(data, pn_bytes(b.size, b.start));
-
- // Here's the quirky bit, pn_bytes actually returns pn_bytes_t *by value* but
- // the low-level code handles this *by pointer* so we first need to allocate
- // 8 bytes storage for {size, start} on the emscripten stack and then we
- // pass the pointer to that storage as the first parameter to the pn_bytes.
- var bytes = allocate(8, 'i8', ALLOC_STACK);
- _pn_bytes(bytes, b.size, b.start);
-
- // The compiled pn_data_put_binary takes the pn_bytes_t by reference not value.
- this._check(_pn_data_put_binary(this._data, bytes));
-
- // After calling _pn_data_put_binary the underlying Data object "owns" the
- // binary data, so we can call free on the proton.Data.Binary instance to
- // release any storage it has acquired back to the emscripten heap.
- b['free']();
- Runtime.stackRestore(sp);
-};
-
-/**
- * Puts a unicode string value.
- * @method putSTRING
- * @memberof! proton.Data#
- * @param {string} s a unicode string value.
- */
-_Data_['putSTRING'] = function(s) {
- var sp = Runtime.stackSave();
- // The implementation here is a bit "quirky" due to some low-level details
- // of the interaction between emscripten and LLVM and the use of pn_bytes.
- // The JavaScript code below is basically a binding to:
- //
- // pn_data_put_string(data, pn_bytes(strlen(text), text));
-
- // First create an array from the JavaScript String using the intArrayFromString
- // helper function (from emscripten/src/preamble.js). We use this idiom in a
- // few places but here we create array as a separate var as we need its length.
- var array = intArrayFromString(s, true); // The true means don't add NULL.
- // Allocate temporary storage for the array on the emscripten stack.
- var str = allocate(array, 'i8', ALLOC_STACK);
-
- // Here's the quirky bit, pn_bytes actually returns pn_bytes_t *by value* but
- // the low-level code handles this *by pointer* so we first need to allocate
- // 8 bytes storage for {size, start} on the emscripten stack and then we
- // pass the pointer to that storage as the first parameter to the pn_bytes.
- var bytes = allocate(8, 'i8', ALLOC_STACK);
- _pn_bytes(bytes, array.length, str);
-
- // The compiled pn_data_put_string takes the pn_bytes_t by reference not value.
- this._check(_pn_data_put_string(this._data, bytes));
- Runtime.stackRestore(sp);
-};
-
-/**
- * Puts a symbolic value. According to the AMQP 1.0 Specification Symbols are
- * values from a constrained domain. Although the set of possible domains is
- * open-ended, typically the both number and size of symbols in use for any
- * given application will be small, e.g. small enough that it is reasonable to
- * cache all the distinct values. Symbols are encoded as ASCII characters.
- * @method putSYMBOL
- * @memberof! proton.Data#
- * @param {proton.Data.Symbol|string} s the symbol name.
- */
-_Data_['putSYMBOL'] = function(s) {
- var sp = Runtime.stackSave();
- // The implementation here is a bit "quirky" due to some low-level details
- // of the interaction between emscripten and LLVM and the use of pn_bytes.
- // The JavaScript code below is basically a binding to:
- //
- // pn_data_put_symbol(data, pn_bytes(strlen(text), text));
-
- // First create an array from the JavaScript String using the intArrayFromString
- // helper function (from emscripten/src/preamble.js). We use this idiom in a
- // few places but here we create array as a separate var as we need its length.
- var array = intArrayFromString(s, true); // The true means don't add NULL.
- // Allocate temporary storage for the array on the emscripten stack.
- var str = allocate(array, 'i8', ALLOC_STACK);
-
- // Here's the quirky bit, pn_bytes actually returns pn_bytes_t *by value* but
- // the low-level code handles this *by pointer* so we first need to allocate
- // 8 bytes storage for {size, start} on the emscripten stack and then we
- // pass the pointer to that storage as the first parameter to the pn_bytes.
- var bytes = allocate(8, 'i8', ALLOC_STACK);
- _pn_bytes(bytes, array.length, str);
-
- // The compiled pn_data_put_symbol takes the pn_bytes_t by reference not value.
- this._check(_pn_data_put_symbol(this._data, bytes));
- Runtime.stackRestore(sp);
-};
-
-/**
- * If the current node is a list node, return the number of elements,
- * otherwise return zero. List elements can be accessed by entering
- * the list.
- * <pre>
- * var count = data.getLISTNODE();
- * data.enter();
- * for (var i = 0; i < count; i++) {
- * var type = data.next();
- * if (type === proton.Data.STRING) {
- * console.log(data.getSTRING());
- * }
- * }
- * data.exit();
- * </pre>
- * @method getLISTNODE
- * @memberof! proton.Data#
- * @returns {number} the number of elements if the current node is a list,
- * zero otherwise.
- */
-_Data_['getLISTNODE'] = function() {
- return _pn_data_get_list(this._data);
-};
-
-/**
- * If the current node is a map, return the number of child elements,
- * otherwise return zero. Key value pairs can be accessed by entering
- * the map.
- * <pre>
- * var count = data.getMAPNODE();
- * data.enter();
- * for (var i = 0; i < count/2; i++) {
- * var type = data.next();
- * if (type === proton.Data.STRING) {
- * console.log(data.getSTRING());
- * }
- * }
- * data.exit();
- * </pre>
- * @method getMAPNODE
- * @memberof! proton.Data#
- * @returns {number} the number of elements if the current node is a list,
- * zero otherwise.
- */
-_Data_['getMAPNODE'] = function() {
- return _pn_data_get_map(this._data);
-};
-
-/**
- * If the current node is an array, return an object containing the tuple of the
- * element count, a boolean indicating whether the array is described, and the
- * type of each element, otherwise return {count: 0, described: false, type: null).
- * Array data can be accessed by entering the array.
- * <pre>
- * // Read an array of strings with a symbolic descriptor
- * var metadata = data.getARRAYNODE();
- * var count = metadata.count;
- * data.enter();
- * data.next();
- * console.log("Descriptor:" + data.getSYMBOL());
- * for (var i = 0; i < count; i++) {
- * var type = data.next();
- * console.log("Element:" + data.getSTRING());
- * }
- * data.exit();
- * </pre>
- * @method getARRAYNODE
- * @memberof! proton.Data#
- * @returns {object} the tuple of the element count, a boolean indicating whether
- * the array is described, and the type of each element.
- */
-_Data_['getARRAYNODE'] = function() {
- var count = _pn_data_get_array(this._data);
- var described = (_pn_data_is_array_described(this._data) > 0);
- var type = _pn_data_get_array_type(this._data);
- type = (type == -1) ? null : type;
- return {'count': count, 'described': described, 'type': type};
-};
-
-/**
- * Checks if the current node is a described node. The descriptor and value may
- * be accessed by entering the described node.
- * <pre>
- * // read a symbolically described string
- * assert(data.isDESCRIBEDNODE()); // will error if the current node is not described
- * data.enter();
- * console.log(data.getSYMBOL());
- * console.log(data.getSTRING());
- * data.exit();
- * </pre>
- * @method isDESCRIBEDNODE
- * @memberof! proton.Data#
- * @returns {boolean} true iff the current node is a described, false otherwise.
- */
-_Data_['isDESCRIBEDNODE'] = function() {
- return _pn_data_is_described(this._data);
-};
-
-/**
- * @method getNULL
- * @memberof! proton.Data#
- * @returns a null value.
- */
-_Data_['getNULL'] = function() {
- return null;
-};
-
-/**
- * Checks if the current node is a null.
- * @method isNULL
- * @memberof! proton.Data#
- * @returns {boolean} true iff the current node is null.
- */
-_Data_['isNULL'] = function() {
- return (_pn_data_is_null(this._data) > 0);
-};
-
-/**
- * @method getBOOL
- * @memberof! proton.Data#
- * @returns {boolean} a boolean value if the current node is a boolean, returns
- * false otherwise.
- */
-_Data_['getBOOL'] = function() {
- return (_pn_data_get_bool(this._data) > 0);
-};
-
-/**
- * @method getUBYTE
- * @memberof! proton.Data#
- * @returns {number} value if the current node is an unsigned byte, returns 0 otherwise.
- */
-_Data_['getUBYTE'] = function() {
- return _pn_data_get_ubyte(this._data) & 0xFF; // & 0xFF converts to unsigned;
-};
-
-/**
- * @method getBYTE
- * @memberof! proton.Data#
- * @returns {number} value if the current node is a signed byte, returns 0 otherwise.
- */
-_Data_['getBYTE'] = function() {
- return _pn_data_get_byte(this._data);
-};
-
-/**
- * @method getUSHORT
- * @memberof! proton.Data#
- * @returns {number} value if the current node is an unsigned short, returns 0 otherwise.
- */
-_Data_['getUSHORT'] = function() {
- return _pn_data_get_ushort(this._data) & 0xFFFF; // & 0xFFFF converts to unsigned;
-};
-
-/**
- * @method getSHORT
- * @memberof! proton.Data#
- * @returns {number} value if the current node is a signed short, returns 0 otherwise.
- */
-_Data_['getSHORT'] = function() {
- return _pn_data_get_short(this._data);
-};
-
-/**
- * @method getUINT
- * @memberof! proton.Data#
- * @returns {number} value if the current node is an unsigned int, returns 0 otherwise.
- */
-_Data_['getUINT'] = function() {
- var value = _pn_data_get_uint(this._data);
- return (value > 0) ? value : 4294967296 + value; // 4294967296 == 2^32
-};
-
-/**
- * @method getINT
- * @memberof! proton.Data#
- * @returns {number} value if the current node is a signed int, returns 0 otherwise.
- */
-_Data_['getINT'] = function() {
- return _pn_data_get_int(this._data);
-};
-
-/**
- * @method getCHAR
- * @memberof! proton.Data#
- * @returns {string} the character represented by the unicode value of the current node.
- */
-_Data_['getCHAR'] = function() {
- return String.fromCharCode(_pn_data_get_char(this._data));
-};
-
-/**
- * Retrieve an unsigned long value. N.B. large values can suffer from a loss of
- * precision as JavaScript numbers are restricted to 64 bit double values.
- * @method getULONG
- * @memberof! proton.Data#
- * @returns {proton.Data.Long} value if the current node is an unsigned long, returns 0 otherwise.
- */
-_Data_['getULONG'] = function() {
- var low = _pn_data_get_ulong(this._data);
- var high = Runtime.getTempRet0();
- var long = new Data.Long(low, high);
- long = long.toNumber();
- return (long >= 0) ? long : Data.Long.TWO_PWR_64_DBL_ + long;
-};
-
-/**
- * Retrieve a signed long value. N.B. large values can suffer from a loss of
- * precision as JavaScript numbers are restricted to 64 bit double values.
- * @method getLONG
- * @memberof! proton.Data#
- * @returns {proton.Data.Long} value if the current node is a signed long, returns 0 otherwise.
- */
-_Data_['getLONG'] = function() {
- // Getting the long is a little tricky as it is a 64 bit number. The way
- // emscripten handles this is to return the low 32 bits directly and pass
- // the high 32 bits via the tempRet0 variable. We use Data.Long to hold
- // the 64 bit number and Data.Long.toNumber() to convert it back into a
- // JavaScript number.
- var low = _pn_data_get_long(this._data);
- var high = Runtime.getTempRet0();
- var long = new Data.Long(low, high);
- long = long.toNumber();
- return long;
-};
-
-/**
- * @method getTIMESTAMP
- * @memberof! proton.Data#
- * @returns {Date} a native JavaScript Date instance representing the timestamp.
- */
-_Data_['getTIMESTAMP'] = function() {
- // Getting the timestamp is a little tricky as it is a 64 bit number. The way
- // emscripten handles this is to return the low 32 bits directly and pass
- // the high 32 bits via the tempRet0 variable. We use Data.Long to hold
- // the 64 bit number and Data.Long.toNumber() to convert it back into a
- // JavaScript number.
- var low = _pn_data_get_timestamp(this._data);
- var high = Runtime.getTempRet0();
- var long = new Data.Long(low, high);
- long = long.toNumber();
- return new Date(long);
-};
-
-/**
- * Retrieves a float value. N.B. converting between floats and doubles is imprecise
- * so the resulting value might not quite be what you expect.
- * @method getFLOAT
- * @memberof! proton.Data#
- * @returns {number} value if the current node is a float, returns 0 otherwise.
- */
-_Data_['getFLOAT'] = function() {
- return _pn_data_get_float(this._data);
-};
-
-/**
- * @method getDOUBLE
- * @memberof! proton.Data#
- * @returns {number} value if the current node is a double, returns 0 otherwise.
- */
-_Data_['getDOUBLE'] = function() {
- return _pn_data_get_double(this._data);
-};
-
-/**
- * @method getDECIMAL32
- * @memberof! proton.Data#
- * @returns {number} value if the current node is a decimal32, returns 0 otherwise.
- */
-_Data_['getDECIMAL32'] = function() {
-console.log("getDECIMAL32 not properly implemented yet");
- return _pn_data_get_decimal32(this._data);
-};
-
-/**
- * @method getDECIMAL64
- * @memberof! proton.Data#
- * @returns {number} value if the current node is a decimal64, returns 0 otherwise.
- */
-_Data_['getDECIMAL64'] = function() {
-console.log("getDECIMAL64 not properly implemented yet");
- return _pn_data_get_decimal64(this._data);
-};
-
-/**
- * @method getDECIMAL128
- * @memberof! proton.Data#
- * @returns {number} value if the current node is a decimal128, returns 0 otherwise.
- */
-_Data_['getDECIMAL128'] = function() {
-console.log("getDECIMAL128 not properly implemented yet");
- return _pn_data_get_decimal128(this._data);
-};
-
-/**
- * @method getUUID
- * @memberof! proton.Data#
- * @returns {proton.Data.Uuid} value if the current node is a UUID, returns null otherwise.
- */
-_Data_['getUUID'] = function() {
- var sp = Runtime.stackSave();
-
- // Here's the quirky bit, pn_data_get_uuid actually returns pn_uuid_t
- // *by value* but the low-level code handles this *by pointer* so we first
- // need to allocate 16 bytes storage for pn_uuid_t on the emscripten stack
- // and then we pass the pointer to that storage as the first parameter to the
- // compiled pn_data_get_uuid.
- var bytes = allocate(16, 'i8', ALLOC_STACK); // pn_uuid_t is 16 bytes.
- _pn_data_get_uuid(bytes, this._data);
-
- // Create a new UUID from the bytes
- var uuid = new Data['Uuid'](bytes);
-
- // Tidy up the memory that we allocated on emscripten's stack.
- Runtime.stackRestore(sp);
-
- return uuid;
-};
-
-/**
- * @method getBINARY
- * @memberof! proton.Data#
- * @returns {proton.Data.Binary} value if the current node is a Binary, returns null otherwise.
- */
-_Data_['getBINARY'] = function() {
- var sp = Runtime.stackSave();
- // The implementation here is a bit "quirky" due to some low-level details
- // of the interaction between emscripten and LLVM and the use of pn_bytes.
- // The JavaScript code below is basically a binding to:
- //
- // pn_bytes bytes = pn_data_get_binary(data);
-
- // Here's the quirky bit, pn_data_get_binary actually returns pn_bytes_t
- // *by value* but the low-level code handles this *by pointer* so we first
- // need to allocate 8 bytes storage for {size, start} on the emscripten stack
- // and then we pass the pointer to that storage as the first parameter to the
- // compiled pn_data_get_binary.
- var bytes = allocate(8, 'i8', ALLOC_STACK);
- _pn_data_get_binary(bytes, this._data);
-
- // The bytes variable is really of type pn_bytes_t* so we use emscripten's
- // getValue() call to retrieve the size and then the start pointer.
- var size = getValue(bytes, 'i32');
- var start = getValue(bytes + 4, '*');
-
- // Create a proton.Data.Binary from the pn_bytes_t information.
- var binary = new Data['Binary'](size, start);
-
- // Tidy up the memory that we allocated on emscripten's stack.
- Runtime.stackRestore(sp);
-
- // If _decodeBinaryAsString is set return the stringified form of the Binary.
- if (this._decodeBinaryAsString) {
- return binary.toString();
- } else {
- return binary;
- }
-};
-
-/**
- * Gets a unicode String value from the current node.
- * @method getSTRING
- * @memberof! proton.Data#
- * @returns {string} value if the current node is a String, returns "" otherwise.
- */
-_Data_['getSTRING'] = function() {
- var sp = Runtime.stackSave();
- // The implementation here is a bit "quirky" due to some low-level details
- // of the interaction between emscripten and LLVM and the use of pn_bytes.
- // The JavaScript code below is basically a binding to:
- //
- // pn_bytes bytes = pn_data_get_string(data);
-
- // Here's the quirky bit, pn_data_get_string actually returns pn_bytes_t
- // *by value* but the low-level code handles this *by pointer* so we first
- // need to allocate 8 bytes storage for {size, start} on the emscripten stack
- // and then we pass the pointer to that storage as the first parameter to the
- // compiled pn_data_get_string.
- var bytes = allocate(8, 'i8', ALLOC_STACK);
- _pn_data_get_string(bytes, this._data);
-
- // The bytes variable is really of type pn_bytes_t* so we use emscripten's
- // getValue() call to retrieve the size and then the start pointer.
- var size = getValue(bytes, 'i32');
- var start = getValue(bytes + 4, '*');
-
- // Create a native JavaScript String from the pn_bytes_t information.
- var string = Pointer_stringify(start, size);
-
- // Tidy up the memory that we allocated on emscripten's stack.
- Runtime.stackRestore(sp);
-
- return string;
-};
-
-/**
- * Gets a symbolic value. According to the AMQP 1.0 Specification Symbols are
- * values from a constrained domain. Although the set of possible domains is
- * open-ended, typically the both number and size of symbols in use for any
- * given application will be small, e.g. small enough that it is reasonable to
- * cache all the distinct values. Symbols are encoded as ASCII characters.
- * @method getSYMBOL
- * @memberof! proton.Data#
- * @returns {proton.Data.Symbol} value if the current node is a Symbol, returns "" otherwise.
- */
-_Data_['getSYMBOL'] = function() {
- var sp = Runtime.stackSave();
- // The implementation here is a bit "quirky" due to some low-level details
- // of the interaction between emscripten and LLVM and the use of pn_bytes.
- // The JavaScript code below is basically a binding to:
- //
- // pn_bytes bytes = pn_data_get_symbol(data);
-
- // Here's the quirky bit, pn_data_get_symbol actually returns pn_bytes_t
- // *by value* but the low-level code handles this *by pointer* so we first
- // need to allocate 8 bytes storage for {size, start} on the emscripten stack
- // and then we pass the pointer to that storage as the first parameter to the
- // compiled pn_data_get_symbol.
- var bytes = allocate(8, 'i8', ALLOC_STACK);
- _pn_data_get_symbol(bytes, this._data);
-
- // The bytes variable is really of type pn_bytes_t* so we use emscripten's
- // getValue() call to retrieve the size and then the start pointer.
- var size = getValue(bytes, 'i32');
- var start = getValue(bytes + 4, '*');
-
- // Create a native JavaScript String from the pn_bytes_t information.
- var string = Pointer_stringify(start, size);
-
- // Tidy up the memory that we allocated on emscripten's stack.
- Runtime.stackRestore(sp);
-
- return new Data['Symbol'](string);
-};
-
-/**
- * Performs a deep copy of the current {@link proton.Data} instance and returns it
- * @method copy
- * @memberof! proton.Data#
- * @returns {proton.Data} a copy of the current {@link proton.Data} instance.
- */
-_Data_['copy'] = function() {
- var copy = new Data();
- this._check(_pn_data_copy(copy._data, this._data));
- return copy;
-};
-
-/**
- * Format the encoded AMQP Data into a string representation and return it.
- * @method format
- * @memberof! proton.Data#
- * @returns {string} a formatted string representation of the encoded Data.
- */
-_Data_['format'] = function() {
- var sp = Runtime.stackSave();
- var sizeptr = allocate(4, 'i32', ALLOC_STACK);
-
- var size = 1024; // Pass by reference variable - need to use setValue to initialise it.
- while (true) {
- setValue(sizeptr, size, 'i32'); // Set pass by reference variable.
- var bytes = _malloc(size); // Allocate storage from emscripten heap.
- var err = _pn_data_format(this._data, bytes, sizeptr);
- var size = getValue(sizeptr, 'i32'); // Dereference the real size value;
-
- if (err === Module['Error']['OVERFLOW']) {
- _free(bytes);
- size *= 2;
- } else {
- var string = Pointer_stringify(bytes, size);
- _free(bytes);
- // Tidy up the memory that we allocated on emscripten's stack.
- Runtime.stackRestore(sp);
- this._check(err)
- return string;
- }
- }
-};
-
-/**
- * Print the internal state of the {@link proton.Data} in human readable form.
- * TODO. This seems to "crash" if compound nodes such as DESCRIBED, MAP or LIST
- * are present in the tree, this is most likely a problem with the underlying C
- * implementation as all the other navigation and format methods work - need to
- * check by testing with some native C code.
- * @method dump
- * @memberof! proton.Data#
- */
-_Data_['dump'] = function() {
- _pn_data_dump(this._data);
-};
-
-/**
- * Serialise a Native JavaScript Object into an AMQP Map.
- * @method putMAP
- * @memberof! proton.Data#
- * @param {object} object the Native JavaScript Object that we wish to serialise.
- */
-_Data_['putMAP'] = function(object) {
- this['putMAPNODE']();
- this['enter']();
- for (var key in object) {
- if (object.hasOwnProperty(key)) {
- this['putObject'](key);
- this['putObject'](object[key]);
- }
- }
- this['exit']();
-};
-
-/**
- * Deserialise from an AMQP Map into a Native JavaScript Object.
- * @method getMAP
- * @memberof! proton.Data#
- * @returns {object} the deserialized Native JavaScript Object.
- */
-_Data_['getMAP'] = function() {
- if (this['enter']()) {
- var result = {};
- while (this['next']()) {
- var key = this['getObject']();
- var value = null;
- if (this['next']()) {
- value = this['getObject']();
- }
- result[key] = value;
- }
- this['exit']();
- return result;
- }
-};
-
-/**
- * Serialise a Native JavaScript Array into an AMQP List.
- * @method putLIST
- * @memberof! proton.Data#
- * @param {Array} array the Native JavaScript Array that we wish to serialise.
- */
-_Data_['putLIST'] = function(array) {
- this['putLISTNODE']();
- this['enter']();
- for (var i = 0, len = array.length; i < len; i++) {
- this['putObject'](array[i]);
- }
- this['exit']();
-};
-
-/**
- * Deserialise from an AMQP List into a Native JavaScript Array.
- * @method getLIST
- * @memberof! proton.Data#
- * @returns {Array} the deserialized Native JavaScript Array.
- */
-_Data_['getLIST'] = function() {
- if (this['enter']()) {
- var result = [];
- while (this['next']()) {
- result.push(this['getObject']());
- }
- this['exit']();
- return result;
- }
-};
-
-/**
- * Serialise a proton.Data.Described into an AMQP Described.
- * @method putDESCRIBED
- * @memberof! proton.Data#
- * @param {proton.Data.Described} d the proton.Data.Described that we wish to serialise.
- */
-_Data_['putDESCRIBED'] = function(d) {
- this['putDESCRIBEDNODE']();
- this['enter']();
- this['putObject'](d['descriptor']);
- this['putObject'](d['value']);
- this['exit']();
-};
-
-/**
- * Deserialise from an AMQP Described into a proton.Data.Described.
- * @method getDESCRIBED
- * @memberof! proton.Data#
- * @returns {proton.Data.Described} the deserialized proton.Data.Described.
- */
-_Data_['getDESCRIBED'] = function() {
- if (this['enter']()) {
- this['next']();
- var descriptor = this['getObject']();
- this['next']();
- var value = this['getObject']();
- this['exit']();
- return new Data['Described'](value, descriptor);
- }
-};
-
-/**
- * Serialise a proton.Data.Array or JavaScript TypedArray into an AMQP Array.
- * @method putARRAY
- * @memberof! proton.Data#
- * @param {object} a the proton.Data.Array or TypedArray that we wish to serialise.
- */
-_Data_['putARRAY'] = function(a) {
- var type = 1;
- var descriptor = 'TypedArray';
- var array = a;
-
- if (a instanceof Data['Array']) { // Array is a proton.Data.Array
- type = Data[a['type']]; // Find the integer type from its name string.
- descriptor = a['descriptor'];
- array = a['elements'];
- } else { // Array is a Native JavaScript TypedArray so work out the right type.
- if (a instanceof Int8Array) {
- type = Data['BYTE'];
- } else if (a instanceof Uint8Array || a instanceof Uint8ClampedArray) {
- type = Data['UBYTE'];
- } else if (a instanceof Int16Array) {
- type = Data['SHORT'];
- } else if (a instanceof Uint16Array) {
- type = Data['USHORT'];
- } else if (a instanceof Int32Array) {
- type = Data['INT'];
- } else if (a instanceof Uint32Array) {
- type = Data['UINT'];
- } else if (a instanceof Float32Array) {
- type = Data['FLOAT'];
- } else if (a instanceof Float64Array) {
- type = Data['DOUBLE'];
- }
- }
-
- var described = descriptor != null;
-
- this['putARRAYNODE'](described, type);
- this['enter']();
- if (described) {
- this['putObject'](descriptor);
- }
- var putter = 'put' + Data['TypeNames'][type];
- for (var i = 0, len = array.length; i < len; i++) {
- var value = array[i];
- value = (value instanceof Data.TypedNumber) ? value.value : value;
- this[putter](value);
- }
- this['exit']();
-};
-
-/**
- * Deserialise from an AMQP Array into a proton.Data.Array.
- * @method getARRAY
- * @memberof! proton.Data#
- * @returns {proton.Data.Array} the deserialized proton.Data.Array.
- */
-_Data_['getARRAY'] = function() {
- var metadata = this['getARRAYNODE']();
- var count = metadata['count'];
- var described = metadata['described'];
- var type = metadata['type'];
-
- if (type === null) {
- return null;
- }
-
- var elements = null;
- if (typeof ArrayBuffer === 'function') {
- if (type === Data['BYTE']) {
- elements = new Int8Array(count);
- } else if (type === Data['UBYTE']) {
- elements = new Uint8Array(count);
- } else if (type === Data['SHORT']) {
- elements = new Int16Array(count);
- } else if (type === Data['USHORT']) {
- elements = new Uint16Array(count);
- } else if (type === Data['INT']) {
- elements = new Int32Array(count);
- } else if (type === Data['UINT']) {
- elements = new Uint32Array(count);
- } else if (type === Data['FLOAT']) {
- elements = new Float32Array(count);
- } else if (type === Data['DOUBLE']) {
- elements = new Float64Array(count);
- } else {
- elements = new Array(count);
- }
- } else {
- elements = new Array(count);
- }
-
- if (this['enter']()) {
- var descriptor; // Deliberately initialised as undefined not null.
- if (described) {
- this['next']();
- descriptor = this['getObject']();
- }
-
- for (var i = 0; i < count; i++) {
- this['next']();
- elements[i] = this['getObject']();
- }
-
- this['exit']();
- if (descriptor === 'TypedArray') {
- return elements;
- } else {
- return new Data['Array'](type, elements, descriptor);
- }
- }
-};
-
-/**
- * This method is the entry point for serialising native JavaScript types into
- * AMQP types. In an ideal world there would be a nice clean one to one mapping
- * and we could employ a look-up table but in practice the JavaScript type system
- * doesn't really lend itself to that and we have to employ extra checks,
- * heuristics and inferences.
- * @method putObject
- * @memberof! proton.Data#
- * @param {object} obj the JavaScript Object or primitive to be serialised.
- */
-_Data_['putObject'] = function(obj) {
-//console.log("Data.putObject " + obj);
-
- if (obj == null) { // == Checks for null and undefined.
- this['putNULL']();
- } else if (Data.isString(obj)) {
- var quoted = obj.match(/(['"])[^'"]*\1/);
- if (quoted) { // If a quoted string extract the string inside the quotes.
- obj = quoted[0].slice(1, -1);
- }
- this['putSTRING'](obj);
- } else if (obj instanceof Date) {
- this['putTIMESTAMP'](obj);
- } else if (obj instanceof Data['Uuid']) {
- this['putUUID'](obj);
- } else if (obj instanceof Data['Binary']) {
- this['putBINARY'](obj);
- } else if (obj instanceof Data['Symbol']) {
- this['putSYMBOL'](obj);
- } else if (obj instanceof Data['Described']) {
- this['putDESCRIBED'](obj);
- } else if (obj instanceof Data['Array']) {
- this['putARRAY'](obj);
- } else if (obj.buffer && (typeof ArrayBuffer === 'function') &&
- obj.buffer instanceof ArrayBuffer) {
- this['putARRAY'](obj);
- } else if (obj instanceof Data.TypedNumber) { // Dot notation used for "protected" inner class.
- // Call the appropriate serialisation method based upon the numerical type.
- this['put' + obj.type](obj.value);
- } else if (Data.isNumber(obj)) {
- /**
- * This block encodes standard JavaScript numbers by making some inferences.
- * Encoding JavaScript numbers is surprisingly complex and has several
- * gotchas. The code here tries to do what the author believes is the
- * most "intuitive" encoding of the native JavaScript Number. It first
- * tries to identify if the number is an integer or floating point type
- * by checking if the number modulo 1 is zero (i.e. if it has a remainder
- * then it's a floating point type, which is encoded here as a double).
- * If the number is an integer type a test is made to check if it is a
- * 32 bit Int value. N.B. gotcha - JavaScript automagically coerces floating
- * point numbers with a zero Fractional Part into an *exact* integer so
- * numbers like 1.0, 100.0 etc. will be encoded as int or long here,
- * which is unlikely to be what is wanted. There's no easy "transparent"
- * way around this. The TypedNumber approach above allows applications
- * to express more explicitly what is required, for example (1.0).float()
- * (1).ubyte(), (5).long() etc.
- */
- if (obj % 1 === 0) {
- if (obj === (obj|0)) { // the |0 coerces to a 32 bit value.
- // 32 bit integer - encode as an INT.
- this['putINT'](obj);
- } else { // Longer than 32 bit - encode as a Long.
- this['putLONG'](obj);
- }
- } else { // Floating point type - encode as a Double
- this['putDOUBLE'](obj);
- }
- } else if (Data.isBoolean(obj)) {
- this['putBOOL'](obj);
- } else if (Data.isArray(obj)) { // Native JavaScript Array
- this['putLIST'](obj);
- } else {
- this['putMAP'](obj);
- }
-};
-
-/**
- * @method getObject
- * @memberof! proton.Data#
- * @returns {object} the JavaScript Object or primitive being deserialized.
- */
-_Data_['getObject'] = function() {
- var type = Data['TypeNames'][this.type()];
- type = type ? type : 'NULL';
- var getter = 'get' + type;
- return this[getter]();
-};
-
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/proton-c/bindings/javascript/error.js
----------------------------------------------------------------------
diff --git a/proton-c/bindings/javascript/error.js b/proton-c/bindings/javascript/error.js
deleted file mode 100644
index 4069bef..0000000
--- a/proton-c/bindings/javascript/error.js
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-/*****************************************************************************/
-/* */
-/* Status */
-/* */
-/*****************************************************************************/
-
-/**
- * Export Status Enum, avoiding minification.
- * @enum
- * @alias Status
- * @memberof proton
- */
-Module['Status'] = {
- /** PN_STATUS_UNKNOWN */ 'UNKNOWN': 0, // The tracker is unknown.
- /** PN_STATUS_PENDING */ 'PENDING': 1, // The message is in flight.
- // For outgoing messages, use messenger.isBuffered()
- // to see if it has been sent or not.
- /** PN_STATUS_ACCEPTED */ 'ACCEPTED': 2, // The message was accepted.
- /** PN_STATUS_REJECTED */ 'REJECTED': 3, // The message was rejected.
- /** PN_STATUS_RELEASED */ 'RELEASED': 4, // The message was released.
- /** PN_STATUS_MODIFIED */ 'MODIFIED': 5, // The message was modified.
- /** PN_STATUS_ABORTED */ 'ABORTED': 6, // The message was aborted.
- /** PN_STATUS_SETTLED */ 'SETTLED': 7 // The remote party has settled the message.
-};
-
-
-/*****************************************************************************/
-/* */
-/* Error */
-/* */
-/*****************************************************************************/
-
-/**
- * Export Error Enum, avoiding minification.
- * @enum
- * @alias Error
- * @memberof proton
- */
-Module['Error'] = {
- /** PN_EOS */ 'EOS': -1,
- /** PN_ERR */ 'ERR': -2,
- /** PN_OVERFLOW */ 'OVERFLOW': -3,
- /** PN_UNDERFLOW */ 'UNDERFLOW': -4,
- /** PN_STATE_ERR */ 'STATE_ERR': -5,
- /** PN_ARG_ERR */ 'ARG_ERR': -6,
- /** PN_TIMEOUT */ 'TIMEOUT': -7,
- /** PN_INTR */ 'INTR': -8,
- /** PN_INPROGRESS */ 'INPROGRESS': -9
-};
-
-
-/*****************************************************************************/
-/* */
-/* MessengerError */
-/* */
-/*****************************************************************************/
-
-/**
- * Constructs a proton.MessengerError instance.
- * @classdesc This class is a subclass of Error.
- * @constructor proton.MessengerError
- * @param {string} message the error message.
- */
-Module['MessengerError'] = function(message) { // MessengerError constructor.
- this.name = "MessengerError";
- this.message = (message || "");
-};
-
-Module['MessengerError'].prototype = new Error();
-Module['MessengerError'].prototype.constructor = Module['MessengerError'];
-
-Module['MessengerError'].prototype.toString = function() {
- return this.name + ': ' + this.message;
-};
-
-
-/*****************************************************************************/
-/* */
-/* SubscriptionError */
-/* */
-/*****************************************************************************/
-
-/**
- * Constructs a proton.SubscriptionError instance.
- * @classdesc This class is a subclass of MessengerError.
- * @constructor proton.SubscriptionError
- * @param {string} source the address that we want to subscribe to.
- * @param {string} message the error message.
- */
-Module['SubscriptionError'] = function(source, message) { // SubscriptionError constructor.
- this.name = "SubscriptionError";
- this.source = source;
- this.message = (message || "");
-};
-
-Module['SubscriptionError'].prototype = new Module['MessengerError']();
-Module['SubscriptionError'].prototype.constructor = Module['SubscriptionError'];
-
-Module['SubscriptionError'].prototype.toString = function() {
- return this.name + ': ' + this.source + ': ' + this.message;
-};
-
-
-/*****************************************************************************/
-/* */
-/* MessageError */
-/* */
-/*****************************************************************************/
-
-/**
- * Constructs a proton.MessageError instance.
- * @classdesc This class is a subclass of Error.
- * @constructor proton.MessageError
- * @param {string} message the error message.
- */
-Module['MessageError'] = function(message) { // MessageError constructor.
- this.name = "MessageError";
- this.message = (message || "");
-};
-
-Module['MessageError'].prototype = new Error();
-Module['MessageError'].prototype.constructor = Module['MessageError'];
-
-Module['MessageError'].prototype.toString = function() {
- return this.name + ': ' + this.message;
-};
-
-
-/*****************************************************************************/
-/* */
-/* DataError */
-/* */
-/*****************************************************************************/
-
-/**
- * Constructs a proton.DataError instance.
- * @classdesc This class is a subclass of Error.
- * @constructor proton.DataError
- * @param {string} message the error message.
- */
-Module['DataError'] = function(message) { // DataError constructor.
- this.name = "DataError";
- this.message = (message || "");
-};
-
-Module['DataError'].prototype = new Error();
-Module['DataError'].prototype.constructor = Module['DataError'];
-
-Module['DataError'].prototype.toString = function() {
- return this.name + ': ' + this.message;
-};
-
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org