Annotation of sbbs/include/mozilla/js/jsxdrapi.h, revision 1.1

1.1     ! root        1: /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
        !             2:  *
        !             3:  * ***** BEGIN LICENSE BLOCK *****
        !             4:  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
        !             5:  *
        !             6:  * The contents of this file are subject to the Mozilla Public License Version
        !             7:  * 1.1 (the "License"); you may not use this file except in compliance with
        !             8:  * the License. You may obtain a copy of the License at
        !             9:  * http://www.mozilla.org/MPL/
        !            10:  *
        !            11:  * Software distributed under the License is distributed on an "AS IS" basis,
        !            12:  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
        !            13:  * for the specific language governing rights and limitations under the
        !            14:  * License.
        !            15:  *
        !            16:  * The Original Code is Mozilla Communicator client code, released
        !            17:  * March 31, 1998.
        !            18:  *
        !            19:  * The Initial Developer of the Original Code is
        !            20:  * Netscape Communications Corporation.
        !            21:  * Portions created by the Initial Developer are Copyright (C) 1998
        !            22:  * the Initial Developer. All Rights Reserved.
        !            23:  *
        !            24:  * Contributor(s):
        !            25:  *
        !            26:  * Alternatively, the contents of this file may be used under the terms of
        !            27:  * either of the GNU General Public License Version 2 or later (the "GPL"),
        !            28:  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
        !            29:  * in which case the provisions of the GPL or the LGPL are applicable instead
        !            30:  * of those above. If you wish to allow use of your version of this file only
        !            31:  * under the terms of either the GPL or the LGPL, and not to allow others to
        !            32:  * use your version of this file under the terms of the MPL, indicate your
        !            33:  * decision by deleting the provisions above and replace them with the notice
        !            34:  * and other provisions required by the GPL or the LGPL. If you do not delete
        !            35:  * the provisions above, a recipient may use your version of this file under
        !            36:  * the terms of any one of the MPL, the GPL or the LGPL.
        !            37:  *
        !            38:  * ***** END LICENSE BLOCK ***** */
        !            39: 
        !            40: #ifndef jsxdrapi_h___
        !            41: #define jsxdrapi_h___
        !            42: 
        !            43: /*
        !            44:  * JS external data representation interface API.
        !            45:  *
        !            46:  * The XDR system is comprised of three major parts:
        !            47:  *
        !            48:  * - the state serialization/deserialization APIs, which allow consumers
        !            49:  *   of the API to serialize JS runtime state (script bytecodes, atom maps,
        !            50:  *   object graphs, etc.) for later restoration.  These portions
        !            51:  *   are implemented in various appropriate files, such as jsscript.c
        !            52:  *   for the script portions and jsobj.c for object state.
        !            53:  * - the callback APIs through which the runtime requests an opaque
        !            54:  *   representation of a native object, and through which the runtime
        !            55:  *   constructs a live native object from an opaque representation. These
        !            56:  *   portions are the responsibility of the native object implementor.
        !            57:  * - utility functions for en/decoding of primitive types, such as
        !            58:  *   JSStrings.  This portion is implemented in jsxdrapi.c.
        !            59:  *
        !            60:  * Spiritually guided by Sun's XDR, where appropriate.
        !            61:  */
        !            62: 
        !            63: #include "jspubtd.h"
        !            64: #include "jsprvtd.h"
        !            65: 
        !            66: JS_BEGIN_EXTERN_C
        !            67: 
        !            68: /* We use little-endian byteorder for all encoded data */
        !            69: 
        !            70: #if defined IS_LITTLE_ENDIAN
        !            71: #define JSXDR_SWAB32(x) x
        !            72: #define JSXDR_SWAB16(x) x
        !            73: #elif defined IS_BIG_ENDIAN
        !            74: #define JSXDR_SWAB32(x) (((uint32)(x) >> 24) |                                \
        !            75:                          (((uint32)(x) >> 8) & 0xff00) |                      \
        !            76:                          (((uint32)(x) << 8) & 0xff0000) |                    \
        !            77:                          ((uint32)(x) << 24))
        !            78: #define JSXDR_SWAB16(x) (((uint16)(x) >> 8) | ((uint16)(x) << 8))
        !            79: #else
        !            80: #error "unknown byte order"
        !            81: #endif
        !            82: 
        !            83: #define JSXDR_ALIGN     4
        !            84: 
        !            85: typedef enum JSXDRMode {
        !            86:     JSXDR_ENCODE,
        !            87:     JSXDR_DECODE,
        !            88:     JSXDR_FREE
        !            89: } JSXDRMode;
        !            90: 
        !            91: typedef enum JSXDRWhence {
        !            92:     JSXDR_SEEK_SET,
        !            93:     JSXDR_SEEK_CUR,
        !            94:     JSXDR_SEEK_END
        !            95: } JSXDRWhence;
        !            96: 
        !            97: typedef struct JSXDROps {
        !            98:     JSBool      (*get32)(JSXDRState *, uint32 *);
        !            99:     JSBool      (*set32)(JSXDRState *, uint32 *);
        !           100:     JSBool      (*getbytes)(JSXDRState *, char *, uint32);
        !           101:     JSBool      (*setbytes)(JSXDRState *, char *, uint32);
        !           102:     void *      (*raw)(JSXDRState *, uint32);
        !           103:     JSBool      (*seek)(JSXDRState *, int32, JSXDRWhence);
        !           104:     uint32      (*tell)(JSXDRState *);
        !           105:     void        (*finalize)(JSXDRState *);
        !           106: } JSXDROps;
        !           107: 
        !           108: struct JSXDRState {
        !           109:     JSXDRMode   mode;
        !           110:     JSXDROps    *ops;
        !           111:     JSContext   *cx;
        !           112:     JSClass     **registry;
        !           113:     uintN       numclasses;
        !           114:     uintN       maxclasses;
        !           115:     void        *reghash;
        !           116:     void        *userdata;
        !           117: };
        !           118: 
        !           119: extern JS_PUBLIC_API(void)
        !           120: JS_XDRInitBase(JSXDRState *xdr, JSXDRMode mode, JSContext *cx);
        !           121: 
        !           122: extern JS_PUBLIC_API(JSXDRState *)
        !           123: JS_XDRNewMem(JSContext *cx, JSXDRMode mode);
        !           124: 
        !           125: extern JS_PUBLIC_API(void *)
        !           126: JS_XDRMemGetData(JSXDRState *xdr, uint32 *lp);
        !           127: 
        !           128: extern JS_PUBLIC_API(void)
        !           129: JS_XDRMemSetData(JSXDRState *xdr, void *data, uint32 len);
        !           130: 
        !           131: extern JS_PUBLIC_API(uint32)
        !           132: JS_XDRMemDataLeft(JSXDRState *xdr);
        !           133: 
        !           134: extern JS_PUBLIC_API(void)
        !           135: JS_XDRMemResetData(JSXDRState *xdr);
        !           136: 
        !           137: extern JS_PUBLIC_API(void)
        !           138: JS_XDRDestroy(JSXDRState *xdr);
        !           139: 
        !           140: extern JS_PUBLIC_API(JSBool)
        !           141: JS_XDRUint8(JSXDRState *xdr, uint8 *b);
        !           142: 
        !           143: extern JS_PUBLIC_API(JSBool)
        !           144: JS_XDRUint16(JSXDRState *xdr, uint16 *s);
        !           145: 
        !           146: extern JS_PUBLIC_API(JSBool)
        !           147: JS_XDRUint32(JSXDRState *xdr, uint32 *lp);
        !           148: 
        !           149: extern JS_PUBLIC_API(JSBool)
        !           150: JS_XDRBytes(JSXDRState *xdr, char *bytes, uint32 len);
        !           151: 
        !           152: extern JS_PUBLIC_API(JSBool)
        !           153: JS_XDRCString(JSXDRState *xdr, char **sp);
        !           154: 
        !           155: extern JS_PUBLIC_API(JSBool)
        !           156: JS_XDRCStringOrNull(JSXDRState *xdr, char **sp);
        !           157: 
        !           158: extern JS_PUBLIC_API(JSBool)
        !           159: JS_XDRString(JSXDRState *xdr, JSString **strp);
        !           160: 
        !           161: extern JS_PUBLIC_API(JSBool)
        !           162: JS_XDRStringOrNull(JSXDRState *xdr, JSString **strp);
        !           163: 
        !           164: extern JS_PUBLIC_API(JSBool)
        !           165: JS_XDRDouble(JSXDRState *xdr, jsdouble **dp);
        !           166: 
        !           167: extern JS_PUBLIC_API(JSBool)
        !           168: JS_XDRValue(JSXDRState *xdr, jsval *vp);
        !           169: 
        !           170: extern JS_PUBLIC_API(JSBool)
        !           171: JS_XDRScript(JSXDRState *xdr, JSScript **scriptp);
        !           172: 
        !           173: extern JS_PUBLIC_API(JSBool)
        !           174: JS_XDRRegisterClass(JSXDRState *xdr, JSClass *clasp, uint32 *lp);
        !           175: 
        !           176: extern JS_PUBLIC_API(uint32)
        !           177: JS_XDRFindClassIdByName(JSXDRState *xdr, const char *name);
        !           178: 
        !           179: extern JS_PUBLIC_API(JSClass *)
        !           180: JS_XDRFindClassById(JSXDRState *xdr, uint32 id);
        !           181: 
        !           182: /*
        !           183:  * Magic numbers.
        !           184:  */
        !           185: #define JSXDR_MAGIC_SCRIPT_1        0xdead0001
        !           186: #define JSXDR_MAGIC_SCRIPT_2        0xdead0002
        !           187: #define JSXDR_MAGIC_SCRIPT_3        0xdead0003
        !           188: #define JSXDR_MAGIC_SCRIPT_4        0xdead0004
        !           189: #define JSXDR_MAGIC_SCRIPT_CURRENT  JSXDR_MAGIC_SCRIPT_4
        !           190: 
        !           191: JS_END_EXTERN_C
        !           192: 
        !           193: #endif /* ! jsxdrapi_h___ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.