/* Copyright 1989-93 GROUPE BULL -- See license conditions in file COPYRIGHT */
/**************************\
* *
* KlO Collection *
* DEFINITIONS *
* *
\**************************/
#ifndef INCLUDE_Kl_COLL_H
#define INCLUDE_Kl_COLL_H
/* type */
typedef struct _KlCollection {
KlKLONE_HEADER;
int size; /* number of elements */
KlO *list; /* malloced region to store elements */
int limit; /* elements allowable in the malloced
* aera */
} *KlCollection;
typedef struct _KlQuotedExpr { /* 'foo */
KlKLONE_HEADER;
int size; /* 2 */
KlO *list; /* pointer to the symbol, expr pair */
KlMethod eval; /* eval method */
struct _KlAtom *symbol;
KlO expr;
} *KlQuotedExpr;
/* exported functions */
EXT KlCollection KlCollectionMake();
EXT KlO KlCollectionPrint();
EXT KlO KlCollectionFree();
EXT KlCollection KlCollectionAdd();
EXT KlO KlCollectionEvalOnLine();
EXT KlQuotedExpr KlAnyQuotedExprMake();
EXT KlO KlQuotedExprEval();
EXT KlO KlQuotedExprPrint();
EXT KlO KlQuotedExprFree();
EXT KlO KlQuotedExprEqual();
EXT KlO KlQuotedExprCommaEval();
EXT KlO KlQuotedExprCoerce();
/* (backward compatible) convenient functions */
#define KlQuotedExprMake(expr) \
KlAnyQuotedExprMake(KlA_quote, expr, KlQuote)
#define KlBackQuotedExprMake(expr) \
KlAnyQuotedExprMake(KlA_backquote, expr, KlBackquote)
#define KlUnquoteExprMake(expr) \
KlAnyQuotedExprMake(KlA_unquote, expr, KlQuotedExprCommaEval)
#define KlUnquoteSplicingExprMake(expr) \
KlAnyQuotedExprMake(KlA_unquotesplicing, expr, KlQuotedExprCommaEval)
#define KlIsACollection(obj) ((obj)->type == KlCollectionType)
#define KlIsAQuotedExpr(obj) ((obj)->type == KlQuotedExprType)
/* methods */
EXT KlType KlCollectionType;
EXT KlType KlQuotedExprType;
#endif /* INCLUDE_Kl_COLL_H */
syntax highlighted by Code2HTML, v. 0.9.1