Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

146 lines
4.8 KiB

/*****************************************************************************
emrultk.h
Owner: DaleG
Copyright (c) 1992-1997 Microsoft Corporation
Rule and Lexer-token history recording header file.
*****************************************************************************/
#ifndef EMRULTK_H
#define EMRULTK_H
MSOEXTERN_C_BEGIN // ***************** Begin extern "C" ********************
#ifndef MSOCP_DEFINED
typedef long MSOCP; // Character position
#define msocpNil ((MSOCP) -1)
#define msocp0 ((MSOCP) 0)
#define msocpMax ((MSOCP) 0x7FFFFFFF)
#define MSOCP_DEFINED
#endif /* !MSOCP_DEFINED */
/*************************************************************************
Types:
rultk Rule/lexer-token history record.
rultkh Rule/lexer-token history cache.
*************************************************************************/
/* M S O R U L T K */
/*----------------------------------------------------------------------------
%%Structure: MSORULTK
%%Contact: daleg
Rule/lexer-token history record.
----------------------------------------------------------------------------*/
typedef struct _MSORULTK
{
void *pObject; // Object, e.g. doc
MSOCP cpFirst; // First CP of token
MSOCP dcp; // CP len of token
int ich; // Char offset of tk
long dich; // Num of chars of tk
long wInterval; // Num intervals
int tk; // Token number
long lValue; // Token value
} MSORULTK;
#define irultkNil (-2)
/* M S O R U L T K H */
/*----------------------------------------------------------------------------
%%Structure: MSORULTKH
%%Contact: daleg
Rule/lexer-token history cache structure.
----------------------------------------------------------------------------*/
typedef struct _MSORULTKH
{
MSORULTK *rgrultkCache; // History record list
int irultkMac; // Lim of allocated
int irultkMin; // User-defined marker
int irultkLim; // Next cache index
int irultkAbsBase; // Absolute irultk base
} MSORULTKH;
/* M S O C A */
/*----------------------------------------------------------------------------
%%Structure: MSOCA
%%Contact: daleg
Rule/lexer text range
----------------------------------------------------------------------------*/
typedef struct _MSOCA
{
void *pObject; // Object, e.g. doc
long cpFirst; // First char pos
long cpLim; // Lim char pos
} MSOCA;
// Define (D)elta of a (T)o(K)en cache index
typedef int DTK;
// Define (D)elta of a (T)o(K)en cache (I)nterval
typedef int DTKI;
// Token-history cache access
#define PrultkFromIrultk(irultk, prultk) \
(&prultk[irultk])
// Move to next cache record, wrapping around if necessary
#define IncrPrultk(pprultk, pirultk, prultkHist, irultkMax) \
if (++(*pirultk) >= (irultkMax)) \
{ \
(*pirultk) = 0; \
(*pprultk) = PrultkFromIrultk(0, prultkHist); \
} \
else \
(*pprultk)++;
// Move to next cache record, wrapping around if necessary
#define DecrPrultk(pprultk, pirultk, prultkHist, irultkMax) \
if (--(*pirultk) < 0) \
{ \
(*pirultk) += (irultkMax); \
(*pprultk) += (irultkMax) - 1; \
} \
else \
(*pprultk)--;
// Move index to next cache record, wrapping around if necessary
#define IncrPirultk(pirultk, dirultk, irultkMax) \
if (((*pirultk) += dirultk) >= (irultkMax)) \
(*pirultk) -= (irultkMax);
// Move index to prev cache record, wrapping around if necessary
#define DecrPirultk(pirultk, dirultk, irultkMax) \
if (((*pirultk) -= dirultk) < 0) \
(*pirultk) += (irultkMax);
MSORULTK *PrultkExpand( // Expand cache
MSORULTK **pprultkCache,
int *pirultkMax,
int irultkMax,
int irultkSplit
);
// defines
#define msodtkNotFound 30000 // arbitrarily lg. flag
MSOEXTERN_C_END // ****************** End extern "C" *********************
#endif /* EMRULTK_H */