148 lines
4.2 KiB
C
148 lines
4.2 KiB
C
/*
|
||
* tclOO.h --
|
||
*
|
||
* This file contains the public API definitions and some of the function
|
||
* declarations for the object-system (NB: not Tcl_Obj, but ::oo).
|
||
*
|
||
* Copyright (c) 2006-2010 by Donal K. Fellows
|
||
*
|
||
* See the file "license.terms" for information on usage and redistribution of
|
||
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||
*/
|
||
|
||
#ifndef TCLOO_H_INCLUDED
|
||
#define TCLOO_H_INCLUDED
|
||
|
||
/*
|
||
* Be careful when it comes to versioning; need to make sure that the
|
||
* standalone TclOO version matches. Also make sure that this matches the
|
||
* version in the files:
|
||
*
|
||
* tests/oo.test
|
||
* tests/ooNext2.test
|
||
* unix/tclooConfig.sh
|
||
* win/tclooConfig.sh
|
||
*/
|
||
|
||
#define TCLOO_VERSION "1.1.0"
|
||
#define TCLOO_PATCHLEVEL TCLOO_VERSION
|
||
|
||
#include "tcl.h"
|
||
|
||
/*
|
||
* For C++ compilers, use extern "C"
|
||
*/
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
extern const char *TclOOInitializeStubs(
|
||
Tcl_Interp *, const char *version);
|
||
#define Tcl_OOInitStubs(interp) \
|
||
TclOOInitializeStubs((interp), TCLOO_VERSION)
|
||
#ifndef USE_TCL_STUBS
|
||
# define TclOOInitializeStubs(interp, version) (TCLOO_PATCHLEVEL)
|
||
#endif
|
||
|
||
/*
|
||
* These are opaque types.
|
||
*/
|
||
|
||
typedef struct Tcl_Class_ *Tcl_Class;
|
||
typedef struct Tcl_Method_ *Tcl_Method;
|
||
typedef struct Tcl_Object_ *Tcl_Object;
|
||
typedef struct Tcl_ObjectContext_ *Tcl_ObjectContext;
|
||
|
||
/*
|
||
* Public datatypes for callbacks and structures used in the TIP#257 (OO)
|
||
* implementation. These are used to implement custom types of method calls
|
||
* and to allow the attachment of arbitrary data to objects and classes.
|
||
*/
|
||
|
||
typedef int (Tcl_MethodCallProc)(ClientData clientData, Tcl_Interp *interp,
|
||
Tcl_ObjectContext objectContext, int objc, Tcl_Obj *const *objv);
|
||
typedef void (Tcl_MethodDeleteProc)(ClientData clientData);
|
||
typedef int (Tcl_CloneProc)(Tcl_Interp *interp, ClientData oldClientData,
|
||
ClientData *newClientData);
|
||
typedef void (Tcl_ObjectMetadataDeleteProc)(ClientData clientData);
|
||
typedef int (Tcl_ObjectMapMethodNameProc)(Tcl_Interp *interp,
|
||
Tcl_Object object, Tcl_Class *startClsPtr, Tcl_Obj *methodNameObj);
|
||
|
||
/*
|
||
* The type of a method implementation. This describes how to call the method
|
||
* implementation, how to delete it (when the object or class is deleted) and
|
||
* how to create a clone of it (when the object or class is copied).
|
||
*/
|
||
|
||
typedef struct {
|
||
int version; /* Structure version field. Always to be equal
|
||
* to TCL_OO_METHOD_VERSION_CURRENT in
|
||
* declarations. */
|
||
const char *name; /* Name of this type of method, mostly for
|
||
* debugging purposes. */
|
||
Tcl_MethodCallProc *callProc;
|
||
/* How to invoke this method. */
|
||
Tcl_MethodDeleteProc *deleteProc;
|
||
/* How to delete this method's type-specific
|
||
* data, or NULL if the type-specific data
|
||
* does not need deleting. */
|
||
Tcl_CloneProc *cloneProc; /* How to copy this method's type-specific
|
||
* data, or NULL if the type-specific data can
|
||
* be copied directly. */
|
||
} Tcl_MethodType;
|
||
|
||
/*
|
||
* The correct value for the version field of the Tcl_MethodType structure.
|
||
* This allows new versions of the structure to be introduced without breaking
|
||
* binary compatability.
|
||
*/
|
||
|
||
#define TCL_OO_METHOD_VERSION_CURRENT 1
|
||
|
||
/*
|
||
* The type of some object (or class) metadata. This describes how to delete
|
||
* the metadata (when the object or class is deleted) and how to create a
|
||
* clone of it (when the object or class is copied).
|
||
*/
|
||
|
||
typedef struct {
|
||
int version; /* Structure version field. Always to be equal
|
||
* to TCL_OO_METADATA_VERSION_CURRENT in
|
||
* declarations. */
|
||
const char *name;
|
||
Tcl_ObjectMetadataDeleteProc *deleteProc;
|
||
/* How to delete the metadata. This must not
|
||
* be NULL. */
|
||
Tcl_CloneProc *cloneProc; /* How to copy the metadata, or NULL if the
|
||
* type-specific data can be copied
|
||
* directly. */
|
||
} Tcl_ObjectMetadataType;
|
||
|
||
/*
|
||
* The correct value for the version field of the Tcl_ObjectMetadataType
|
||
* structure. This allows new versions of the structure to be introduced
|
||
* without breaking binary compatability.
|
||
*/
|
||
|
||
#define TCL_OO_METADATA_VERSION_CURRENT 1
|
||
|
||
/*
|
||
* Include all the public API, generated from tclOO.decls.
|
||
*/
|
||
|
||
#include "tclOODecls.h"
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
#endif
|
||
|
||
/*
|
||
* Local Variables:
|
||
* mode: c
|
||
* c-basic-offset: 4
|
||
* fill-column: 78
|
||
* End:
|
||
*/
|