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

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1994-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: StringObj.3,v 1.13.2.1 2003/07/18 16:56:24 dgp Exp $
  8. '" 
  9. .so man.macros
  10. .TH Tcl_StringObj 3 8.1 Tcl "Tcl Library Procedures"
  11. .BS
  12. .SH NAME
  13. Tcl_NewStringObj, Tcl_NewUnicodeObj, Tcl_SetStringObj, Tcl_SetUnicodeObj, Tcl_GetStringFromObj, Tcl_GetString, Tcl_GetUnicodeFromObj, Tcl_GetUnicode, Tcl_GetUniChar, Tcl_GetCharLength, Tcl_GetRange, Tcl_AppendToObj, Tcl_AppendUnicodeToObj, Tcl_AppendStringsToObj, Tcl_AppendStringsToObjVA, Tcl_AppendObjToObj, Tcl_SetObjLength, Tcl_ConcatObj, Tcl_AttemptSetObjLength - manipulate Tcl objects as strings
  14. .SH SYNOPSIS
  15. .nf
  16. fB#include <tcl.h>fR
  17. .sp
  18. Tcl_Obj *
  19. fBTcl_NewStringObjfR(fIbytes, lengthfR)
  20. .sp
  21. Tcl_Obj *
  22. fBTcl_NewUnicodeObjfR(fIunicode, numCharsfR)
  23. .sp
  24. void
  25. fBTcl_SetStringObjfR(fIobjPtr, bytes, lengthfR)
  26. .sp
  27. void
  28. fBTcl_SetUnicodeObjfR(fIobjPtr, unicode, numCharsfR)
  29. .sp
  30. char *
  31. fBTcl_GetStringFromObjfR(fIobjPtr, lengthPtrfR)
  32. .sp
  33. char *
  34. fBTcl_GetStringfR(fIobjPtrfR)
  35. .sp
  36. Tcl_UniChar *
  37. fBTcl_GetUnicodeFromObjfR(fIobjPtr, lengthPtrfR)
  38. .sp
  39. Tcl_UniChar *
  40. fBTcl_GetUnicodefR(fIobjPtrfR)
  41. .sp
  42. Tcl_UniChar
  43. fBTcl_GetUniCharfR(fIobjPtr, indexfR)
  44. .sp
  45. int
  46. fBTcl_GetCharLengthfR(fIobjPtrfR)
  47. .sp
  48. Tcl_Obj *
  49. fBTcl_GetRangefR(fIobjPtr, first, lastfR)
  50. .sp
  51. void
  52. fBTcl_AppendToObjfR(fIobjPtr, bytes, lengthfR)
  53. .sp
  54. void
  55. fBTcl_AppendUnicodeToObjfR(fIobjPtr, unicode, numCharsfR)
  56. .sp
  57. void
  58. fBTcl_AppendObjToObjfR(fIobjPtr, appendObjPtrfR)
  59. .sp
  60. void
  61. fBTcl_AppendStringsToObjfR(fIobjPtr, string, string, ... fB(char *) NULLfR)
  62. .sp
  63. void
  64. fBTcl_AppendStringsToObjVAfR(fIobjPtr, argListfR)
  65. .sp
  66. void
  67. fBTcl_SetObjLengthfR(fIobjPtr, newLengthfR)
  68. .sp
  69. int
  70. fBTcl_AttemptSetObjLengthfR(fIobjPtr, newLengthfR)
  71. .sp
  72. Tcl_Obj *
  73. fBTcl_ConcatObjfR(fIobjc, objvfR)
  74. .SH ARGUMENTS
  75. .AS "CONST Tcl_UniChar" *appendObjPtr in/out
  76. .AP "CONST char" *bytes in
  77. .VS 8.1
  78. Points to the first byte of an array of UTF-8-encoded bytes
  79. used to set or append to a string object.
  80. This byte array should not contain embedded null bytes
  81. unless fIlengthfR is negative.  (Applications needing null bytes
  82. should represent them as the two-byte sequence fI\700\600fR, use
  83. fBTcl_ExternalToUtffR to convert, or fBTcl_NewByteArrayObjfR if
  84. the string is a collection of uninterpreted bytes.)
  85. .VE 8.1
  86. .AP int length in
  87. The number of bytes to copy from fIbytesfR when
  88. initializing, setting, or appending to a string object.
  89. If negative, all bytes up to the first null are used.
  90. .AP "CONST Tcl_UniChar" *unicode in
  91. Points to the first byte of an array of Unicode characters
  92. used to set or append to a string object.
  93. This byte array may contain embedded null characters
  94. unless fInumCharsfR is negative.
  95. .AP int numChars in
  96. The number of Unicode characters to copy from fIunicodefR when
  97. initializing, setting, or appending to a string object.
  98. If negative, all characters up to the first null character are used.
  99. .AP int index in
  100. The index of the Unicode character to return.
  101. .AP int first in
  102. The index of the first Unicode character in the Unicode range to be
  103. returned as a new object.
  104. .AP int last in
  105. The index of the last Unicode character in the Unicode range to be
  106. returned as a new object.
  107. .AP Tcl_Obj *objPtr in/out
  108. Points to an object to manipulate.
  109. .AP Tcl_Obj *appendObjPtr in
  110. The object to append to fIobjPtrfR in fBTcl_AppendObjToObjfR.
  111. .AP int *lengthPtr out
  112. If non-NULL, the location where fBTcl_GetStringFromObjfR will store
  113. the the length of an object's string representation.
  114. .AP "CONST char" *string in
  115. Null-terminated string value to append to fIobjPtrfR.
  116. .AP va_list argList in
  117. An argument list which must have been initialised using
  118. fBTCL_VARARGS_STARTfR, and cleared using fBva_endfR.
  119. .AP int newLength in
  120. New length for the string value of fIobjPtrfR, not including the
  121. final null character.
  122. .AP int objc in
  123. The number of elements to concatenate.
  124. .AP Tcl_Obj *objv[] in
  125. The array of objects to concatenate.
  126. .BE
  127. .SH DESCRIPTION
  128. .PP
  129. The procedures described in this manual entry allow Tcl objects to
  130. be manipulated as string values.  They use the internal representation
  131. of the object to store additional information to make the string
  132. manipulations more efficient.  In particular, they make a series of
  133. append operations efficient by allocating extra storage space for the
  134. string so that it doesn't have to be copied for each append.
  135. Also, indexing and length computations are optimized because the
  136. Unicode string representation is calculated and cached as needed.
  137. When using the fBTcl_Append*fR family of functions where the
  138. interpreter's result is the object being appended to, it is important
  139. to call Tcl_ResetResult first to ensure you are not unintentionally
  140. appending to existing data in the result object.
  141. .PP
  142. fBTcl_NewStringObjfR and fBTcl_SetStringObjfR create a new object
  143. or modify an existing object to hold a copy of the string given by
  144. fIbytesfR and fIlengthfR.  fBTcl_NewUnicodeObjfR and
  145. fBTcl_SetUnicodeObjfR create a new object or modify an existing
  146. object to hold a copy of the Unicode string given by fIunicodefR and
  147. fInumCharsfR.  fBTcl_NewStringObjfR and fBTcl_NewUnicodeObjfR
  148. return a pointer to a newly created object with reference count zero.
  149. All four procedures set the object to hold a copy of the specified
  150. string.  fBTcl_SetStringObjfR and fBTcl_SetUnicodeObjfR free any
  151. old string representation as well as any old internal representation
  152. of the object.
  153. .PP
  154. fBTcl_GetStringFromObjfR and fBTcl_GetStringfR return an object's
  155. string representation.  This is given by the returned byte pointer and
  156. (for fBTcl_GetStringFromObjfR) length, which is stored in
  157. fIlengthPtrfR if it is non-NULL.  If the object's UTF string
  158. representation is invalid (its byte pointer is NULL), the string
  159. representation is regenerated from the object's internal
  160. representation.  The storage referenced by the returned byte pointer
  161. is owned by the object manager.  It is passed back as a writable
  162. pointer so that extension author creating their own fBTcl_ObjTypefR
  163. will be able to modify the string representation within the
  164. fBTcl_UpdateStringProcfR of their fBTcl_ObjTypefR.  Except for that
  165. limited purpose, the pointer returned by fBTcl_GetStringFromObjfR
  166. or fBTcl_GetStringfR should be treated as read-only.  It is
  167. recommended that this pointer be assigned to a (CONST char *) variable.
  168. Even in the limited situations where writing to this pointer is
  169. acceptable, one should take care to respect the copy-on-write
  170. semantics required by fBTcl_ObjfR's, with appropriate calls
  171. to fBTcl_IsSharedfR and fBTcl_DuplicateObjfR prior to any
  172. in-place modification of the string representation.
  173. The procedure fBTcl_GetStringfR is used in the common case
  174. where the caller does not need the length of the string
  175. representation.
  176. .PP
  177. fBTcl_GetUnicodeFromObjfR and fBTcl_GetUnicodefR return an object's
  178. value as a Unicode string.  This is given by the returned pointer and
  179. (for fBTcl_GetUnicodeFromObjfR) length, which is stored in
  180. fIlengthPtrfR if it is non-NULL.  The storage referenced by the returned
  181. byte pointer is owned by the object manager and should not be modified by
  182. the caller.  The procedure fBTcl_GetUnicodefR is used in the common case
  183. where the caller does not need the length of the unicode string
  184. representation.
  185. .PP
  186. fBTcl_GetUniCharfR returns the fIindexfR'th character in the
  187. object's Unicode representation.
  188. .PP
  189. fBTcl_GetRangefR returns a newly created object comprised of the
  190. characters between fIfirstfR and fIlastfR (inclusive) in the
  191. object's Unicode representation.  If the object's Unicode
  192. representation is invalid, the Unicode representation is regenerated
  193. from the object's string representation.
  194. .PP
  195. fBTcl_GetCharLengthfR returns the number of characters (as opposed
  196. to bytes) in the string object.
  197. .PP
  198. fBTcl_AppendToObjfR appends the data given by fIbytesfR and
  199. fIlengthfR to the string representation of the object specified by
  200. fIobjPtrfR.  If the object has an invalid string representation,
  201. then an attempt is made to convert fIbytesfR is to the Unicode
  202. format.  If the conversion is successful, then the converted form of
  203. fIbytesfR is appended to the object's Unicode representation.
  204. Otherwise, the object's Unicode representation is invalidated and
  205. converted to the UTF format, and fIbytesfR is appended to the
  206. object's new string representation.
  207. .PP
  208. fBTcl_AppendUnicodeToObjfR appends the Unicode string given by
  209. fIunicodefR and fInumCharsfR to the object specified by
  210. fIobjPtrfR.  If the object has an invalid Unicode representation,
  211. then fIunicodefR is converted to the UTF format and appended to the
  212. object's string representation.  Appends are optimized to handle
  213. repeated appends relatively efficiently (it overallocates the string
  214. or Unicode space to avoid repeated reallocations and copies of
  215. object's string value).
  216. .PP
  217. fBTcl_AppendObjToObjfR is similar to fBTcl_AppendToObjfR, but it
  218. appends the string or Unicode value (whichever exists and is best
  219. suited to be appended to fIobjPtrfR) of fIappendObjPtrfR to
  220. fIobjPtrfR.
  221. .PP
  222. fBTcl_AppendStringsToObjfR is similar to fBTcl_AppendToObjfR
  223. except that it can be passed more than one value to append and
  224. each value must be a null-terminated string (i.e. none of the
  225. values may contain internal null characters).  Any number of
  226. fIstringfR arguments may be provided, but the last argument
  227. must be a NULL pointer to indicate the end of the list.
  228. .PP
  229. fBTcl_AppendStringsToObjVAfR is the same as fBTcl_AppendStringsToObjfR
  230. except that instead of taking a variable number of arguments it takes an
  231. argument list.
  232. .PP
  233. The fBTcl_SetObjLengthfR procedure changes the length of the
  234. string value of its fIobjPtrfR argument.  If the fInewLengthfR
  235. argument is greater than the space allocated for the object's
  236. string, then the string space is reallocated and the old value
  237. is copied to the new space; the bytes between the old length of
  238. the string and the new length may have arbitrary values.
  239. If the fInewLengthfR argument is less than the current length
  240. of the object's string, with fIobjPtr->lengthfR is reduced without
  241. reallocating the string space; the original allocated size for the
  242. string is recorded in the object, so that the string length can be
  243. enlarged in a subsequent call to fBTcl_SetObjLengthfR without
  244. reallocating storage.  In all cases fBTcl_SetObjLengthfR leaves
  245. a null character at fIobjPtr->bytes[newLength]fR.
  246. .PP
  247. fBTcl_AttemptSetObjLengthfR is identical in function to
  248. fBTcl_SetObjLengthfR except that if sufficient memory to satisfy the
  249. request cannot be allocated, it does not cause the Tcl interpreter to
  250. fBpanicfR.  Thus, if fInewLengthfR is greater than the space
  251. allocated for the object's string, and there is not enough memory
  252. available to satisfy the request, fBTcl_AttemptSetObjLengthfR will take
  253. no action and return 0 to indicate failure.  If there is enough memory
  254. to satisfy the request, fBTcl_AttemptSetObjLengthfR behaves just like
  255. fBTcl_SetObjLengthfR and returns 1 to indicate success.
  256. .PP
  257. The fBTcl_ConcatObjfR function returns a new string object whose
  258. value is the space-separated concatenation of the string
  259. representations of all of the objects in the fIobjvfR
  260. array. fBTcl_ConcatObjfR eliminates leading and trailing white space
  261. as it copies the string representations of the fIobjvfR array to the
  262. result. If an element of the fIobjvfR array consists of nothing but
  263. white space, then that object is ignored entirely. This white-space
  264. removal was added to make the output of the fBconcatfR command
  265. cleaner-looking. fBTcl_ConcatObjfR returns a pointer to a
  266. newly-created object whose ref count is zero.
  267. .SH "SEE ALSO"
  268. Tcl_NewObj, Tcl_IncrRefCount, Tcl_DecrRefCount
  269. .SH KEYWORDS
  270. append, internal representation, object, object type, string object,
  271. string type, string representation, concat, concatenate, unicode