// typemap.i
// Remap constants if in Tcl mode
#ifdef SWIGTCL
// Declare some variables for later use
%{
static Tcl_HashTable constTable; /* Hash table */
static int *swigconst; /* Temporary variable */
static Tcl_HashEntry *entryPtr; /* Hash entry */
static int dummy; /* dummy value */
%}
// Initialize the hash table
%init %{
Tcl_InitHashTable(&constTable,TCL_STRING_KEYS);
%}
// Create some typemaps
%typemap(tcl,const) int, unsigned int, long, unsigned long {
entryPtr = Tcl_CreateHashEntry(&constTable,"$target",&dummy);
swigconst = (int *) malloc(sizeof(int));
*swigconst = $source;
Tcl_SetHashValue(entryPtr, swigconst);
/* Make it so constants can also be used as variables */
Tcl_LinkVar(interp,"$target", (char *) swigconst, TCL_LINK_INT | TCL_LINK_READ_ONLY);
};
// Now change integer handling to look for names
%typemap(tcl,in) int, unsigned int, long, unsigned long {
Tcl_HashEntry *entryPtr;
entryPtr = Tcl_FindHashEntry(&constTable,$source);
if (entryPtr) {
$target = ($type) (*((int *) Tcl_GetHashValue(entryPtr)));
} else {
$target = ($type) atoi($source);
}
}
#endif
syntax highlighted by Code2HTML, v. 0.9.1