/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (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.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1999 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the terms of * either of the GNU General Public License Version 2 or later (the "GPL"), * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #ifndef _MORK_ #define _MORK_ 1 #ifndef _MDB_ #include "mdb.h" #endif #include "nscore.h" //3456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789 // { %%%%% begin disable unused param warnings %%%%% #define MORK_USED_1(x) (void)(&x) #define MORK_USED_2(x,y) (void)(&x);(void)(&y); #define MORK_USED_3(x,y,z) (void)(&x);(void)(&y);(void)(&z); #define MORK_USED_4(w,x,y,z) (void)(&w);(void)(&x);(void)(&y);(void)(&z); // } %%%%% end disable unused param warnings %%%%% // { %%%%% begin macro for finding class member offset %%%%% /*| OffsetOf: the unsigned integer offset of a class or struct **| field from the beginning of that class or struct. This is **| the same as the similarly named public domain IronDoc macro, **| and is also the same as another macro appearing in stdlib.h. **| We want these offsets so we can correctly convert pointers **| to member slots back into pointers to enclosing objects, and **| have this exactly match what the compiler thinks is true. **| **|| Bascially we are asking the compiler to determine the offset at **| compile time, and we use the definition of address artithmetic **| to do this. By casting integer zero to a pointer of type obj*, **| we can reference the address of a slot in such an object that **| is hypothetically physically placed at address zero, but without **| actually dereferencing a memory location. The absolute address **| of slot is the same as offset of that slot, when the object is **| placed at address zero. |*/ #define mork_OffsetOf(obj,slot) ((unsigned int)&((obj*) 0)->slot) // } %%%%% end macro for finding class member offset %%%%% // { %%%%% begin specific-size integer scalar typedefs %%%%% typedef unsigned char mork_u1; // make sure this is one byte typedef unsigned short mork_u2; // make sure this is two bytes typedef short mork_i2; // make sure this is two bytes typedef uint32_t mork_u4; // make sure this is four bytes typedef int32_t mork_i4; // make sure this is four bytes typedef PRWord mork_ip; // make sure sizeof(mork_ip) == sizeof(void*) typedef mork_u1 mork_ch; // small byte-sized character (never wide) typedef mork_u1 mork_flags; // one byte's worth of predicate bit flags typedef mork_u2 mork_base; // 2-byte magic class signature slot in object typedef mork_u2 mork_derived; // 2-byte magic class signature slot in object typedef mork_u4 mork_token; // unsigned token for atomized string typedef mork_token mork_scope; // token used to id scope for rows typedef mork_token mork_kind; // token used to id kind for tables typedef mork_token mork_cscode; // token used to id charset names typedef mork_token mork_aid; // token used to id atomize cell values typedef mork_token mork_column; // token used to id columns for rows typedef mork_column mork_delta; // mork_column plus mork_change typedef mork_token mork_color; // bead ID #define morkColor_kNone ((mork_color) 0) typedef mork_u4 mork_magic; // unsigned magic signature typedef mork_u4 mork_seed; // unsigned collection change counter typedef mork_u4 mork_count; // unsigned collection member count typedef mork_count mork_num; // synonym for count typedef mork_u4 mork_size; // unsigned physical media size typedef mork_u4 mork_fill; // unsigned logical content size typedef mork_u4 mork_more; // more available bytes for larger buffer typedef mdb_u4 mork_percent; // 0..100, with values >100 same as 100 typedef mork_i4 mork_pos; // negative means "before first" (at zero pos) typedef mork_i4 mork_line; // negative means "before first line in file" typedef mork_u1 mork_usage; // 1-byte magic usage signature slot in object typedef mork_u1 mork_access; // 1-byte magic access signature slot in object typedef mork_u1 mork_change; // add, cut, put, set, nil typedef mork_u1 mork_priority; // 0..9, for a total of ten different values typedef mork_u1 mork_able; // on, off, asleep (clone IronDoc's fe_able) typedef mork_u1 mork_load; // dirty or clean (clone IronDoc's fe_load) // } %%%%% end specific-size integer scalar typedefs %%%%% // 'test' is a public domain Mithril for key equality tests in probe maps typedef mork_i2 mork_test; /* neg=>kVoid, zero=>kHit, pos=>kMiss */ #define morkTest_kVoid ((mork_test) -1) /* -1: nil key slot, no key order */ #define morkTest_kHit ((mork_test) 0) /* 0: keys are equal, a map hit */ #define morkTest_kMiss ((mork_test) 1) /* 1: keys not equal, a map miss */ // { %%%%% begin constants for Mork scalar types %%%%% #define morkPriority_kHi ((mork_priority) 0) /* best priority */ #define morkPriority_kMin ((mork_priority) 0) /* best priority is smallest */ #define morkPriority_kLo ((mork_priority) 9) /* worst priority */ #define morkPriority_kMax ((mork_priority) 9) /* worst priority is biggest */ #define morkPriority_kCount 10 /* number of distinct priority values */ #define morkAble_kEnabled ((mork_able) 0x55) /* same as IronDoc constant */ #define morkAble_kDisabled ((mork_able) 0xAA) /* same as IronDoc constant */ #define morkAble_kAsleep ((mork_able) 0x5A) /* same as IronDoc constant */ #define morkChange_kAdd 'a' /* add member */ #define morkChange_kCut 'c' /* cut member */ #define morkChange_kPut 'p' /* put member */ #define morkChange_kSet 's' /* set all members */ #define morkChange_kNil 0 /* no change in this member */ #define morkChange_kDup 'd' /* duplicate changes have no effect */ // kDup is intended to replace another change constant in an object as a // conclusion about change feasibility while staging intended alterations. #define morkLoad_kDirty ((mork_load) 0xDD) /* same as IronDoc constant */ #define morkLoad_kClean ((mork_load) 0x22) /* same as IronDoc constant */ #define morkAccess_kOpen 'o' #define morkAccess_kClosing 'c' #define morkAccess_kShut 's' #define morkAccess_kDead 'd' // } %%%%% end constants for Mork scalar types %%%%% // { %%%%% begin non-specific-size integer scalar typedefs %%%%% typedef int mork_char; // nominal type for ints used to hold input byte #define morkChar_IsWhite(c) \ ((c) == 0xA || (c) == 0x9 || (c) == 0xD || (c) == ' ') // } %%%%% end non-specific-size integer scalar typedefs %%%%% // { %%%%% begin mdb-driven scalar typedefs %%%%% // easier to define bool exactly the same as mdb: typedef mdb_bool mork_bool; // unsigned byte with zero=false, nonzero=true /* canonical boolean constants provided only for code clarity: */ #define morkBool_kTrue ((mork_bool) 1) /* actually any nonzero means true */ #define morkBool_kFalse ((mork_bool) 0) /* only zero means false */ // mdb clients can assign these, so we cannot pick maximum size: typedef mdb_id mork_id; // unsigned object identity in a scope typedef mork_id mork_rid; // unsigned row identity inside scope typedef mork_id mork_tid; // unsigned table identity inside scope typedef mork_id mork_gid; // unsigned group identity without any scope // we only care about neg, zero, pos -- so we don't care about size: typedef mdb_order mork_order; // neg:lessthan, zero:equalto, pos:greaterthan // } %%%%% end mdb-driven scalar typedefs %%%%% #define morkId_kMinusOne ((mdb_id) -1) // { %%%%% begin class forward defines %%%%% // try to put these in alphabetical order for easier examination: class morkMid; class morkAtom; class morkAtomSpace; class morkBookAtom; class morkBuf; class morkBuilder; class morkCell; class morkCellObject; class morkCursor; class morkEnv; class morkFactory; class morkFile; class morkHandle; class morkHandleFace; // just an opaque cookie type class morkHandleFrame; class morkHashArrays; class morkMap; class morkNode; class morkObject; class morkOidAtom; class morkParser; class morkPool; class morkPlace; class morkPort; class morkPortTableCursor; class morkProbeMap; class morkRow; class morkRowCellCursor; class morkRowObject; class morkRowSpace; class morkSorting; class morkSortingRowCursor; class morkSpace; class morkSpan; class morkStore; class morkStream; class morkTable; class morkTableChange; class morkTableRowCursor; class morkThumb; class morkWriter; class morkZone; // } %%%%% end class forward defines %%%%% // include this config file last for platform & environment specific stuff: #ifndef _MORKCONFIG_ #include "morkConfig.h" #endif //3456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789 #endif /* _MORK_ */