/usr/include/tkbltVector.h is in tkblt-dev 3.2.4-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | /*
* 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 1993-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.
*/
#ifndef _BLT_VECTOR_H
#define _BLT_VECTOR_H
#include <tcl.h>
typedef enum {
BLT_VECTOR_NOTIFY_UPDATE = 1, /* The vector's values has been updated */
BLT_VECTOR_NOTIFY_DESTROY /* The vector has been destroyed and the client
* should no longer use its data (calling
* Blt_FreeVectorId) */
} Blt_VectorNotify;
typedef struct _Blt_VectorId *Blt_VectorId;
typedef void (Blt_VectorChangedProc)(Tcl_Interp* interp, ClientData clientData,
Blt_VectorNotify notify);
typedef struct {
double *valueArr; /* Array of values (possibly malloc-ed) */
int numValues; /* Number of values in the array */
int arraySize; /* Size of the allocated space */
double min, max; /* Minimum and maximum values in the vector */
int dirty; /* Indicates if the vector has been updated */
int reserved; /* Reserved for future use */
} Blt_Vector;
typedef double (Blt_VectorIndexProc)(Blt_Vector * vecPtr);
typedef enum {
BLT_MATH_FUNC_SCALAR = 1, /* The function returns a single double
* precision value. */
BLT_MATH_FUNC_VECTOR /* The function processes the entire vector. */
} Blt_MathFuncType;
/*
* To be safe, use the macros below, rather than the fields of the
* structure directly.
*
* The Blt_Vector is basically an opaque type. But it's also the
* actual memory address of the vector itself. I wanted to make the
* API as unobtrusive as possible. So instead of giving you a copy of
* the vector, providing various functions to access and update the
* vector, you get your hands on the actual memory (array of doubles)
* shared by all the vector's clients.
*
* The trade-off for speed and convenience is safety. You can easily
* break things by writing into the vector when other clients are
* using it. Use Blt_ResetVector to get around this. At least the
* macros are a reminder it isn't really safe to reset the data
* fields, except by the API routines.
*/
#define Blt_VecData(v) ((v)->valueArr)
#define Blt_VecLength(v) ((v)->numValues)
#define Blt_VecSize(v) ((v)->arraySize)
#define Blt_VecDirty(v) ((v)->dirty)
#ifdef __cplusplus
extern "C" {
#endif
int Blt_CreateVector(Tcl_Interp* interp, const char *vecName,
int size, Blt_Vector** vecPtrPtr);
int Blt_CreateVector2(Tcl_Interp* interp, const char *vecName,
const char *cmdName, const char *varName,
int initialSize, Blt_Vector **vecPtrPtr);
int Blt_DeleteVectorByName(Tcl_Interp* interp, const char *vecName);
int Blt_DeleteVector(Blt_Vector *vecPtr);
int Blt_GetVector(Tcl_Interp* interp, const char *vecName,
Blt_Vector **vecPtrPtr);
int Blt_GetVectorFromObj(Tcl_Interp* interp, Tcl_Obj *objPtr,
Blt_Vector **vecPtrPtr);
int Blt_ResetVector(Blt_Vector *vecPtr, double *dataArr, int n,
int arraySize, Tcl_FreeProc *freeProc);
int Blt_ResizeVector(Blt_Vector *vecPtr, int n);
int Blt_VectorExists(Tcl_Interp* interp, const char *vecName);
int Blt_VectorExists2(Tcl_Interp* interp, const char *vecName);
Blt_VectorId Blt_AllocVectorId(Tcl_Interp* interp, const char *vecName);
int Blt_GetVectorById(Tcl_Interp* interp, Blt_VectorId clientId,
Blt_Vector **vecPtrPtr);
void Blt_SetVectorChangedProc(Blt_VectorId clientId,
Blt_VectorChangedProc *proc,
ClientData clientData);
void Blt_FreeVectorId(Blt_VectorId clientId);
const char *Blt_NameOfVectorId(Blt_VectorId clientId);
const char *Blt_NameOfVector(Blt_Vector *vecPtr);
int Blt_ExprVector(Tcl_Interp* interp, char *expr, Blt_Vector *vecPtr);
void Blt_InstallIndexProc(Tcl_Interp* interp, const char *indexName,
Blt_VectorIndexProc * procPtr);
double Blt_VecMin(Blt_Vector *vPtr);
double Blt_VecMax(Blt_Vector *vPtr);
#ifdef __cplusplus
}
#endif
#include "tkbltDecls.h"
#endif /* _BLT_VECTOR_H */
|