summaryrefslogtreecommitdiffstats
path: root/tkblt/doc/vector.n
diff options
context:
space:
mode:
Diffstat (limited to 'tkblt/doc/vector.n')
-rw-r--r--tkblt/doc/vector.n1134
1 files changed, 0 insertions, 1134 deletions
diff --git a/tkblt/doc/vector.n b/tkblt/doc/vector.n
deleted file mode 100644
index fa8bb7e..0000000
--- a/tkblt/doc/vector.n
+++ /dev/null
@@ -1,1134 +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 1991-1997 by Lucent Technologies, Inc.
-'\"
-'\" Permission to use, copy, modify, and distribute this software and its
-'\" documentation for any purpose and without fee is hereby granted, provided
-'\" that the above copyright notice appear in all copies and that both that the
-'\" copyright notice and warranty disclaimer appear in supporting documentation,
-'\" and that the names of Lucent Technologies any of their entities not be used
-'\" in advertising or publicity pertaining to distribution of the software
-'\" without specific, written prior permission.
-'\"
-'\" Lucent Technologies disclaims all warranties with regard to this software,
-'\" including all implied warranties of merchantability and fitness. In no event
-'\" shall Lucent Technologies be liable for any special, indirect or
-'\" consequential damages or any damages whatsoever resulting from loss of use,
-'\" data or profits, whether in an action of contract, negligence or other
-'\" tortuous action, arising out of or in connection with the use or performance
-'\" of this software.
-'\"
-'\" Vector command created by George Howlett.
-'\"
-.TH blt::vector n BLT_VERSION BLT "BLT Built-In Commands"
-.BS
-'\" Note: do not modify the .SH NAME line immediately below!
-.SH NAME
-\fBvector\fR \- Vector data type for Tcl
-.SH SYNOPSIS
-\fBblt::vector create \fIvecName \fR?\fIvecName\fR...? ?\fIswitches\fR?
-.sp
-\fBblt::vector destroy \fIvecName \fR?\fIvecName\fR...?
-.sp
-\fBblt::vector expr \fIexpression\fR
-.sp
-\fBblt::vector names \fR?\fIpattern\fR...?
-.BE
-.SH DESCRIPTION
-The \fBvector\fR command creates an array of floating point
-values. The vector's components can be manipulated in three ways:
-through a Tcl array variable, a Tcl command, or the C API.
-.SH INTRODUCTION
-A vector is an ordered set of real numbers. The components of a
-vector are indexed by integers.
-.PP
-Vectors are common data structures for many applications. For
-example, a graph may use two vectors to represent the X-Y
-coordinates of the data plotted. The graph will automatically
-be redrawn when the vectors are updated or changed. By using vectors,
-you can separate
-data analysis from the graph widget. This makes it easier, for
-example, to add data transformations, such as splines. It's possible
-to plot the same data to in multiple graphs, where each graph presents
-a different view or scale of the data.
-.PP
-You could try to use Tcl's associative arrays as vectors. Tcl arrays
-are easy to use. You can access individual elements randomly by
-specifying the index, or the set the entire array by providing a list
-of index and value pairs for each element. The disadvantages of
-associative arrays as vectors lie in the fact they are implemented as
-hash tables.
-.TP 2
-\(bu
-There's no implied ordering to the associative arrays. If you used
-vectors for plotting, you would want to insure the second component
-comes after the first, an so on. This isn't possible since arrays
-are actually hash tables. For example, you can't get a range of
-values between two indices. Nor can you sort an array.
-.TP 2
-\(bu
-Arrays consume lots of memory when the number of elements becomes
-large (tens of thousands). This is because each element's index and
-value are stored as strings in the hash table.
-.TP 2
-\(bu
-The C programming interface is unwieldy. Normally with vectors, you
-would like to view the Tcl array as you do a C array, as an array of
-floats or doubles. But with hash tables, you must convert both the
-index and value to and from decimal strings, just to access
-an element in the array. This makes it cumbersome to perform operations on
-the array as a whole.
-.PP
-The \fBvector\fR command tries to overcome these disadvantages while
-still retaining the ease of use of Tcl arrays. The \fBvector\fR
-command creates both a new Tcl command and associate array which are
-linked to the vector components. You can randomly access vector
-components though the elements of array. Not have all indices are
-generated for the array, so printing the array (using the \fBparray\fR
-procedure) does not print out all the component values. You can use
-the Tcl command to access the array as a whole. You can copy, append,
-or sort vector using its command. If you need greater performance, or
-customized behavior, you can write your own C code to manage vectors.
-.SH EXAMPLE
-You create vectors using the \fBvector\fR command and its \fBcreate\fR
-operation.
-.CS
-# Create a new vector.
-blt::vector create y(50)
-.CE
-This creates a new vector named \f(CWy\fR. It has fifty components, by
-default, initialized to \f(CW0.0\fR. In addition, both a Tcl command
-and array variable, both named \f(CWy\fR, are created. You can use
-either the command or variable to query or modify components of the
-vector.
-.CS
-# Set the first value.
-set y(0) 9.25
-puts "y has [y length] components"
-.CE
-The array \f(CWy\fR can be used to read or set individual components of
-the vector. Vector components are indexed from zero. The array index
-must be a number less than the number of components. For example,
-it's an error if you try to set the 51st element of \f(CWy\fR.
-.CS
-# This is an error. The vector only has 50 components.
-set y(50) 0.02
-.CE
-You can also specify a range of indices using a colon (:) to separate
-the first and last indices of the range.
-.CS
-# Set the first six components of y
-set y(0:5) 25.2
-.CE
-If you don't include an index, then it will default to the first
-and/or last component of the vector.
-.CS
-# Print out all the components of y
-puts "y = $y(:)"
-.CE
-There are special non-numeric indices. The index \f(CWend\fR, specifies
-the last component of the vector. It's an error to use this index if
-the vector is empty (length is zero). The index \f(CW++end\fR can be
-used to extend the vector by one component and initialize it to a specific
-value. You can't read from the array using this index, though.
-.CS
-# Extend the vector by one component.
-set y(++end) 0.02
-.CE
-The other special indices are \f(CWmin\fR and \f(CWmax\fR. They return the
-current smallest and largest components of the vector.
-.CS
-# Print the bounds of the vector
-puts "min=$y(min) max=$y(max)"
-.CE
-To delete components from a vector, simply unset the corresponding
-array element. In the following example, the first component of
-\f(CWy\fR is deleted. All the remaining components of \f(CWy\fR will be
-moved down by one index as the length of the vector is reduced by
-one.
-.CS
-# Delete the first component
-unset y(0)
-puts "new first element is $y(0)"
-.CE
-The vector's Tcl command can also be used to query or set the vector.
-.CS
-# Create and set the components of a new vector
-blt::vector create x
-x set { 0.02 0.04 0.06 0.08 0.10 0.12 0.14 0.16 0.18 0.20 }
-.CE
-Here we've created a vector \f(CWx\fR without a initial length specification.
-In this case, the length is zero. The \fBset\fR operation resets the vector,
-extending it and setting values for each new component.
-.PP
-There are several operations for vectors. The \fBrange\fR operation
-lists the components of a vector between two indices.
-.CS
-# List the components
-puts "x = [x range 0 end]"
-.CE
-You can search for a particular value using the \fBsearch\fR
-operation. It returns a list of indices of the components with the
-same value. If no component has the same value, it returns \f(CW""\fR.
-.CS
-# Find the index of the biggest component
-set indices [x search $x(max)]
-.CE
-Other operations copy, append, or sort vectors. You can append
-vectors or new values onto an existing vector with the \fBappend\fR
-operation.
-.CS
-# Append assorted vectors and values to x
-x append x2 x3 { 2.3 4.5 } x4
-.CE
-The \fBsort\fR operation sorts the vector. If any additional vectors
-are specified, they are rearranged in the same order as the vector.
-For example, you could use it to sort data points represented by x and
-y vectors.
-.CS
-# Sort the data points
-x sort y
-.CE
-The vector \f(CWx\fR is sorted while the components of \f(CWy\fR are
-rearranged so that the original x,y coordinate pairs are retained.
-.PP
-The \fBexpr\fR operation lets you perform arithmetic on vectors.
-The result is stored in the vector.
-.CS
-# Add the two vectors and a scalar
-x expr { x + y }
-x expr { x * 2 }
-.CE
-When a vector is modified, resized, or deleted, it may trigger
-call-backs to notify the clients of the vector. For example, when a
-vector used in the \fBgraph\fR widget is updated, the vector
-automatically notifies the widget that it has changed. The graph can
-then redrawn itself at the next idle point. By default, the
-notification occurs when Tk is next idle. This way you can modify the
-vector many times without incurring the penalty of the graph redrawing
-itself for each change. You can change this behavior using the
-\fBnotify\fR operation.
-.CS
-# Make vector x notify after every change
-x notify always
- ...
-# Never notify
-x notify never
- ...
-# Force notification now
-x notify now
-.CE
-To delete a vector, use the \fBvector delete\fR command.
-Both the vector and its corresponding Tcl command are destroyed.
-.CS
-# Remove vector x
-blt::vector destroy x
-.CE
-.SH SYNTAX
-Vectors are created using the \fBvector create\fR operation.
-Th \fBcreate\fR operation can be invoked in one of three forms:
-.TP
-\fBblt::vector create \fIvecName\fR
-This creates a new vector \fIvecName\fR which initially has no components.
-.TP
-\fBblt::vector create \fIvecName\fR(\fIsize\fR)
-This second form creates a new vector which will contain \fIsize\fR
-number of components. The components will be indexed starting from
-zero (0). The default value for the components is \f(CW0.0\fR.
-.TP
-\fBblt::vector create \fIvecName\fR(\fIfirst\fR:\fIlast\fR)
-The last form creates a new vector of indexed \fIfirst\fR through
-\fIlast\fR. \fIFirst\fR and \fIlast\fR can be any integer value
-so long as \fIfirst\fR is less than \fIlast\fR.
-.PP
-Vector names must start with a letter and consist of letters, digits,
-or underscores.
-.CS
-# Error: must start with letter
-blt::vector create 1abc
-.CE
-You can automatically generate vector names using the
-"\f(CW#auto\fR" vector name. The \fBcreate\fR operation will generate a
-unique vector name.
-.CS
-set vec [blt::vector create #auto]
-puts "$vec has [$vec length] components"
-.CE
-.SS VECTOR INDICES
-Vectors are indexed by integers. You can access the individual vector
-components via its array variable or Tcl command. The string
-representing the index can be an integer, a numeric expression, a
-range, or a special keyword.
-.PP
-The index must lie within the current range of the vector, otherwise
-an an error message is returned. Normally the indices of a vector
-are start from 0. But you can use the \fBoffset\fR operation to
-change a vector's indices on-the-fly.
-.CS
-puts $vecName(0)
-vecName offset -5
-puts $vecName(-5)
-.CE
-You can also use numeric expressions as indices. The result
-of the expression must be an integer value.
-.CS
-set n 21
-set vecName($n+3) 50.2
-.CE
-The following special non-numeric indices are available: \f(CWmin\fR, \f(CWmax\fR, \f(CWend\fR, and
-\f(CW++end\fR.
-.CS
-puts "min = $vecName($min)"
-set vecName(end) -1.2
-.CE
-The indices \f(CWmin\fR and \f(CWmax\fR will return the minimum and maximum
-values of the vector. The index \f(CWend\fR returns the value of the
-last component in the vector. The index \f(CW++end\fR is used to append
-new value onto the vector. It automatically extends the vector by
-one component and sets its value.
-.CS
-# Append an new component to the end
-set vecName(++end) 3.2
-.CE
-A range of indices can be indicated by a colon (:).
-.CS
-# Set the first six components to 1.0
-set vecName(0:5) 1.0
-.CE
-If no index is supplied the first or last component is assumed.
-.CS
-# Print the values of all the components
-puts $vecName(:)
-.CE
-.SH VECTOR OPERATIONS
-.TP
-\fBblt::vector create \fIvecName\fR?(\fIsize\fR)?... \fR?\fIswitches\fR?
-The \fBcreate\fR operation creates a new vector \fIvecName\fR. Both a
-Tcl command and array variable \fIvecName\fR are also created. The
-name \fIvecName\fR must be unique, so another Tcl command or array
-variable can not already exist in that scope. You can access the
-components of the vector using its variable. If you change a value in
-the array, or unset an array element, the vector is updated to reflect
-the changes. When the variable \fIvecName\fR is unset, the vector and
-its Tcl command are also destroyed.
-.sp
-The vector has optional switches that affect how the vector is created. They
-are as follows:
-.RS
-.TP
-\fB\-variable \fIvarName\fR
-Specifies the name of a Tcl variable to be mapped to the vector. If
-the variable already exists, it is first deleted, then recreated.
-If \fIvarName\fR is the empty string, then no variable will be mapped.
-You can always map a variable back to the vector using the vector's
-\fBvariable\fR operation.
-.TP
-\fB\-command \fIcmdName\fR
-Maps a Tcl command to the vector. The vector can be accessed using
-\fIcmdName\fR and one of the vector instance operations.
-A Tcl command by that name cannot already exist.
-If \fIcmdName\fR is the empty string, no command mapping
-will be made.
-.TP
-\fB\-watchunset \fIboolean\fR
-Indicates that the vector should automatically delete itself if
-the variable associated with the vector is unset. By default,
-the vector will not be deleted. This is different from previous
-releases. Set \fIboolean\fR to "true" to get the old behavior.
-.RE
-.TP
-\fBblt::vector destroy \fIvecName\fR \fR?\fIvecName...\fR?
-Deletes one or more vectors. Both the Tcl command and array variable
-are removed also.
-.TP
-\fBblt::vector expr \fIexpression\fR
-.RS
-All binary operators take vectors as operands (remember that numbers
-are treated as one-component vectors). The exact action of binary
-operators depends upon the length of the second operand. If the
-second operand has only one component, then each element of the first
-vector operand is computed by that value. For example, the expression
-"x * 2" multiples all elements of the vector x by 2. If the second
-operand has more than one component, both operands must be the same
-length. Each pair of corresponding elements are computed. So "x + y"
-adds the the first components of x and y together, the second, and so on.
-.sp
-The valid operators are listed below, grouped in decreasing order
-of precedence:
-.TP 20
-\fB\-\0\0!\fR
-Unary minus and logical NOT. The unary minus flips the sign of each
-component in the vector. The logical not operator returns a vector of
-whose values are 0.0 or 1.0. For each non-zero component 1.0 is returned,
-0.0 otherwise.
-.TP 20
-\fB^\fR
-Exponentiation.
-.TP 20
-\fB*\0\0/\0\0%\fR
-Multiply, divide, remainder.
-.TP 20
-\fB+\0\0\-\fR
-Add and subtract.
-.TP 20
-\fB<<\0\0>>\fR
-Left and right shift. Circularly shifts the values of the vector
-(not implemented yet).
-.TP 20
-\fB<\0\0>\0\0<=\0\0>=\fR
-Boolean less, greater, less than or equal, and greater than or equal.
-Each operator returns a vector of ones and zeros. If the condition is true,
-1.0 is the component value, 0.0 otherwise.
-.TP 20
-\fB==\0\0!=\fR
-Boolean equal and not equal.
-Each operator returns a vector of ones and zeros. If the condition is true,
-1.0 is the component value, 0.0 otherwise.
-.TP 20
-\fB|\fR
-Bit-wise OR. (Not implemented).
-.TP 20
-\fB&&\fR
-Logical AND. Produces a 1 result if both operands are non-zero, 0 otherwise.
-.TP 20
-\fB||\fR
-Logical OR. Produces a 0 result if both operands are zero, 1 otherwise.
-.TP 20
-\fIx\fB?\fIy\fB:\fIz\fR
-If-then-else, as in C. (Not implemented yet).
-.LP
-See the C manual for more details on the results produced by each
-operator. All of the binary operators group left-to-right within the
-same precedence level.
-.sp
-Several mathematical functions are supported for vectors. Each of
-the following functions invokes the math library function of the same name;
-see the manual entries for the library functions for details on what
-they do. The operation is applied to all elements of the vector
-returning the results.
-.CS
-.ta 2c 4c 6c
-\fBacos\fR \fBcos\fR \fBhypot\fR \fBsinh\fR
-\fBasin\fR \fBcosh\fR \fBlog\fR \fBsqrt\fR
-\fBatan\fR \fBexp\fR \fBlog10\fR \fBtan\fR
-\fBceil\fR \fBfloor\fR \fBsin\fR \fBtanh\fR
-.sp
-.CE
-Additional functions are:
-.TP 1i
-\fBabs\fR
-Returns the absolute value of each component.
-.TP 1i
-\fBrandom\fR
-Returns a vector of non-negative values uniformly distributed
-between [0.0, 1.0) using \fIdrand48\fR.
-The seed comes from the internal clock of the machine or may be
-set manual with the srandom function.
-.TP 1i
-\fBround\fR
-Rounds each component of the vector.
-.TP 1i
-\fBsrandom\fR
-Initializes the random number generator using \fIsrand48\fR.
-The high order 32-bits are set using the integral portion of the first
-vector component. All other components are ignored. The low order 16-bits
-are set to an arbitrary value.
-.PP
-The following functions return a single value.
-.TP 1i
-\fBadev\fR
-Returns the average deviation (defined as the sum of the absolute values
-of the differences between component and the mean, divided by the length
-of the vector).
-.TP 1i
-\fBkurtosis\fR
-Returns the degree of peakedness (fourth moment) of the vector.
-.TP 1i
-\fBlength\fR
-Returns the number of components in the vector.
-.TP 1i
-\fBmax\fR
-Returns the vector's maximum value.
-.TP 1i
-\fBmean\fR
-Returns the mean value of the vector.
-.TP 1i
-\fBmedian\fR
-Returns the median of the vector.
-.TP 1i
-\fBmin\fR
-Returns the vector's minimum value.
-.TP 1i
-\fBq1\fR
-Returns the first quartile of the vector.
-.TP 1i
-\fBq3\fR
-Returns the third quartile of the vector.
-.TP 1i
-\fBprod\fR
-Returns the product of the components.
-.TP 1i
-\fBsdev\fR
-Returns the standard deviation (defined as the square root of the variance)
-of the vector.
-.TP 1i
-\fBskew\fR
-Returns the skewness (or third moment) of the vector. This characterizes
-the degree of asymmetry of the vector about the mean.
-.TP 1i
-\fBsum\fR
-Returns the sum of the components.
-.TP 1i
-\fBvar\fR
-Returns the variance of the vector. The sum of the squared differences
-between each component and the mean is computed. The variance is
-the sum divided by the length of the vector minus 1.
-.PP
-The last set returns a vector of the same length as the argument.
-.TP 1i
-\fBnorm\fR
-Scales the values of the vector to lie in the range [0.0..1.0].
-.TP 1i
-\fBsort\fR
-Returns the vector components sorted in ascending order.
-.RE
-.TP
-\fBvector names \fR?\fIpattern\fR?
-.SH INSTANCE OPERATIONS
-You can also use the vector's Tcl command to query or modify it. The
-general form is
-.DS
-\fIvecName \fIoperation\fR \fR?\fIarg\fR?...
-.DE
-Both \fIoperation\fR and its arguments determine the exact behavior of
-the command. The operations available for vectors are listed below.
-.TP
-\fIvecName \fBappend\fR \fIitem\fR ?\fIitem\fR?...
-Appends the component values from \fIitem\fR to \fIvecName\fR.
-\fIItem\fR can be either the name of a vector or a list of numeric
-values.
-.TP
-\fIvecName \fBbinread\fR \fIchannel\fR ?\fIlength\fR? ?\fIswitches\fR?
-Reads binary values from a Tcl channel. Values are either appended
-to the end of the vector or placed at a given index (using the
-\fB\-at\fR option), overwriting existing values. Data is read until EOF
-is found on the channel or a specified number of values \fIlength\fR
-are read (note that this is not necessarily the same as the number of
-bytes). The following switches are supported:
-.RS
-.TP
-\fB\-swap\fR
-Swap bytes and words. The default endian is the host machine.
-.TP
-\fB\-at \fIindex\fR
-New values will start at vector index \fIindex\fR. This will
-overwrite any current values.
-.TP
-\fB\-format\fR \fIformat\fR
-Specifies the format of the data. \fIFormat\fR can be one of the
-following: "i1", "i2", "i4", "i8", "u1, "u2", "u4", "u8", "r4",
-"r8", or "r16". The number indicates the number of bytes
-required for each value. The letter indicates the type: "i" for signed,
-"u" for unsigned, "r" or real. The default format is "r16".
-.RE
-.TP
-\fIvecName \fBclear\fR
-Clears the element indices from the array variable associated with
-\fIvecName\fR. This doesn't affect the components of the vector. By
-default, the number of entries in the Tcl array doesn't match the
-number of components in the vector. This is because its too expensive
-to maintain decimal strings for both the index and value for each
-component. Instead, the index and value are saved only when you read
-or write an element with a new index. This command removes the index
-and value strings from the array. This is useful when the vector is
-large.
-.TP
-\fIvecName \fBdelete\fR \fIindex\fR ?\fIindex\fR?...
-Deletes the \fIindex\fRth component from the vector \fIvecName\fR.
-\fIIndex\fR is the index of the element to be deleted. This is the
-same as unsetting the array variable element \fIindex\fR. The vector
-is compacted after all the indices have been deleted.
-.TP
-\fIvecName \fBdup\fR \fIdestName\fR
-Copies \fIvecName\fR to \fIdestName\fR. \fIDestName\fR is the name of a
-destination vector. If a vector \fIdestName\fR already exists, it is
-overwritten with the components of \fIvecName\fR. Otherwise a
-new vector is created.
-.TP
-\fIvecName \fBexpr\fR \fIexpression\fR
-Computes the expression and resets the values of the vector accordingly.
-Both scalar and vector math operations are allowed. All values in
-expressions are either real numbers or names of vectors. All numbers
-are treated as one component vectors.
-.TP
-\fIvecName \fBlength\fR ?\fInewSize\fR?
-Queries or resets the number of components in \fIvecName\fR.
-\fINewSize\fR is a number specifying the new size of the vector. If
-\fInewSize\fR is smaller than the current size of \fIvecName\fR,
-\fIvecName\fR is truncated. If \fInewSize\fR is greater, the vector
-is extended and the new components are initialized to \f(CW0.0\fR. If
-no \fInewSize\fR argument is present, the current length of the vector
-is returned.
-.TP
-\fIvecName \fBmerge\fR \fIsrcName\fR ?\fIsrcName\fR?...
-Merges the named vectors into a single vector. The resulting
-vector is formed by merging the components of each source vector
-one index at a time.
-.TP
-\fIvecName \fBnotify\fR \fIkeyword\fR
-Controls how vector clients are notified of changes to the vector.
-The exact behavior is determined by \fIkeyword\fR.
-.RS
-.TP 0.75i
-\f(CWalways\fR
-Indicates that clients are to be notified immediately whenever the
-vector is updated.
-.TP
-\f(CWnever\fR
-Indicates that no clients are to be notified.
-.TP
-\f(CWwhenidle\fR
-Indicates that clients are to be notified at the next idle point
-whenever the vector is updated.
-.TP
-\f(CWnow\fR
-If any client notifications is currently pending, they are notified
-immediately.
-.TP
-\f(CWcancel\fR
-Cancels pending notifications of clients using the vector.
-.TP
-\f(CWpending\fR
-Returns \f(CW1\fR if a client notification is pending, and \f(CW0\fR otherwise.
-.RE
-.TP
-\fIvecName \fBoffset\fR ?\fIvalue\fR?
-Shifts the indices of the vector by the amount specified by \fIvalue\fR.
-\fIValue\fR is an integer number. If no \fIvalue\fR argument is
-given, the current offset is returned.
-.TP
-\fIvecName \fBpopulate\fR \fIdestName\fR ?\fIdensity\fR?
-Creates a vector \fIdestName\fR which is a superset of \fIvecName\fR.
-\fIDestName\fR will include all the components of \fIvecName\fR, in
-addition the interval between each of the original components will
-contain a \fIdensity\fR number of new components, whose values are
-evenly distributed between the original components values. This is
-useful for generating abscissas to be interpolated along a spline.
-.TP
-\fIvecName \fBrange\fR \fIfirstIndex\fR ?\fIlastIndex\fR?...
-Returns a list of numeric values representing the vector components
-between two indices. Both \fIfirstIndex\fR and \fIlastIndex\fR are
-indices representing the range of components to be returned. If
-\fIlastIndex\fR is less than \fIfirstIndex\fR, the components are
-listed in reverse order.
-.TP
-\fIvecName \fBsearch\fR \fIvalue\fR ?\fIvalue\fR?
-Searches for a value or range of values among the components of
-\fIvecName\fR. If one \fIvalue\fR argument is given, a list of
-indices of the components which equal \fIvalue\fR is returned. If a
-second \fIvalue\fR is also provided, then the indices of all
-components which lie within the range of the two values are returned.
-If no components are found, then \f(CW""\fR is returned.
-.TP
-\fIvecName \fBset\fR \fIitem\fR
-Resets the components of the vector to \fIitem\fR. \fIItem\fR can
-be either a list of numeric expressions or another vector.
-.TP
-\fIvecName \fBseq\fR \fIstart\fR ?\fIfinish\fR? ?\fIstep\fR?
-Generates a sequence of values starting with the value \fIstart\fR.
-\fIFinish\fR indicates the terminating value of the sequence.
-The vector is automatically resized to contain just the sequence.
-If three arguments are present, \fIstep\fR designates the interval.
-.sp
-With only two arguments (no \fIfinish\fR argument), the sequence will
-continue until the vector is filled. With one argument, the interval
-defaults to 1.0.
-.TP
-\fIvecName \fBsort\fR ?\fB-reverse\fR? ?\fIargName\fR?...
-Sorts the vector \fIvecName\fR in increasing order. If the
-\fB-reverse\fR flag is present, the vector is sorted in decreasing
-order. If other arguments \fIargName\fR are present, they are the
-names of vectors which will be rearranged in the same manner as
-\fIvecName\fR. Each vector must be the same length as \fIvecName\fR.
-You could use this to sort the x vector of a graph, while still
-retaining the same x,y coordinate pairs in a y vector.
-.TP
-\fIvecName \fBvariable\fR \fIvarName\fR
-Maps a Tcl variable to the vector, creating another means for
-accessing the vector. The variable \fIvarName\fR can't already
-exist. This overrides any current variable mapping the vector
-may have.
-.RE
-.SH C LANGUAGE API
-You can create, modify, and destroy vectors from C code, using
-library routines.
-You need to include the header file \f(CWblt.h\fR. It contains the
-definition of the structure \fBBlt_Vector\fR, which represents the
-vector. It appears below.
-.CS
-\fRtypedef struct {
- double *\fIvalueArr\fR;
- int \fInumValues\fR;
- int \fIarraySize\fR;
- double \fImin\fR, \fImax\fR;
-} \fBBlt_Vector\fR;
-.CE
-The field \fIvalueArr\fR points to memory holding the vector
-components. The components are stored in a double precision array,
-whose size size is represented by \fIarraySize\fR. \fINumValues\fR is
-the length of vector. The size of the array is always equal to or
-larger than the length of the vector. \fIMin\fR and \fImax\fR are
-minimum and maximum component values.
-.SH LIBRARY ROUTINES
-The following routines are available from C to manage vectors.
-Vectors are identified by the vector name.
-.PP
-\fBBlt_CreateVector\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-int \fBBlt_CreateVector\fR (\fIinterp\fR, \fIvecName\fR, \fIlength\fR, \fIvecPtrPtr\fR)
-.RS 1.25i
-Tcl_Interp *\fIinterp\fR;
-char *\fIvecName\fR;
-int \fIlength\fR;
-Blt_Vector **\fIvecPtrPtr\fR;
-.RE
-.CE
-.TP
-Description:
-Creates a new vector \fIvecName\fR\fR with a length of \fIlength\fR.
-\fBBlt_CreateVector\fR creates both a new Tcl command and array
-variable \fIvecName\fR. Neither a command nor variable named
-\fIvecName\fR can already exist. A pointer to the vector is
-placed into \fIvecPtrPtr\fR.
-.TP
-Results:
-Returns \f(CWTCL_OK\fR if the vector is successfully created. If
-\fIlength\fR is negative, a Tcl variable or command \fIvecName\fR
-already exists, or memory cannot be allocated for the vector, then
-\f(CWTCL_ERROR\fR is returned and \fIinterp->result\fR will contain an
-error message.
-.RE
-.sp
-.PP
-\fBBlt_DeleteVectorByName\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-int \fBBlt_DeleteVectorByName\fR (\fIinterp\fR, \fIvecName\fR)
-.RS 1.25i
-Tcl_Interp *\fIinterp\fR;
-char *\fIvecName\fR;
-.RE
-.CE
-.TP 1i
-Description:
-Removes the vector \fIvecName\fR. \fIVecName\fR is the name of a vector
-which must already exist. Both the Tcl command and array variable
-\fIvecName\fR are destroyed. All clients of the vector will be notified
-immediately that the vector has been destroyed.
-.TP
-Results:
-Returns \f(CWTCL_OK\fR if the vector is successfully deleted. If
-\fIvecName\fR is not the name a vector, then \f(CWTCL_ERROR\fR is returned
-and \fIinterp->result\fR will contain an error message.
-.RE
-.sp
-.PP
-\fBBlt_DeleteVector\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-int \fBBlt_DeleteVector\fR (\fIvecPtr\fR)
-.RS 1.25i
-Blt_Vector *\fIvecPtr\fR;
-.RE
-.CE
-.TP 1i
-Description:
-Removes the vector pointed to by \fIvecPtr\fR. \fIVecPtr\fR is a
-pointer to a vector, typically set by \fBBlt_GetVector\fR or
-\fBBlt_CreateVector\fR. Both the Tcl command and array variable of
-the vector are destroyed. All clients of the vector will be notified
-immediately that the vector has been destroyed.
-.TP
-Results:
-Returns \f(CWTCL_OK\fR if the vector is successfully deleted. If
-\fIvecName\fR is not the name a vector, then \f(CWTCL_ERROR\fR is returned
-and \fIinterp->result\fR will contain an error message.
-.RE
-.sp
-.PP
-\fBBlt_GetVector\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-int \fBBlt_GetVector\fR (\fIinterp\fR, \fIvecName\fR, \fIvecPtrPtr\fR)
-.RS 1.25i
-Tcl_Interp *\fIinterp\fR;
-char *\fIvecName\fR;
-Blt_Vector **\fIvecPtrPtr\fR;
-.RE
-.CE
-.TP 1i
-Description:
-Retrieves the vector \fIvecName\fR. \fIVecName\fR is the name of a
-vector which must already exist. \fIVecPtrPtr\fR will point be set to
-the address of the vector.
-.TP
-Results:
-Returns \f(CWTCL_OK\fR if the vector is successfully retrieved. If
-\fIvecName\fR is not the name of a vector, then \f(CWTCL_ERROR\fR is
-returned and \fIinterp->result\fR will contain an error message.
-.RE
-.sp
-.PP
-\fBBlt_ResetVector\fR
-.PP
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-int \fBBlt_ResetVector\fR (\fIvecPtr\fR, \fIdataArr\fR,
- \fInumValues\fR, \fIarraySize\fR, \fIfreeProc\fR)
-.RS 1.25i
-Blt_Vector *\fIvecPtr\fR;
-double *\fIdataArr\fR;
-int *\fInumValues\fR;
-int *\fIarraySize\fR;
-Tcl_FreeProc *\fIfreeProc\fR;
-.RE
-.CE
-.TP
-Description:
-Resets the components of the vector pointed to by \fIvecPtr\fR.
-Calling \fBBlt_ResetVector\fR will trigger the vector to dispatch
-notifications to its clients. \fIDataArr\fR is the array of doubles
-which represents the vector data. \fINumValues\fR is the number of
-elements in the array. \fIArraySize\fR is the actual size of the array
-(the array may be bigger than the number of values stored in
-it). \fIFreeProc\fP indicates how the storage for the vector component
-array (\fIdataArr\fR) was allocated. It is used to determine how to
-reallocate memory when the vector is resized or destroyed. It must be
-\f(CWTCL_DYNAMIC\fR, \f(CWTCL_STATIC\fR, \f(CWTCL_VOLATILE\fR, or a pointer
-to a function to free the memory allocated for the vector array. If
-\fIfreeProc\fR is \f(CWTCL_VOLATILE\fR, it indicates that \fIdataArr\fR
-must be copied and saved. If \fIfreeProc\fR is \f(CWTCL_DYNAMIC\fR, it
-indicates that \fIdataArr\fR was dynamically allocated and that Tcl
-should free \fIdataArr\fR if necessary. \f(CWStatic\fR indicates that
-nothing should be done to release storage for \fIdataArr\fR.
-.TP
-Results:
-Returns \f(CWTCL_OK\fR if the vector is successfully resized. If
-\fInewSize\fR is negative, a vector \fIvecName\fR does not exist, or
-memory cannot be allocated for the vector, then \f(CWTCL_ERROR\fR is
-returned and \fIinterp->result\fR will contain an error message.
-.RE
-.sp
-.PP
-\fBBlt_ResizeVector\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-int \fBBlt_ResizeVector\fR (\fIvecPtr\fR, \fInewSize\fR)
-.RS 1.25i
-Blt_Vector *\fIvecPtr\fR;
-int \fInewSize\fR;
-.RE
-.CE
-.TP
-Description:
-Resets the length of the vector pointed to by \fIvecPtr\fR to
-\fInewSize\fR. If \fInewSize\fR is smaller than the current size of
-the vector, it is truncated. If \fInewSize\fR is greater, the vector
-is extended and the new components are initialized to \f(CW0.0\fR.
-Calling \fBBlt_ResetVector\fR will trigger the vector to dispatch
-notifications.
-.TP
-Results:
-Returns \f(CWTCL_OK\fR if the vector is successfully resized. If
-\fInewSize\fR is negative or memory can not be allocated for the vector,
-then \f(CWTCL_ERROR\fR is returned and \fIinterp->result\fR will contain
-an error message.
-.sp
-.PP
-\fBBlt_VectorExists\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-int \fBBlt_VectorExists\fR (\fIinterp\fR, \fIvecName\fR)
-.RS 1.25i
-Tcl_Interp *\fIinterp\fR;
-char *\fIvecName\fR;
-.RE
-.CE
-.TP
-Description:
-Indicates if a vector named \fIvecName\fR exists in \fIinterp\fR.
-.TP
-Results:
-Returns \f(CW1\fR if a vector \fIvecName\fR exists and \f(CW0\fR otherwise.
-.RE
-.sp
-.PP
-If your application needs to be notified when a vector changes, it can
-allocate a unique \fIclient identifier\fR for itself. Using this
-identifier, you can then register a call-back to be made whenever the
-vector is updated or destroyed. By default, the call-backs are made at
-the next idle point. This can be changed to occur at the time the
-vector is modified. An application can allocate more than one
-identifier for any vector. When the client application is done with
-the vector, it should free the identifier.
-.PP
-The call-back routine must of the following type.
-.CS
-.RS
-.sp
-typedef void (\fBBlt_VectorChangedProc\fR) (Tcl_Interp *\fIinterp\fR,
-.RS .25i
-ClientData \fIclientData\fR, Blt_VectorNotify \fInotify\fR);
-.RE
-.sp
-.RE
-.CE
-.fi
-\fIClientData\fR is passed to this routine whenever it is called. You
-can use this to pass information to the call-back. The \fInotify\fR
-argument indicates whether the vector has been updated of destroyed. It
-is an enumerated type.
-.CS
-.RS
-.sp
-typedef enum {
- \f(CWBLT_VECTOR_NOTIFY_UPDATE\fR=1,
- \f(CWBLT_VECTOR_NOTIFY_DESTROY\fR=2
-} \fBBlt_VectorNotify\fR;
-.sp
-.RE
-.CE
-.PP
-\fBBlt_AllocVectorId\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-Blt_VectorId \fBBlt_AllocVectorId\fR (\fIinterp\fR, \fIvecName\fR)
-.RS 1.25i
-Tcl_Interp *\fIinterp\fR;
-char *\fIvecName\fR;
-.RE
-.CE
-.TP
-Description:
-Allocates an client identifier for with the vector \fIvecName\fR.
-This identifier can be used to specify a call-back which is triggered
-when the vector is updated or destroyed.
-.TP
-Results:
-Returns a client identifier if successful. If \fIvecName\fR is not
-the name of a vector, then \f(CWNULL\fR is returned and
-\fIinterp->result\fR will contain an error message.
-.RE
-.sp
-.PP
-\fBBlt_GetVectorById\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-int \fBBlt_GetVector\fR (\fIinterp\fR, \fIclientId\fR, \fIvecPtrPtr\fR)
-.RS 1.25i
-Tcl_Interp *\fIinterp\fR;
-Blt_VectorId \fIclientId\fR;
-Blt_Vector **\fIvecPtrPtr\fR;
-.RE
-.CE
-.TP 1i
-Description:
-Retrieves the vector used by \fIclientId\fR. \fIClientId\fR is a valid
-vector client identifier allocated by \fBBlt_AllocVectorId\fR.
-\fIVecPtrPtr\fR will point be set to the address of the vector.
-.TP
-Results:
-Returns \f(CWTCL_OK\fR if the vector is successfully retrieved.
-.RE
-.sp
-.PP
-\fBBlt_SetVectorChangedProc\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-void \fBBlt_SetVectorChangedProc\fR (\fIclientId\fR, \fIproc\fR, \fIclientData\fR);
-.RS 1.25i
-Blt_VectorId \fIclientId\fR;
-Blt_VectorChangedProc *\fIproc\fR;
-ClientData *\fIclientData\fR;
-.RE
-.CE
-.TP
-Description:
-Specifies a call-back routine to be called whenever the vector
-associated with \fIclientId\fR is updated or deleted. \fIProc\fR is a
-pointer to call-back routine and must be of the type
-\fBBlt_VectorChangedProc\fR. \fIClientData\fR is a one-word value to
-be passed to the routine when it is invoked. If \fIproc\fR is
-\f(CWNULL\fR, then the client is not notified.
-.TP
-Results:
-The designated call-back procedure will be invoked when the vector is
-updated or destroyed.
-.RE
-.sp
-.PP
-\fBBlt_FreeVectorId\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-void \fBBlt_FreeVectorId\fR (\fIclientId\fR);
-.RS 1.25i
-Blt_VectorId \fIclientId\fR;
-.RE
-.CE
-.TP
-Description:
-Frees the client identifier. Memory allocated for the identifier
-is released. The client will no longer be notified when the
-vector is modified.
-.TP
-Results:
-The designated call-back procedure will be no longer be invoked when
-the vector is updated or destroyed.
-.RE
-.sp
-.PP
-\fBBlt_NameOfVectorId\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-char *\fBBlt_NameOfVectorId\fR (\fIclientId\fR);
-.RS 1.25i
-Blt_VectorId \fIclientId\fR;
-.RE
-.CE
-.TP
-Description:
-Retrieves the name of the vector associated with the client identifier
-\fIclientId\fR.
-.TP
-Results:
-Returns the name of the vector associated with \fIclientId\fR. If
-\fIclientId\fR is not an identifier or the vector has been destroyed,
-\f(CWNULL\fR is returned.
-.RE
-.sp
-.PP
-\fBBlt_InstallIndexProc\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-void \fBBlt_InstallIndexProc\fR (\fIindexName\fR, \fIprocPtr\fR)
-.RS 1.25i
-char *\fIindexName\fR;
-Blt_VectorIndexProc *\fIprocPtr\fR;
-.RE
-.CE
-.TP
-Description:
-Registers a function to be called to retrieved the index \fIindexName\fR
-from the vector's array variable.
-.sp
-typedef double Blt_VectorIndexProc(Vector *vecPtr);
-.sp
-The function will be passed a pointer to the vector. The function must
-return a double representing the value at the index.
-.TP
-Results:
-The new index is installed into the vector.
-.RE
-.RE
-.SH C API EXAMPLE
-The following example opens a file of binary data and stores it in an
-array of doubles. The array size is computed from the size of the
-file. If the vector "data" exists, calling \fBBlt_VectorExists\fR,
-\fBBlt_GetVector\fR is called to get the pointer to the vector.
-Otherwise the routine \fBBlt_CreateVector\fR is called to create a new
-vector and returns a pointer to it. Just like the Tcl interface, both
-a new Tcl command and array variable are created when a new vector is
-created. It doesn't make any difference what the initial size of the
-vector is since it will be reset shortly. The vector is updated when
-\fBlt_ResetVector\fR is called. Blt_ResetVector makes the changes
-visible to the Tcl interface and other vector clients (such as a graph
-widget).
-.sp
-.CS
-#include <tcl.h>
-#include <blt.h>
-...
-Blt_Vector *vecPtr;
-double *newArr;
-FILE *f;
-struct stat statBuf;
-int numBytes, numValues;
-
-f = fopen("binary.dat", "r");
-fstat(fileno(f), &statBuf);
-numBytes = (int)statBuf.st_size;
-
-/* Allocate an array big enough to hold all the data */
-newArr = (double *)malloc(numBytes);
-numValues = numBytes / sizeof(double);
-fread((void *)newArr, numValues, sizeof(double), f);
-fclose(f);
-
-if (Blt_VectorExists(interp, "data")) {
- if (Blt_GetVector(interp, "data", &vecPtr) != TCL_OK) {
- return TCL_ERROR;
- }
-} else {
- if (Blt_CreateVector(interp, "data", 0, &vecPtr) != TCL_OK) {
- return TCL_ERROR;
- }
-}
-/*
- * Reset the vector. Clients will be notified when Tk is idle.
- * TCL_DYNAMIC tells the vector to free the memory allocated
- * if it needs to reallocate or destroy the vector.
- */
-if (Blt_ResetVector(vecPtr, newArr, numValues, numValues,
- TCL_DYNAMIC) != TCL_OK) {
- return TCL_ERROR;
-}
-.CE
-.SH "INCOMPATIBILITIES"
-In previous versions, if the array variable isn't global
-(i.e. local to a Tcl procedure), the vector is automatically
-destroyed when the procedure returns.
-.CS
-proc doit {} {
- # Temporary vector x
- vector x(10)
- set x(9) 2.0
- ...
-}
-.CE
-.PP
-This has changed. Variables are not automatically destroyed when
-their variable is unset. You can restore the old behavior by
-setting the "-watchunset" switch.
-.CE
-.SH KEYWORDS
-vector, graph, widget