Zen API
 All Classes Files Functions Variables Typedefs Friends Macros Modules Pages
kType.h
Go to the documentation of this file.
1 
10 #include <kApi/kApiDef.h> //--inclusion order controlled by kApiDef
11 
12 #ifndef K_API_TYPE_H
13 #define K_API_TYPE_H
14 
15 #include <kApi/kType.x.h>
16 
50 //typedef kObject kType; --forward-declared in kApiDef.x.h
51 
60 {
61  xkTypeObj(type);
62 
63  return obj->assembly;
64 }
73 {
74  xkTypeObj(type);
75 
76  return obj->name;
77 }
78 
90 {
91  return (type == other) ||
92  kType_Extends(type, other) ||
93  kType_Implements(type, other);
94 }
95 
104 {
105  xkTypeObj(type);
106 
107  return (obj->flags & kTYPE_FLAGS_VALUE) != 0;
108 }
109 
118 {
119  xkTypeObj(type);
120 
121  return (obj->flags & kTYPE_FLAGS_CLASS) != 0;
122 }
123 
132 {
133  xkTypeObj(type);
134 
135  return (obj->flags & kTYPE_FLAGS_INTERFACE) != 0;
136 }
137 
146 {
147  xkTypeObj(type);
148 
149  return (obj->flags & (kTYPE_FLAGS_INTERFACE | kTYPE_FLAGS_CLASS)) != 0;
150 }
151 
160 {
161  xkTypeObj(type);
162 
163  return (obj->flags & kTYPE_FLAGS_ABSTRACT) != 0;
164 }
165 
173 {
174  xkTypeObj(type);
175 
176  return (obj->flags & kTYPE_FLAGS_ENUM) != 0;
177 }
178 
186 {
187  xkTypeObj(type);
188 
189  return (obj->flags & kTYPE_FLAGS_ARRAY_VALUE) != 0;
190 }
191 
199 {
200  xkTypeObj(type);
201 
202  return (obj->flags & kTYPE_FLAGS_PRIMITIVE) != 0;
203 }
204 
212 {
213  xkTypeObj(type);
214 
215  return (obj->flags & xkTYPE_FLAGS_PACKED) != 0;
216 }
217 
227 {
228  return kType_IVTable(type, interfaceType) != kNULL;
229 }
230 
240 {
241  xkTypeObj(type);
242 
243  return obj->bases[0] == baseType ||
244  obj->bases[1] == baseType ||
245  obj->bases[2] == baseType ||
246  obj->bases[3] == baseType;
247 }
248 
257 {
258  xkTypeObj(type);
259 
260  return obj->bases[0];
261 }
262 
271 {
272  xkTypeObj(type);
273 
274  return obj->interfaceCount;
275 }
276 
286 {
287  xkTypeObj(type);
288 
289  kAssert(index < obj->interfaceCount);
290 
291  return obj->interfaces[index].type;
292 }
293 
305 {
306  xkTypeObj(type);
307 
308  return obj->size;
309 }
310 
322 {
323  xkTypeObj(type);
324 
325  return obj->innerSize;
326 }
327 
336 {
337  xkTypeObj(type);
338 
339  return obj->staticSize;
340 }
341 
350 {
351  xkTypeObj(type);
352 
353  return obj->vTable;
354 }
355 
367 #define kType_VTableT(kType_type, T) \
368  kCast(T##VTable*, xkType_VTableT(kType_type, kTypeOf(T)))
369 
379 {
380  xkTypeObj(type);
381 
382  if (obj->interfaces[0].type == interfaceType) return obj->interfaces[0].iTable;
383  else if (obj->interfaces[1].type == interfaceType) return obj->interfaces[1].iTable;
384  else if (obj->interfaces[2].type == interfaceType) return obj->interfaces[2].iTable;
385  else if (obj->interfaces[3].type == interfaceType) return obj->interfaces[3].iTable;
386  else return kNULL;
387 }
388 
400 #define kType_IVTableT(kType_type, T) \
401  kCast(T##VTable*, xkType_IVTableT(kType_type, kTypeOf(T)))
402 
411 {
412  xkTypeObj(type);
413 
414  return obj->staticData;
415 }
416 
428 {
429  kObjR(kType, type);
430 
431  return obj->staticInitialized;
432 }
433 
448 {
449  xkTypeObj(type);
450 
451  return obj->frameworkConstructor;
452 }
453 
465 {
466  xkTypeObj(type);
467 
468  return obj->cMethodCount;
469 }
470 
480 {
481  xkTypeObj(type);
482 
483  kAssert(index < obj->cMethodCount);
484 
485  return &obj->cMethodInfo[index];
486 }
487 
497 kFx(kStatus) kType_FindMethodInfo(kType type, const kChar* name, const kMethodInfo** info);
498 
507 {
508  xkTypeObj(type);
509 
510  return obj->vMethodCount;
511 }
512 
522 {
523  xkTypeObj(type);
524 
525  kAssert(index < obj->vMethodCount);
526 
527  return &obj->vMethodInfo[index];
528 }
529 
539 {
540  xkTypeObj(type);
541  xkInterfaceInfo* info = xkType_InterfaceInfo(obj, interfaceType);
542 
543  return kIsNull(info) ? 0 : info->iMethodCount;
544 }
545 
555 kInlineFx(const kMethodInfo*) kType_IMethodInfoAt(kType type, kType interfaceType, kSize index)
556 {
557  xkTypeObj(type);
558  xkInterfaceInfo* info = xkType_InterfaceInfo(obj, interfaceType);
559 
560  kAssert(index < info->iMethodCount);
561 
562  return kIsNull(info) ? kNULL : &info->iMethodInfo[index];
563 }
564 
575 {
576  xkTypeObj(type);
577 
578  return obj->fieldCount;
579 }
580 
590 {
591  xkTypeObj(type);
592 
593  kAssert(index < obj->fieldCount);
594 
595  return &obj->fieldInfo[index];
596 }
597 
608 {
609  xkTypeObj(type);
610 
611  return obj->enumeratorCount;
612 }
613 
623 {
624  xkTypeObj(type);
625 
626  kAssert(index < obj->enumeratorCount);
627 
628  return &obj->enumeratorInfo[index];
629 }
630 
640 kFx(kStatus) kType_FindEnumeratorInfo(kType type, k32s value, const kEnumeratorInfo** info);
641 
659 kFx(kStatus) kType_FormatEnumerator(kType type, k32s value, kChar* displayName, kSize capacity);
660 
673 kFx(kStatus) kType_ParseEnumerator(kType type, k32s* value, const kChar* displayName);
674 
686 {
687  xkTypeObj(type);
688 
689  return obj->versionCount;
690 }
691 
701 {
702  xkTypeObj(type);
703 
704  kAssert(index < obj->versionCount);
705 
706  return &obj->versionInfo[index];
707 }
708 
718 {
719  return kCast(kTypeVersionInfo*, version)->guid;
720 }
721 
731 {
732  return kCast(kTypeVersionInfo*, version)->serialize;
733 }
734 
760 {
761  return kCast(kTypeVersionInfo*, version)->deserialize;
762 }
763 
773 {
774  return kCast(kTypeVersionInfo*, version)->format;
775 }
776 
786 {
787  return kCast(kTypeVersionInfo*, version)->formatVersion;
788 }
789 
802 {
803  return kCast(kTypeVersionInfo*, version)->hasLegacyDeserializer;
804 }
805 
806 #endif
kFunction kType_VersionDeserializeFx(kType type, kTypeVersion version)
Gets the deserialization method for the specified type version.
Definition: kType.h:759
kBool kType_IsValue(kType type)
Determines whether a type represents a value (primitive, struct, enum).
Definition: kType.h:103
kBool kType_Extends(kType type, kType baseType)
Determines whether a type extends another type.
Definition: kType.h:239
kBool kType_Implements(kType type, kType interfaceType)
Determines whether a type implements a specific interface.
Definition: kType.h:226
kStatus(kCall * kFrameworkConstructorFx)(kObject *object, kAlloc allocator)
Required signature for kObject framework constructors.
Definition: kApiDef.h:2414
const kChar * kType_VersionFormat(kType type, kTypeVersion version)
Gets the serialization format name associated with the type version.
Definition: kType.h:772
kStatus kType_FindEnumeratorInfo(kType type, k32s value, const kEnumeratorInfo **info)
Finds enumerator metadata for the enumerator with the specified value.
const kChar * kType_VersionGuid(kType type, kPointer version)
Gets the GUID associated with the specified type version.
Definition: kType.h:717
kBool kType_IsClass(kType type)
Determines whether a type represents a class.
Definition: kType.h:117
kBool kType_IsArrayValue(kType type)
Reports whether the type is an 'array-value' type (e.g., kText32)
Definition: kType.h:185
Represents a library of types.
Represents a void pointer.
#define kIsNull(POINTER)
Tests for equality with null pointer.
Definition: kApiDef.h:341
#define kTYPE_FLAGS_CLASS
Type is a class.
Definition: kApiDef.h:2396
void * kType_Static(kType type)
Gets a pointer to the type's static data structure.
Definition: kType.h:410
const kFieldInfo * kType_FieldInfoAt(kType type, kSize index)
Gets metadata for the field at the specified index.
Definition: kType.h:589
Represents an unsigned integer that can store a pointer address.
#define kTYPE_FLAGS_ABSTRACT
Type is an abstract class.
Definition: kApiDef.h:2400
kVersion kType_VersionFormatVersion(kType type, kTypeVersion version)
Gets the serialization format version associated with the type version.
Definition: kType.h:785
kBool kType_IsInterface(kType type)
Determines whether a type represents an interface.
Definition: kType.h:131
const kEnumeratorInfo * kType_EnumeratorInfoAt(kType type, kSize index)
Gets metadata for the enumerator at the specified index.
Definition: kType.h:622
kSize kType_EnumeratorCount(kType type)
Reports count of registered enumerators for the given enumeration type.
Definition: kType.h:607
kBool kType_IsPacked(kType type)
Reports whether the fields of a value type are tightly packed (free from structure padding)...
Definition: kType.h:211
kBool kType_StaticInitialized(kType type)
Reports whether the type's static data structure has been successfully initialized.
Definition: kType.h:427
Represents type field information.
Definition: kApiDef.h:2433
kSize kType_MethodCount(kType type)
Reports count of non-virtual methods.
Definition: kType.h:464
#define kTYPE_FLAGS_ENUM
Type is an enumeration.
Definition: kApiDef.h:2399
#define kInlineFx(TYPE)
Inline method declaration helper.
Definition: kApiDef.h:26
kType kType_InterfaceAt(kType type, kSize index)
Gets the implemented interface at the specified index.
Definition: kType.h:285
kSize kType_VMethodCount(kType type)
Reports count of virtual methods.
Definition: kType.h:506
Represents enumerator information.
Definition: kApiDef.h:2446
Represents a single unit (byte) in a UTF-8 character.
kStatus kType_FormatEnumerator(kType type, k32s value, kChar *displayName, kSize capacity)
Formats an enumerator value to a text buffer using the enumerator display name.
kFunction * kType_VTable(kType type)
Gets a pointer to the type's primary virtual method table.
Definition: kType.h:349
kType kType_Base(kType type)
Gets the base of a class or interface.
Definition: kType.h:256
kBool kType_VersionHasLegacyDeserializer(kType type, kTypeVersion version)
Reports whether the type version has a legacy deserialization method.
Definition: kType.h:801
#define kTYPE_FLAGS_VALUE
Type is a value.
Definition: kApiDef.h:2398
const kChar * kType_Name(kType type)
Gets the name of the type.
Definition: kType.h:72
kStatus kType_FindMethodInfo(kType type, const kChar *name, const kMethodInfo **info)
Finds metadata for the non-virtual method with the specified name.
kBool kType_IsPrimitive(kType type)
Reports whether the type is a primitive value (single-valued; lacks fields).
Definition: kType.h:198
Represents type method information.
Definition: kApiDef.h:2421
kSize kType_FieldCount(kType type)
Reports count of registered fields for the given type.
Definition: kType.h:574
kFunction kType_VersionSerializeFx(kType type, kTypeVersion version)
Gets the serialization method for the specified type version.
Definition: kType.h:730
kPointer kTypeVersion
Represents an opaque reference to type version information (used in object serialization).
#define kObjR(TypeName_T, T_object)
Declares a local "obj" (this-pointer) variable and initializes it from an object handle, without type-checking.
Definition: kApiDef.h:3395
kSize kType_VersionCount(kType type)
Reports count of registered type versions.
Definition: kType.h:685
Core Zen type declarations.
kBool kType_IsReference(kType type)
Determines whether a type represents a class or interface.
Definition: kType.h:145
Represents a 32-bit signed integer.
kSize kType_Size(kType type)
Gets the external size of a type.
Definition: kType.h:304
kSize kType_IMethodCount(kType type, kType interfaceType)
Reports count of interface methods for the given interface.
Definition: kType.h:538
void(kCall * kFunction)()
Generic pointer to function.
Definition: kApiDef.h:28
kSize kType_InterfaceCount(kType type)
Reports count of implemented interfaces.
Definition: kType.h:270
kBool kType_IsEnum(kType type)
Reports whether the type is an enumeration.
Definition: kType.h:172
kBool kType_IsAbstract(kType type)
Determines whether a type represents an abstract class.
Definition: kType.h:159
const kMethodInfo * kType_MethodInfoAt(kType type, kSize index)
Gets metadata for the non-virtual method at the specified index.
Definition: kType.h:479
kAssembly kType_Assembly(kType type)
Gets the assembly to which the type belongs.
Definition: kType.h:59
const kMethodInfo * kType_IMethodInfoAt(kType type, kType interfaceType, kSize index)
Gets metadata for the interface method at the specified index.
Definition: kType.h:555
Represents metadata about a type (class, interface, or value).
#define kTYPE_FLAGS_ARRAY_VALUE
Type is an array-based value (e.g. kText32).
Definition: kApiDef.h:2401
kStatus kType_ParseEnumerator(kType type, k32s *value, const kChar *displayName)
Parses an enumerator value from a text buffer using the enumerator display name.
kSize kType_InnerSize(kType type)
Gets the internal size of a type.
Definition: kType.h:321
#define kAssert(EXPRESSION)
Aborts execution if EXPRESSION is kFALSE.
Definition: kApiDef.h:751
#define kTYPE_FLAGS_INTERFACE
Type is an interface.
Definition: kApiDef.h:2397
Represents a version number.
Represents an error code.
#define kTYPE_FLAGS_PRIMITIVE
Type is a primitive value (i.e., has no fields).
Definition: kApiDef.h:2402
#define kNULL
Null pointer.
Definition: kApiDef.h:269
kTypeVersion kType_VersionAt(kType type, kSize index)
Gets the type version handle at the specified index.
Definition: kType.h:700
kBool kType_Is(kType type, kType other)
Determines whether a type is equivalent to another type.
Definition: kType.h:89
kSize kType_StaticSize(kType type)
Gets the size of a type's static data.
Definition: kType.h:335
Represents a boolean value.
#define kCast(TYPE, ITEM)
Casts the ITEM argument to the specified TYPE.
Definition: kApiDef.h:1915
kFunction * kType_IVTable(kType type, kType interfaceType)
Gets a pointer to the type's virtual method table corresponding to the specified interface type...
Definition: kType.h:378
kFrameworkConstructorFx kType_FrameworkConstructor(kType type)
Gets the framework constructor for this type.
Definition: kType.h:447
const kMethodInfo * kType_VMethodInfoAt(kType type, kSize index)
Gets metadata for the virtual method at the specified index.
Definition: kType.h:521