diff options
Diffstat (limited to 'tkblt/generic/tkbltVecInt.h')
-rw-r--r-- | tkblt/generic/tkbltVecInt.h | 202 |
1 files changed, 0 insertions, 202 deletions
diff --git a/tkblt/generic/tkbltVecInt.h b/tkblt/generic/tkbltVecInt.h deleted file mode 100644 index cc516a1..0000000 --- a/tkblt/generic/tkbltVecInt.h +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Smithsonian Astrophysical Observatory, Cambridge, MA, USA - * This code has been modified under the terms listed below and is made - * available under the same terms. - */ - -/* - * Copyright 1995-2004 George A Howlett. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - - -#include "tkbltChain.h" -#include "tkbltVector.h" - -#define VECTOR_THREAD_KEY "BLT Vector Data" -#define VECTOR_MAGIC ((unsigned int) 0x46170277) - -/* These defines allow parsing of different types of indices */ - -#define INDEX_SPECIAL (1<<0) /* Recognize "min", "max", and "++end" as - * valid indices */ -#define INDEX_COLON (1<<1) /* Also recognize a range of indices separated - * by a colon */ -#define INDEX_CHECK (1<<2) /* Verify that the specified index or range of - * indices are within limits */ -#define INDEX_ALL_FLAGS (INDEX_SPECIAL | INDEX_COLON | INDEX_CHECK) - -#define SPECIAL_INDEX -2 - -#define FFT_NO_CONSTANT (1<<0) -#define FFT_BARTLETT (1<<1) -#define FFT_SPECTRUM (1<<2) - -#define NOTIFY_UPDATED ((int)BLT_VECTOR_NOTIFY_UPDATE) -#define NOTIFY_DESTROYED ((int)BLT_VECTOR_NOTIFY_DESTROY) - -#define NOTIFY_NEVER (1<<3) /* Never notify clients of updates to - * the vector */ -#define NOTIFY_ALWAYS (1<<4) /* Notify clients after each update - * of the vector is made */ -#define NOTIFY_WHENIDLE (1<<5) /* Notify clients at the next idle point - * that the vector has been updated. */ - -#define NOTIFY_PENDING (1<<6) /* A do-when-idle notification of the - * vector's clients is pending. */ -#define NOTIFY_NOW (1<<7) /* Notify clients of changes once - * immediately */ - -#define NOTIFY_WHEN_MASK (NOTIFY_NEVER|NOTIFY_ALWAYS|NOTIFY_WHENIDLE) - -#define UPDATE_RANGE (1<<9) /* The data of the vector has changed. - * Update the min and max limits when - * they are needed */ - -#define FindRange(array, first, last, min, max) \ - { \ - min = max = 0.0; \ - if (first <= last) { \ - register int i; \ - min = max = array[first]; \ - for (i = first + 1; i <= last; i++) { \ - if (min > array[i]) { \ - min = array[i]; \ - } else if (max < array[i]) { \ - max = array[i]; \ - } \ - } \ - } \ - } - -namespace Blt { - - typedef struct { - double x; - double y; - } Point2d; - - typedef struct { - Tcl_HashTable vectorTable; /* Table of vectors */ - Tcl_HashTable mathProcTable; /* Table of vector math functions */ - Tcl_HashTable indexProcTable; - Tcl_Interp* interp; - unsigned int nextId; - } VectorInterpData; - - typedef struct { - // If you change these fields, make sure you change the definition of - // Blt_Vector in blt.h too. - double *valueArr; /* Array of values (malloc-ed) */ - int length; /* Current number of values in the array. */ - int size; /* Maximum number of values that can be stored - * in the value array. */ - double min, max; /* Minimum and maximum values in the vector */ - int dirty; /* Indicates if the vector has been updated */ - int reserved; - - /* The following fields are local to this module */ - - const char *name; /* The namespace-qualified name of the vector. - * It points to the hash key allocated for the - * entry in the vector hash table. */ - VectorInterpData *dataPtr; - Tcl_Interp* interp; /* Interpreter associated with the vector */ - Tcl_HashEntry *hashPtr; /* If non-NULL, pointer in a hash table to - * track the vectors in use. */ - Tcl_FreeProc *freeProc; /* Address of procedure to call to release - * storage for the value array, Optionally can - * be one of the following: TCL_STATIC, - * TCL_DYNAMIC, or TCL_VOLATILE. */ - const char *arrayName; /* The name of the TCL array variable mapped - * to the vector (malloc'ed). If NULL, - * indicates that the vector isn't mapped to - * any variable */ - Tcl_Namespace *nsPtr; /* Namespace context of the vector itself. */ - int offset; /* Offset from zero of the vector's starting - * index */ - Tcl_Command cmdToken; /* Token for vector's TCL command. */ - Chain* chain; /* List of clients using this vector */ - int notifyFlags; /* Notification flags. See definitions - * below */ - int varFlags; /* Indicate if the variable is global, - * namespace, or local */ - int freeOnUnset; /* For backward compatibility only: If - * non-zero, free the vector when its variable - * is unset. */ - int flush; - int first, last; /* Selected region of vector. This is used - * mostly for the math routines */ - } Vector; - - extern const char* Itoa(int value); - extern int Vec_GetIndex(Tcl_Interp* interp, Vector *vPtr, - const char *string, int *indexPtr, int flags, - Blt_VectorIndexProc **procPtrPtr); - extern int Vec_GetIndexRange(Tcl_Interp* interp, Vector *vPtr, - const char *string, int flags, - Blt_VectorIndexProc **procPtrPtr); - extern Vector* Vec_ParseElement(Tcl_Interp* interp, VectorInterpData *dataPtr, - const char *start, const char **endPtr, - int flags); - extern int Vec_SetLength(Tcl_Interp* interp, Vector *vPtr, int length); - extern int Vec_SetSize(Tcl_Interp* interp, Vector *vPtr, int size); - extern void Vec_FlushCache(Vector *vPtr); - extern void Vec_UpdateRange(Vector *vPtr); - extern void Vec_UpdateClients(Vector *vPtr); - extern void Vec_Free(Vector *vPtr); - extern Vector* Vec_New(VectorInterpData *dataPtr); - extern int Vec_MapVariable(Tcl_Interp* interp, Vector *vPtr, - const char *name); - extern int Vec_ChangeLength(Tcl_Interp* interp, Vector *vPtr, int length); - extern Vector* Vec_Create(VectorInterpData *dataPtr, const char *name, - const char *cmdName, const char *varName, - int *newPtr); - extern int Vec_LookupName(VectorInterpData *dataPtr, const char *vecName, - Vector **vPtrPtr); - extern VectorInterpData* Vec_GetInterpData (Tcl_Interp* interp); - extern int Vec_Reset(Vector *vPtr, double *dataArr, int nValues, - int arraySize, Tcl_FreeProc *freeProc); - extern int Vec_FFT(Tcl_Interp* interp, Vector *realPtr, - Vector *phasesPtr, Vector *freqPtr, double delta, - int flags, Vector *srcPtr); - extern int Vec_InverseFFT(Tcl_Interp* interp, Vector *iSrcPtr, - Vector *rDestPtr, Vector *iDestPtr, - Vector *srcPtr); - extern int Vec_Duplicate(Vector *destPtr, Vector *srcPtr); - extern size_t *Vec_SortMap(Vector **vectors, int nVectors); - extern double Vec_Max(Vector *vecObjPtr); - extern double Vec_Min(Vector *vecObjPtr); - extern int ExprVector(Tcl_Interp* interp, char *string, Blt_Vector *vector); - - extern Tcl_ObjCmdProc Vec_InstCmd; - extern Tcl_VarTraceProc Vec_VarTrace; - extern void Vec_InstallMathFunctions(Tcl_HashTable *tablePtr); - extern void Vec_UninstallMathFunctions(Tcl_HashTable *tablePtr); - extern void Vec_InstallSpecialIndices(Tcl_HashTable *tablePtr); -}; - -extern Tcl_IdleProc Blt_Vec_NotifyClients; - -#ifdef _WIN32 -double drand48(void); -void srand48(long int seed); -#endif |