Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / amd64 / man / man3 / Tcl_ListObjAppendElement.3
CommitLineData
920dae64
AT
1'\"
2'\" Copyright (c) 1996-1997 Sun Microsystems, Inc.
3'\"
4'\" See the file "license.terms" for information on usage and redistribution
5'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
6'\"
7'\" RCS: @(#) $Id: ListObj.3,v 1.4 2000/01/26 03:37:30 hobbs Exp $
8'\"
9'\" The definitions below are for supplemental macros used in Tcl/Tk
10'\" manual entries.
11'\"
12'\" .AP type name in/out ?indent?
13'\" Start paragraph describing an argument to a library procedure.
14'\" type is type of argument (int, etc.), in/out is either "in", "out",
15'\" or "in/out" to describe whether procedure reads or modifies arg,
16'\" and indent is equivalent to second arg of .IP (shouldn't ever be
17'\" needed; use .AS below instead)
18'\"
19'\" .AS ?type? ?name?
20'\" Give maximum sizes of arguments for setting tab stops. Type and
21'\" name are examples of largest possible arguments that will be passed
22'\" to .AP later. If args are omitted, default tab stops are used.
23'\"
24'\" .BS
25'\" Start box enclosure. From here until next .BE, everything will be
26'\" enclosed in one large box.
27'\"
28'\" .BE
29'\" End of box enclosure.
30'\"
31'\" .CS
32'\" Begin code excerpt.
33'\"
34'\" .CE
35'\" End code excerpt.
36'\"
37'\" .VS ?version? ?br?
38'\" Begin vertical sidebar, for use in marking newly-changed parts
39'\" of man pages. The first argument is ignored and used for recording
40'\" the version when the .VS was added, so that the sidebars can be
41'\" found and removed when they reach a certain age. If another argument
42'\" is present, then a line break is forced before starting the sidebar.
43'\"
44'\" .VE
45'\" End of vertical sidebar.
46'\"
47'\" .DS
48'\" Begin an indented unfilled display.
49'\"
50'\" .DE
51'\" End of indented unfilled display.
52'\"
53'\" .SO
54'\" Start of list of standard options for a Tk widget. The
55'\" options follow on successive lines, in four columns separated
56'\" by tabs.
57'\"
58'\" .SE
59'\" End of list of standard options for a Tk widget.
60'\"
61'\" .OP cmdName dbName dbClass
62'\" Start of description of a specific option. cmdName gives the
63'\" option's name as specified in the class command, dbName gives
64'\" the option's name in the option database, and dbClass gives
65'\" the option's class in the option database.
66'\"
67'\" .UL arg1 arg2
68'\" Print arg1 underlined, then print arg2 normally.
69'\"
70'\" RCS: @(#) $Id: man.macros,v 1.4 2000/08/25 06:18:32 ericm Exp $
71'\"
72'\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
73.if t .wh -1.3i ^B
74.nr ^l \n(.l
75.ad b
76'\" # Start an argument description
77.de AP
78.ie !"\\$4"" .TP \\$4
79.el \{\
80. ie !"\\$2"" .TP \\n()Cu
81. el .TP 15
82.\}
83.ta \\n()Au \\n()Bu
84.ie !"\\$3"" \{\
85\&\\$1 \\fI\\$2\\fP (\\$3)
86.\".b
87.\}
88.el \{\
89.br
90.ie !"\\$2"" \{\
91\&\\$1 \\fI\\$2\\fP
92.\}
93.el \{\
94\&\\fI\\$1\\fP
95.\}
96.\}
97..
98'\" # define tabbing values for .AP
99.de AS
100.nr )A 10n
101.if !"\\$1"" .nr )A \\w'\\$1'u+3n
102.nr )B \\n()Au+15n
103.\"
104.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
105.nr )C \\n()Bu+\\w'(in/out)'u+2n
106..
107.AS Tcl_Interp Tcl_CreateInterp in/out
108'\" # BS - start boxed text
109'\" # ^y = starting y location
110'\" # ^b = 1
111.de BS
112.br
113.mk ^y
114.nr ^b 1u
115.if n .nf
116.if n .ti 0
117.if n \l'\\n(.lu\(ul'
118.if n .fi
119..
120'\" # BE - end boxed text (draw box now)
121.de BE
122.nf
123.ti 0
124.mk ^t
125.ie n \l'\\n(^lu\(ul'
126.el \{\
127.\" Draw four-sided box normally, but don't draw top of
128.\" box if the box started on an earlier page.
129.ie !\\n(^b-1 \{\
130\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
131.\}
132.el \}\
133\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
134.\}
135.\}
136.fi
137.br
138.nr ^b 0
139..
140'\" # VS - start vertical sidebar
141'\" # ^Y = starting y location
142'\" # ^v = 1 (for troff; for nroff this doesn't matter)
143.de VS
144.if !"\\$2"" .br
145.mk ^Y
146.ie n 'mc \s12\(br\s0
147.el .nr ^v 1u
148..
149'\" # VE - end of vertical sidebar
150.de VE
151.ie n 'mc
152.el \{\
153.ev 2
154.nf
155.ti 0
156.mk ^t
157\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
158.sp -1
159.fi
160.ev
161.\}
162.nr ^v 0
163..
164'\" # Special macro to handle page bottom: finish off current
165'\" # box/sidebar if in box/sidebar mode, then invoked standard
166'\" # page bottom macro.
167.de ^B
168.ev 2
169'ti 0
170'nf
171.mk ^t
172.if \\n(^b \{\
173.\" Draw three-sided box if this is the box's first page,
174.\" draw two sides but no top otherwise.
175.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
176.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
177.\}
178.if \\n(^v \{\
179.nr ^x \\n(^tu+1v-\\n(^Yu
180\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
181.\}
182.bp
183'fi
184.ev
185.if \\n(^b \{\
186.mk ^y
187.nr ^b 2
188.\}
189.if \\n(^v \{\
190.mk ^Y
191.\}
192..
193'\" # DS - begin display
194.de DS
195.RS
196.nf
197.sp
198..
199'\" # DE - end display
200.de DE
201.fi
202.RE
203.sp
204..
205'\" # SO - start of list of standard options
206.de SO
207.SH "STANDARD OPTIONS"
208.LP
209.nf
210.ta 5.5c 11c
211.ft B
212..
213'\" # SE - end of list of standard options
214.de SE
215.fi
216.ft R
217.LP
218See the \\fBoptions\\fR manual entry for details on the standard options.
219..
220'\" # OP - start of full description for a single option
221.de OP
222.LP
223.nf
224.ta 4c
225Command-Line Name: \\fB\\$1\\fR
226Database Name: \\fB\\$2\\fR
227Database Class: \\fB\\$3\\fR
228.fi
229.IP
230..
231'\" # CS - begin code excerpt
232.de CS
233.RS
234.nf
235.ta .25i .5i .75i 1i
236..
237'\" # CE - end code excerpt
238.de CE
239.fi
240.RE
241..
242.de UL
243\\$1\l'|0\(ul'\\$2
244..
245.TH Tcl_ListObj 3 8.0 Tcl "Tcl Library Procedures"
246.BS
247.SH NAME
248Tcl_ListObjAppendList, Tcl_ListObjAppendElement, Tcl_NewListObj, Tcl_SetListObj, Tcl_ListObjGetElements, Tcl_ListObjLength, Tcl_ListObjIndex, Tcl_ListObjReplace \- manipulate Tcl objects as lists
249.SH SYNOPSIS
250.nf
251\fB#include <tcl.h>\fR
252.sp
253int
254\fBTcl_ListObjAppendList\fR(\fIinterp, listPtr, elemListPtr\fR)
255.sp
256int
257\fBTcl_ListObjAppendElement\fR(\fIinterp, listPtr, objPtr\fR)
258.sp
259Tcl_Obj *
260\fBTcl_NewListObj\fR(\fIobjc, objv\fR)
261.sp
262\fBTcl_SetListObj\fR(\fIobjPtr, objc, objv\fR)
263.sp
264int
265\fBTcl_ListObjGetElements\fR(\fIinterp, listPtr, objcPtr, objvPtr\fR)
266.sp
267int
268\fBTcl_ListObjLength\fR(\fIinterp, listPtr, intPtr\fR)
269.sp
270int
271\fBTcl_ListObjIndex\fR(\fIinterp, listPtr, index, objPtrPtr\fR)
272.sp
273int
274\fBTcl_ListObjReplace\fR(\fIinterp, listPtr, first, count, objc, objv\fR)
275.SH ARGUMENTS
276.AS Tcl_Interp "*CONST objv[]" out
277.AP Tcl_Interp *interp in
278If an error occurs while converting an object to be a list object,
279an error message is left in the interpreter's result object
280unless \fIinterp\fR is NULL.
281.AP Tcl_Obj *listPtr in/out
282Points to the list object to be manipulated.
283If \fIlistPtr\fR does not already point to a list object,
284an attempt will be made to convert it to one.
285.AP Tcl_Obj *elemListPtr in/out
286For \fBTcl_ListObjAppendList\fR, this points to a list object
287containing elements to be appended onto \fIlistPtr\fR.
288Each element of *\fIelemListPtr\fR will
289become a new element of \fIlistPtr\fR.
290If *\fIelemListPtr\fR is not NULL and
291does not already point to a list object,
292an attempt will be made to convert it to one.
293.AP Tcl_Obj *objPtr in
294For \fBTcl_ListObjAppendElement\fR,
295points to the Tcl object that will be appended to \fIlistPtr\fR.
296For \fBTcl_SetListObj\fR,
297this points to the Tcl object that will be converted to a list object
298containing the \fIobjc\fR elements of the array referenced by \fIobjv\fR.
299.AP int *objcPtr in
300Points to location where \fBTcl_ListObjGetElements\fR
301stores the number of element objects in \fIlistPtr\fR.
302.AP Tcl_Obj ***objvPtr out
303A location where \fBTcl_ListObjGetElements\fR stores a pointer to an array
304of pointers to the element objects of \fIlistPtr\fR.
305.AP int objc in
306The number of Tcl objects that \fBTcl_NewListObj\fR
307will insert into a new list object,
308and \fBTcl_ListObjReplace\fR will insert into \fIlistPtr\fR.
309For \fBTcl_SetListObj\fR,
310the number of Tcl objects to insert into \fIobjPtr\fR.
311.VS
312.AP Tcl_Obj "*CONST\ objv[]" in
313An array of pointers to objects.
314\fBTcl_NewListObj\fR will insert these objects into a new list object
315and \fBTcl_ListObjReplace\fR will insert them into an existing \fIlistPtr\fR.
316Each object will become a separate list element.
317.VE
318.AP int *intPtr out
319Points to location where \fBTcl_ListObjLength\fR
320stores the length of the list.
321.AP int index in
322Index of the list element that \fBTcl_ListObjIndex\fR
323is to return.
324The first element has index 0.
325.AP Tcl_Obj **objPtrPtr out
326Points to place where \fBTcl_ListObjIndex\fR is to store
327a pointer to the resulting list element object.
328.AP int first in
329Index of the starting list element that \fBTcl_ListObjReplace\fR
330is to replace.
331The list's first element has index 0.
332.AP int count in
333The number of elements that \fBTcl_ListObjReplace\fR
334is to replace.
335.BE
336
337.SH DESCRIPTION
338.PP
339Tcl list objects have an internal representation that supports
340the efficient indexing and appending.
341The procedures described in this man page are used to
342create, modify, index, and append to Tcl list objects from C code.
343.PP
344\fBTcl_ListObjAppendList\fR and \fBTcl_ListObjAppendElement\fR
345both add one or more objects
346to the end of the list object referenced by \fIlistPtr\fR.
347\fBTcl_ListObjAppendList\fR appends each element of the list object
348referenced by \fIelemListPtr\fR while
349\fBTcl_ListObjAppendElement\fR appends the single object
350referenced by \fIobjPtr\fR.
351Both procedures will convert the object referenced by \fIlistPtr\fR
352to a list object if necessary.
353If an error occurs during conversion,
354both procedures return \fBTCL_ERROR\fR and leave an error message
355in the interpreter's result object if \fIinterp\fR is not NULL.
356Similarly, if \fIelemListPtr\fR does not already refer to a list object,
357\fBTcl_ListObjAppendList\fR will attempt to convert it to one
358and if an error occurs during conversion,
359will return \fBTCL_ERROR\fR
360and leave an error message in the interpreter's result object
361if interp is not NULL.
362Both procedures invalidate any old string representation of \fIlistPtr\fR
363and, if it was converted to a list object,
364free any old internal representation.
365Similarly, \fBTcl_ListObjAppendList\fR frees any old internal representation
366of \fIelemListPtr\fR if it converts it to a list object.
367After appending each element in \fIelemListPtr\fR,
368\fBTcl_ListObjAppendList\fR increments the element's reference count
369since \fIlistPtr\fR now also refers to it.
370For the same reason, \fBTcl_ListObjAppendElement\fR
371increments \fIobjPtr\fR's reference count.
372If no error occurs,
373the two procedures return \fBTCL_OK\fR after appending the objects.
374.PP
375\fBTcl_NewListObj\fR and \fBTcl_SetListObj\fR
376create a new object or modify an existing object to hold
377the \fIobjc\fR elements of the array referenced by \fIobjv\fR
378where each element is a pointer to a Tcl object.
379If \fIobjc\fR is less than or equal to zero,
380they return an empty object.
381The new object's string representation is left invalid.
382The two procedures increment the reference counts
383of the elements in \fIobjc\fR since the list object now refers to them.
384The new list object returned by \fBTcl_NewListObj\fR
385has reference count zero.
386.PP
387\fBTcl_ListObjGetElements\fR returns a count and a pointer to an array of
388the elements in a list object. It returns the count by storing it in the
389address \fIobjcPtr\fR. Similarly, it returns the array pointer by storing
390it in the address \fIobjvPtr\fR.
391The memory pointed to is managed by Tcl and should not be freed by the
392caller.
393If \fIlistPtr\fR is not already a list object, \fBTcl_ListObjGetElements\fR
394will attempt to convert it to one; if the conversion fails, it returns
395\fBTCL_ERROR\fR and leaves an error message in the interpreter's result
396object if \fIinterp\fR is not NULL.
397Otherwise it returns \fBTCL_OK\fR after storing the count and array pointer.
398.PP
399\fBTcl_ListObjLength\fR returns the number of elements in the list object
400referenced by \fIlistPtr\fR.
401It returns this count by storing an integer in the address \fIintPtr\fR.
402If the object is not already a list object,
403\fBTcl_ListObjLength\fR will attempt to convert it to one;
404if the conversion fails, it returns \fBTCL_ERROR\fR
405and leaves an error message in the interpreter's result object
406if \fIinterp\fR is not NULL.
407Otherwise it returns \fBTCL_OK\fR after storing the list's length.
408.PP
409The procedure \fBTcl_ListObjIndex\fR returns a pointer to the object
410at element \fIindex\fR in the list referenced by \fIlistPtr\fR.
411It returns this object by storing a pointer to it
412in the address \fIobjPtrPtr\fR.
413If \fIlistPtr\fR does not already refer to a list object,
414\fBTcl_ListObjIndex\fR will attempt to convert it to one;
415if the conversion fails, it returns \fBTCL_ERROR\fR
416and leaves an error message in the interpreter's result object
417if \fIinterp\fR is not NULL.
418If the index is out of range,
419that is, \fIindex\fR is negative or
420greater than or equal to the number of elements in the list,
421\fBTcl_ListObjIndex\fR stores a NULL in \fIobjPtrPtr\fR
422and returns \fBTCL_OK\fR.
423Otherwise it returns \fBTCL_OK\fR after storing the element's
424object pointer.
425The reference count for the list element is not incremented;
426the caller must do that if it needs to retain a pointer to the element.
427.PP
428\fBTcl_ListObjReplace\fR replaces zero or more elements
429of the list referenced by \fIlistPtr\fR
430with the \fIobjc\fR objects in the array referenced by \fIobjv\fR.
431If \fIlistPtr\fR does not point to a list object,
432\fBTcl_ListObjReplace\fR will attempt to convert it to one;
433if the conversion fails, it returns \fBTCL_ERROR\fR
434and leaves an error message in the interpreter's result object
435if \fIinterp\fR is not NULL.
436Otherwise, it returns \fBTCL_OK\fR after replacing the objects.
437If \fIobjv\fR is NULL, no new elements are added.
438If the argument \fIfirst\fR is zero or negative,
439it refers to the first element.
440If \fIfirst\fR is greater than or equal to the
441number of elements in the list, then no elements are deleted;
442the new elements are appended to the list.
443\fIcount\fR gives the number of elements to replace.
444If \fIcount\fR is zero or negative then no elements are deleted;
445the new elements are simply inserted before the one
446designated by \fIfirst\fR.
447\fBTcl_ListObjReplace\fR invalidates \fIlistPtr\fR's
448old string representation.
449The reference counts of any elements inserted from \fIobjv\fR
450are incremented since the resulting list now refers to them.
451Similarly, the reference counts for any replaced objects are decremented.
452.PP
453Because \fBTcl_ListObjReplace\fR combines
454both element insertion and deletion,
455it can be used to implement a number of list operations.
456For example, the following code inserts the \fIobjc\fR objects
457referenced by the array of object pointers \fIobjv\fR
458just before the element \fIindex\fR of the list referenced by \fIlistPtr\fR:
459.CS
460result = Tcl_ListObjReplace(interp, listPtr, index, 0, objc, objv);
461.CE
462Similarly, the following code appends the \fIobjc\fR objects
463referenced by the array \fIobjv\fR
464to the end of the list \fIlistPtr\fR:
465.CS
466result = Tcl_ListObjLength(interp, listPtr, &length);
467if (result == TCL_OK) {
468 result = Tcl_ListObjReplace(interp, listPtr, length, 0, objc, objv);
469}
470.CE
471The \fIcount\fR list elements starting at \fIfirst\fR can be deleted
472by simply calling \fBTcl_ListObjReplace\fR
473with a NULL \fIobjvPtr\fR:
474.CS
475result = Tcl_ListObjReplace(interp, listPtr, first, count, 0, NULL);
476.CE
477
478.SH "SEE ALSO"
479Tcl_NewObj, Tcl_DecrRefCount, Tcl_IncrRefCount, Tcl_GetObjResult
480
481.SH KEYWORDS
482append, index, insert, internal representation, length, list, list object, list type, object, object type, replace, string representation