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

通讯编程

开发平台:

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: ObjectType.3,v 1.7 2002/08/16 13:45:36 dkf Exp $
  8. '" 
  9. .so man.macros
  10. .TH Tcl_ObjType 3 8.0 Tcl "Tcl Library Procedures"
  11. .BS
  12. .SH NAME
  13. Tcl_RegisterObjType, Tcl_GetObjType, Tcl_AppendAllObjTypes, Tcl_ConvertToType  - manipulate Tcl object types
  14. .SH SYNOPSIS
  15. .nf
  16. fB#include <tcl.h>fR
  17. .sp
  18. fBTcl_RegisterObjTypefR(fItypePtrfR)
  19. .sp
  20. Tcl_ObjType *
  21. fBTcl_GetObjTypefR(fItypeNamefR)
  22. .sp
  23. int
  24. fBTcl_AppendAllObjTypesfR(fIinterp, objPtrfR)
  25. .sp
  26. int
  27. fBTcl_ConvertToTypefR(fIinterp, objPtr, typePtrfR)
  28. .SH ARGUMENTS
  29. .AS Tcl_ObjType *typeName in
  30. .AP Tcl_ObjType *typePtr in
  31. Points to the structure containing information about the Tcl object type.
  32. This storage must live forever,
  33. typically by being statically allocated.
  34. .AP "CONST char" *typeName in
  35. The name of a Tcl object type that fBTcl_GetObjTypefR should look up.
  36. .AP Tcl_Interp *interp in
  37. Interpreter to use for error reporting.
  38. .AP Tcl_Obj *objPtr in
  39. For fBTcl_AppendAllObjTypesfR, this points to the object onto which
  40. it appends the name of each object type as a list element.
  41. For fBTcl_ConvertToTypefR, this points to an object that
  42. must have been the result of a previous call to fBTcl_NewObjfR.
  43. .BE
  44. .SH DESCRIPTION
  45. .PP
  46. The procedures in this man page manage Tcl object types.
  47. The are used to register new object types,
  48. look up types,
  49. and force conversions from one type to another.
  50. .PP
  51. fBTcl_RegisterObjTypefR registers a new Tcl object type
  52. in the table of all object types supported by Tcl.
  53. The argument fItypePtrfR points to a Tcl_ObjType structure that
  54. describes the new type by giving its name
  55. and by supplying pointers to four procedures
  56. that implement the type.
  57. If the type table already contains a type
  58. with the same name as in fItypePtrfR,
  59. it is replaced with the new type.
  60. The Tcl_ObjType structure is described
  61. in the section fBTHE TCL_OBJTYPE STRUCTUREfR below.
  62. .PP
  63. fBTcl_GetObjTypefR returns a pointer to the Tcl_ObjType
  64. with name fItypeNamefR.
  65. It returns NULL if no type with that name is registered.
  66. .PP
  67. fBTcl_AppendAllObjTypesfR appends the name of each object type
  68. as a list element onto the Tcl object referenced by fIobjPtrfR.
  69. The return value is fBTCL_OKfR unless there was an error
  70. converting fIobjPtrfR to a list object;
  71. in that case fBTCL_ERRORfR is returned.
  72. .PP
  73. fBTcl_ConvertToTypefR converts an object from one type to another
  74. if possible.
  75. It creates a new internal representation for fIobjPtrfR
  76. appropriate for the target type fItypePtrfR
  77. and sets its fItypePtrfR member to that type.
  78. Any internal representation for fIobjPtrfR's old type is freed.
  79. If an error occurs during conversion, it returns fBTCL_ERRORfR
  80. and leaves an error message in the result object for fIinterpfR
  81. unless fIinterpfR is NULL.
  82. Otherwise, it returns fBTCL_OKfR.
  83. Passing a NULL fIinterpfR allows this procedure to be used
  84. as a test whether the conversion can be done (and in fact was done).
  85. .SH "THE TCL_OBJTYPE STRUCTURE"
  86. .PP
  87. Extension writers can define new object types by defining four
  88. procedures,
  89. initializing a Tcl_ObjType structure to describe the type,
  90. and calling fBTcl_RegisterObjTypefR.
  91. The fBTcl_ObjTypefR structure is defined as follows:
  92. .CS
  93. typedef struct Tcl_ObjType {
  94. char *fInamefR;
  95. Tcl_FreeInternalRepProc *fIfreeIntRepProcfR;
  96. Tcl_DupInternalRepProc *fIdupIntRepProcfR;
  97. Tcl_UpdateStringProc *fIupdateStringProcfR;
  98. Tcl_SetFromAnyProc *fIsetFromAnyProcfR;
  99. } Tcl_ObjType;
  100. .CE
  101. .PP
  102. The fInamefR member describes the name of the type, e.g. fBintfR.
  103. Extension writers can look up an object type using its name
  104. with the fBTcl_GetObjTypefR procedure.
  105. The remaining four members are pointers to procedures
  106. called by the generic Tcl object code:
  107. .PP
  108. The fIsetFromAnyProcfR member contains the address of a function
  109. called to create a valid internal representation
  110. from an object's string representation.
  111. .CS
  112. typedef int (Tcl_SetFromAnyProc) (Tcl_Interp *fIinterpfR, Tcl_Obj *fIobjPtrfR);
  113. .CE
  114. If an internal representation can't be created from the string,
  115. it returns fBTCL_ERRORfR and puts a message
  116. describing the error in the result object for fIinterpfR
  117. unless fIinterpfR is NULL.
  118. If fIsetFromAnyProcfR is successful,
  119. it stores the new internal representation,
  120. sets fIobjPtrfR's fItypePtrfR member to point to
  121. fIsetFromAnyProcfR's fBTcl_ObjTypefR, and returns fBTCL_OKfR.
  122. Before setting the new internal representation,
  123. the fIsetFromAnyProcfR must free any internal representation
  124. of fIobjPtrfR's old type;
  125. it does this by calling the old type's fIfreeIntRepProcfR
  126. if it is not NULL.
  127. As an example, the fIsetFromAnyProcfR for the builtin Tcl integer type
  128. gets an up-to-date string representation for fIobjPtrfR
  129. by calling fBTcl_GetStringFromObjfR.
  130. It parses the string to obtain an integer and,
  131. if this succeeds,
  132. stores the integer in fIobjPtrfR's internal representation
  133. and sets fIobjPtrfR's fItypePtrfR member to point to the integer type's
  134. Tcl_ObjType structure.
  135. Do not release fIobjPtrfR's old internal representation unless you
  136. replace it with a new one or reset the fItypePtrfR member to NULL.
  137. .PP
  138. The fIupdateStringProcfR member contains the address of a function
  139. called to create a valid string representation
  140. from an object's internal representation.
  141. .CS
  142. typedef void (Tcl_UpdateStringProc) (Tcl_Obj *fIobjPtrfR);
  143. .CE
  144. fIobjPtrfR's fIbytesfR member is always NULL when it is called.
  145. It must always set fIbytesfR non-NULL before returning.
  146. We require the string representation's byte array
  147. to have a null after the last byte, at offset fIlengthfR;
  148. this allows string representations that do not contain null bytes
  149. to be treated as conventional null character-terminated C strings.
  150. Storage for the byte array must be allocated in the heap by fBTcl_AllocfR
  151. or fBckallocfR.  Note that fIupdateStringProcfRs must allocate
  152. enough storage for the string's bytes and the terminating null byte.
  153. The fIupdateStringProcfR for Tcl's builtin list type, for example,
  154. builds an array of strings for each element object
  155. and then calls fBTcl_MergefR
  156. to construct a string with proper Tcl list structure.
  157. It stores this string as the list object's string representation.
  158. .PP
  159. The fIdupIntRepProcfR member contains the address of a function
  160. called to copy an internal representation from one object to another.
  161. .CS
  162. typedef void (Tcl_DupInternalRepProc) (Tcl_Obj *fIsrcPtrfR, Tcl_Obj *fIdupPtrfR);
  163. .CE
  164. fIdupPtrfR's internal representation is made a copy of fIsrcPtrfR's
  165. internal representation.
  166. Before the call,
  167. fIsrcPtrfR's internal representation is valid and fIdupPtrfR's is not.
  168. fIsrcPtrfR's object type determines what
  169. copying its internal representation means.
  170. For example, the fIdupIntRepProcfR for the Tcl integer type
  171. simply copies an integer.
  172. The builtin list type's fIdupIntRepProcfR
  173. allocates a new array that points at the original element objects;
  174. the elements are shared between the two lists
  175. (and their reference counts are incremented to reflect the new references).
  176. .PP
  177. The fIfreeIntRepProcfR member contains the address of a function
  178. that is called when an object is freed.
  179. .CS
  180. typedef void (Tcl_FreeInternalRepProc) (Tcl_Obj *fIobjPtrfR);
  181. .CE
  182. The fIfreeIntRepProcfR function can deallocate the storage
  183. for the object's internal representation
  184. and do other type-specific processing necessary when an object is freed.
  185. For example, Tcl list objects have an fIinternalRep.otherValuePtrfR
  186. that points to an array of pointers to each element in the list.
  187. The list type's fIfreeIntRepProcfR decrements
  188. the reference count for each element object
  189. (since the list will no longer refer to those objects),
  190. then deallocates the storage for the array of pointers.
  191. The fIfreeIntRepProcfR member can be set to NULL
  192. to indicate that the internal representation does not require freeing.
  193. .SH "SEE ALSO"
  194. Tcl_NewObj, Tcl_DecrRefCount, Tcl_IncrRefCount
  195. .SH KEYWORDS
  196. internal representation, object, object type, string representation, type conversion