ListObj.3
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:10k
源码类别:

通讯编程

开发平台:

Visual C++

  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. .so man.macros
  10. .TH Tcl_ListObj 3 8.0 Tcl "Tcl Library Procedures"
  11. .BS
  12. .SH NAME
  13. Tcl_ListObjAppendList, Tcl_ListObjAppendElement, Tcl_NewListObj, Tcl_SetListObj, Tcl_ListObjGetElements, Tcl_ListObjLength, Tcl_ListObjIndex, Tcl_ListObjReplace - manipulate Tcl objects as lists
  14. .SH SYNOPSIS
  15. .nf
  16. fB#include <tcl.h>fR
  17. .sp
  18. int
  19. fBTcl_ListObjAppendListfR(fIinterp, listPtr, elemListPtrfR)
  20. .sp
  21. int
  22. fBTcl_ListObjAppendElementfR(fIinterp, listPtr, objPtrfR)
  23. .sp
  24. Tcl_Obj *
  25. fBTcl_NewListObjfR(fIobjc, objvfR)
  26. .sp
  27. fBTcl_SetListObjfR(fIobjPtr, objc, objvfR)
  28. .sp
  29. int
  30. fBTcl_ListObjGetElementsfR(fIinterp, listPtr, objcPtr, objvPtrfR)
  31. .sp
  32. int
  33. fBTcl_ListObjLengthfR(fIinterp, listPtr, intPtrfR)
  34. .sp
  35. int
  36. fBTcl_ListObjIndexfR(fIinterp, listPtr, index, objPtrPtrfR)
  37. .sp
  38. int
  39. fBTcl_ListObjReplacefR(fIinterp, listPtr, first, count, objc, objvfR)
  40. .SH ARGUMENTS
  41. .AS Tcl_Interp "*CONST objv[]" out
  42. .AP Tcl_Interp *interp in
  43. If an error occurs while converting an object to be a list object,
  44. an error message is left in the interpreter's result object
  45. unless fIinterpfR is NULL.
  46. .AP Tcl_Obj *listPtr in/out
  47. Points to the list object to be manipulated.
  48. If fIlistPtrfR does not already point to a list object,
  49. an attempt will be made to convert it to one.
  50. .AP Tcl_Obj *elemListPtr in/out
  51. For fBTcl_ListObjAppendListfR, this points to a list object
  52. containing elements to be appended onto fIlistPtrfR.
  53. Each element of *fIelemListPtrfR will
  54. become a new element of fIlistPtrfR.
  55. If *fIelemListPtrfR is not NULL and
  56. does not already point to a list object,
  57. an attempt will be made to convert it to one.
  58. .AP Tcl_Obj *objPtr in
  59. For fBTcl_ListObjAppendElementfR,
  60. points to the Tcl object that will be appended to fIlistPtrfR.
  61. For fBTcl_SetListObjfR,
  62. this points to the Tcl object that will be converted to a list object
  63. containing the fIobjcfR elements of the array referenced by fIobjvfR.
  64. .AP int *objcPtr in
  65. Points to location where fBTcl_ListObjGetElementsfR
  66. stores the number of element objects in fIlistPtrfR.
  67. .AP Tcl_Obj ***objvPtr out
  68. A location where fBTcl_ListObjGetElementsfR stores a pointer to an array
  69. of pointers to the element objects of fIlistPtrfR.  
  70. .AP int objc in
  71. The number of Tcl objects that fBTcl_NewListObjfR
  72. will insert into a new list object,
  73. and fBTcl_ListObjReplacefR will insert into fIlistPtrfR.
  74. For fBTcl_SetListObjfR,
  75. the number of Tcl objects to insert into fIobjPtrfR.
  76. .VS
  77. .AP Tcl_Obj "*CONST objv[]" in
  78. An array of pointers to objects.
  79. fBTcl_NewListObjfR will insert these objects into a new list object
  80. and fBTcl_ListObjReplacefR will insert them into an existing fIlistPtrfR.
  81. Each object will become a separate list element.  
  82. .VE
  83. .AP int *intPtr out
  84. Points to location where fBTcl_ListObjLengthfR
  85. stores the length of the list.
  86. .AP int index in
  87. Index of the list element that fBTcl_ListObjIndexfR
  88. is to return.
  89. The first element has index 0.
  90. .AP Tcl_Obj **objPtrPtr out
  91. Points to place where fBTcl_ListObjIndexfR is to store
  92. a pointer to the resulting list element object.
  93. .AP int first in
  94. Index of the starting list element that fBTcl_ListObjReplacefR
  95. is to replace.
  96. The list's first element has index 0.
  97. .AP int count in
  98. The number of elements that fBTcl_ListObjReplacefR
  99. is to replace.
  100. .BE
  101. .SH DESCRIPTION
  102. .PP
  103. Tcl list objects have an internal representation that supports
  104. the efficient indexing and appending.
  105. The procedures described in this man page are used to
  106. create, modify, index, and append to Tcl list objects from C code.
  107. .PP
  108. fBTcl_ListObjAppendListfR and fBTcl_ListObjAppendElementfR
  109. both add one or more objects
  110. to the end of the list object referenced by fIlistPtrfR.
  111. fBTcl_ListObjAppendListfR appends each element of the list object
  112. referenced by fIelemListPtrfR while
  113. fBTcl_ListObjAppendElementfR appends the single object
  114. referenced by fIobjPtrfR.
  115. Both procedures will convert the object referenced by fIlistPtrfR
  116. to a list object if necessary.
  117. If an error occurs during conversion,
  118. both procedures return fBTCL_ERRORfR and leave an error message
  119. in the interpreter's result object if fIinterpfR is not NULL.
  120. Similarly, if fIelemListPtrfR does not already refer to a list object,
  121. fBTcl_ListObjAppendListfR will attempt to convert it to one
  122. and if an error occurs during conversion,
  123. will return fBTCL_ERRORfR
  124. and leave an error message in the interpreter's result object
  125. if interp is not NULL.
  126. Both procedures invalidate any old string representation of fIlistPtrfR
  127. and, if it was converted to a list object,
  128. free any old internal representation.
  129. Similarly, fBTcl_ListObjAppendListfR frees any old internal representation
  130. of fIelemListPtrfR if it converts it to a list object.
  131. After appending each element in fIelemListPtrfR,
  132. fBTcl_ListObjAppendListfR increments the element's reference count
  133. since fIlistPtrfR now also refers to it.
  134. For the same reason, fBTcl_ListObjAppendElementfR
  135. increments fIobjPtrfR's reference count.
  136. If no error occurs,
  137. the two procedures return fBTCL_OKfR after appending the objects.
  138. .PP
  139. fBTcl_NewListObjfR and fBTcl_SetListObjfR
  140. create a new object or modify an existing object to hold 
  141. the fIobjcfR elements of the array referenced by fIobjvfR
  142. where each element is a pointer to a Tcl object.
  143. If fIobjcfR is less than or equal to zero,
  144. they return an empty object.
  145. The new object's string representation is left invalid.
  146. The two procedures increment the reference counts
  147. of the elements in fIobjcfR since the list object now refers to them.
  148. The new list object returned by fBTcl_NewListObjfR
  149. has reference count zero.
  150. .PP
  151. fBTcl_ListObjGetElementsfR returns a count and a pointer to an array of
  152. the elements in a list object.  It returns the count by storing it in the
  153. address fIobjcPtrfR.  Similarly, it returns the array pointer by storing
  154. it in the address fIobjvPtrfR.
  155. The memory pointed to is managed by Tcl and should not be freed by the
  156. caller.
  157. If fIlistPtrfR is not already a list object, fBTcl_ListObjGetElementsfR
  158. will attempt to convert it to one; if the conversion fails, it returns
  159. fBTCL_ERRORfR and leaves an error message in the interpreter's result
  160. object if fIinterpfR is not NULL.
  161. Otherwise it returns fBTCL_OKfR after storing the count and array pointer.
  162. .PP
  163. fBTcl_ListObjLengthfR returns the number of elements in the list object
  164. referenced by fIlistPtrfR.
  165. It returns this count by storing an integer in the address fIintPtrfR.
  166. If the object is not already a list object,
  167. fBTcl_ListObjLengthfR will attempt to convert it to one;
  168. if the conversion fails, it returns fBTCL_ERRORfR
  169. and leaves an error message in the interpreter's result object
  170. if fIinterpfR is not NULL.
  171. Otherwise it returns fBTCL_OKfR after storing the list's length.
  172. .PP
  173. The procedure fBTcl_ListObjIndexfR returns a pointer to the object
  174. at element fIindexfR in the list referenced by fIlistPtrfR.
  175. It returns this object by storing a pointer to it
  176. in the address fIobjPtrPtrfR.
  177. If fIlistPtrfR does not already refer to a list object,
  178. fBTcl_ListObjIndexfR will attempt to convert it to one;
  179. if the conversion fails, it returns fBTCL_ERRORfR
  180. and leaves an error message in the interpreter's result object
  181. if fIinterpfR is not NULL.
  182. If the index is out of range,
  183. that is, fIindexfR is negative or
  184. greater than or equal to the number of elements in the list,
  185. fBTcl_ListObjIndexfR stores a NULL in fIobjPtrPtrfR
  186. and returns fBTCL_OKfR.
  187. Otherwise it returns fBTCL_OKfR after storing the element's
  188. object pointer.
  189. The reference count for the list element is not incremented;
  190. the caller must do that if it needs to retain a pointer to the element.
  191. .PP
  192. fBTcl_ListObjReplacefR replaces zero or more elements
  193. of the list referenced by fIlistPtrfR
  194. with the fIobjcfR objects in the array referenced by fIobjvfR.
  195. If fIlistPtrfR does not point to a list object,
  196. fBTcl_ListObjReplacefR will attempt to convert it to one;
  197. if the conversion fails, it returns fBTCL_ERRORfR
  198. and leaves an error message in the interpreter's result object
  199. if fIinterpfR is not NULL.
  200. Otherwise, it returns fBTCL_OKfR after replacing the objects.
  201. If fIobjvfR is NULL, no new elements are added.
  202. If the argument fIfirstfR is zero or negative,
  203. it refers to the first element.
  204. If fIfirstfR is greater than or equal to the
  205. number of elements in the list, then no elements are deleted;
  206. the new elements are appended to the list.
  207. fIcountfR gives the number of elements to replace.
  208. If fIcountfR is zero or negative then no elements are deleted;
  209. the new elements are simply inserted before the one
  210. designated by fIfirstfR.
  211. fBTcl_ListObjReplacefR invalidates fIlistPtrfR's
  212. old string representation.
  213. The reference counts of any elements inserted from fIobjvfR
  214. are incremented since the resulting list now refers to them.
  215. Similarly, the reference counts for any replaced objects are decremented.
  216. .PP
  217. Because fBTcl_ListObjReplacefR combines
  218. both element insertion and deletion,
  219. it can be used to implement a number of list operations.
  220. For example, the following code inserts the fIobjcfR objects
  221. referenced by the array of object pointers fIobjvfR
  222. just before the element fIindexfR of the list referenced by fIlistPtrfR:
  223. .CS
  224. result = Tcl_ListObjReplace(interp, listPtr, index, 0, objc, objv);
  225. .CE
  226. Similarly, the following code appends the fIobjcfR objects
  227. referenced by the array fIobjvfR
  228. to the end of the list fIlistPtrfR:
  229. .CS
  230. result = Tcl_ListObjLength(interp, listPtr, &length);
  231. if (result == TCL_OK) {
  232. result = Tcl_ListObjReplace(interp, listPtr, length, 0, objc, objv);
  233. }
  234. .CE
  235. The fIcountfR list elements starting at fIfirstfR can be deleted
  236. by simply calling fBTcl_ListObjReplacefR
  237. with a NULL fIobjvPtrfR:
  238. .CS
  239. result = Tcl_ListObjReplace(interp, listPtr, first, count, 0, NULL);
  240. .CE
  241. .SH "SEE ALSO"
  242. Tcl_NewObj, Tcl_DecrRefCount, Tcl_IncrRefCount, Tcl_GetObjResult
  243. .SH KEYWORDS
  244. append, index, insert, internal representation, length, list, list object, list type, object, object type, replace, string representation