Zen API
 All Classes Files Functions Variables Typedefs Friends Macros Modules Pages
kApiDef.h
Go to the documentation of this file.
1 
10 #ifndef K_API_API_DEF_H
11 #define K_API_API_DEF_H
12 
13 #include <kApi/kApiCfg.h>
14 
15 #define kCall xkCall
16 #define kDlCall xkDlCall
17 
18 #if defined(K_EMIT)
19 # define kFx(TYPE) kExportFx(TYPE)
20 # define kDx(TYPE) kExportDx(TYPE)
21 #else
22 # define kFx(TYPE) kImportFx(TYPE)
23 # define kDx(TYPE) kImportDx(TYPE)
24 #endif
25 
26 #define kInlineFx(TYPE) xkInlineFx(TYPE)
27 
28 typedef void (kCall* kFunction)();
29 
38 typedef xk8u k8u;
39 
41 #define k8U_MIN (0)
42 #define k8U_MAX (255U)
43 #define k8U_NULL (k8U_MAX)
44 
54 typedef xk16u k16u;
55 
57 #define k16U_MIN (0)
58 #define k16U_MAX (65535U)
59 #define k16U_NULL (k16U_MAX)
60 
70 typedef xk32u k32u;
71 
73 #define k32U_MIN (0)
74 #define k32U_MAX (4294967295U)
75 #define k32U_NULL (k32U_MAX)
76 
86 typedef xk64u k64u;
87 
89 #define k64U(CONST) xk64U(CONST)
90 #define k64U_MIN k64U(0)
91 #define k64U_MAX k64U(18446744073709551615)
92 #define k64U_NULL (k64U_MAX)
93 
95 #define kINFINITE k64U_MAX
96 
97 
105 typedef xk8s k8s;
106 
108 #define k8S_MAX (127)
109 #define k8S_MIN (-k8S_MAX -1)
110 #define k8S_NULL (k8S_MIN)
111 
121 typedef xk16s k16s;
122 
124 #define k16S_MAX (32767)
125 #define k16S_MIN (-k16S_MAX -1)
126 #define k16S_NULL (k16S_MIN)
127 
137 typedef xk32s k32s;
138 
140 #define k32S_MAX (2147483647)
141 #define k32S_MIN (-k32S_MAX -1)
142 #define k32S_NULL (k32S_MIN)
143 
153 typedef xk64s k64s;
154 
156 #define k64S(CONST) xk64S(CONST)
157 #define k64S_MAX k64S(9223372036854775807)
158 #define k64S_MIN (-k64S_MAX -1)
159 #define k64S_NULL (k64S_MIN)
160 
170 typedef k32s kBool;
171 
173 #define kFALSE (0)
174 #define kTRUE (1)
175 
185 typedef xk32f k32f;
186 
188 #define k32F_MIN (1.175494351e-38F)
189 #define k32F_MAX (3.402823466e+38F)
190 #define k32F_NULL (-k32F_MAX)
191 #define k32F_DIGITS (9)
192 
201 kInlineFx(kBool) k32f_IsNull(k32f value)
202 {
203  return (value == k32F_NULL);
204 }
205 
214 typedef xk64f k64f;
215 
217 #define k64F_MIN (2.2250738585072014e-308)
218 #define k64F_MAX (1.7976931348623157e+308)
219 #define k64F_NULL (-k64F_MAX)
220 #define k64F_DIGITS (17)
221 
231 kFx(k32s) k64f_IsNanOrInf(k64f value);
232 
241 {
242  return (value == k64F_NULL);
243 }
244 
253 typedef xkByte kByte;
254 
263 typedef xkSize kSize;
264 
266 #define kSIZE_MAX xkSIZE_MAX
267 #define kSIZE_NULL kSIZE_MAX
268 
280 kInlineFx(kSize) kSize_Align(kSize value, kSize to)
281 {
282  return ((value >> to) + !!(value & ((1 << to) - 1))) << to;
283 }
284 
291 typedef xkSSize kSSize;
292 
294 #define kSSIZE_MIN xkSSIZE_MIN
295 #define kSSIZE_MAX xkSSIZE_MAX
296 #define kSSIZE_NULL kSSIZE_MIN
297 
306 typedef void* kPointer;
307 
308 #define kNULL (0)
309 
310 
319 kInlineFx(void*) kPointer_ByteOffset(const void* pointer, kSSize offset)
320 {
321  return (kByte*)pointer + offset;
322 }
323 
333 kInlineFx(void*) kPointer_ItemOffset(const void* pointer, kSSize itemIndex, kSize itemSize)
334 {
335  return kPointer_ByteOffset(pointer, itemIndex*(kSSize)itemSize);
336 }
337 
346 kInlineFx(kSSize) kPointer_Diff(void* a, void* b)
347 {
348  return (kSSize)a - (kSSize)b;
349 }
350 
359 #define kPointer_ReadAs(POINTER, TYPE) \
360  (*(TYPE*)(POINTER))
361 
370 #define kPointer_WriteAs(POINTER, VALUE, TYPE) \
371  (*(TYPE*)(POINTER) = (TYPE)(VALUE))
372 
380 #define kIsNull(POINTER) \
381  ((POINTER) == kNULL)
382 
391 typedef xkChar kChar;
392 
401 {
402  return (ch >= 'A' && ch <= 'Z') ? (ch - 'A' + 'a') : ch;
403 }
404 
413 {
414  return (ch >= 'a' && ch <= 'z') ? (ch - 'a' + 'A') : ch;
415 }
416 
425 {
426  return ch == ' ';
427 }
428 
437 {
438  return ((ch >= 'a') && (ch <= 'z') ) || ((ch >= 'A') && (ch <= 'Z'));
439 }
440 
449 {
450  return ch >= '0' && ch <= '9';
451 }
452 
461 typedef kChar kText16[16];
462 
471 typedef kChar kText32[32];
472 
481 typedef kChar kText64[64];
482 
491 typedef kChar kText128[128];
492 
501 typedef kChar kText256[256];
502 
511 typedef k32s kStatus;
512 
514 #define kERROR_STATE (-1000)
515 #define kERROR_NOT_FOUND (-999)
516 #define kERROR_COMMAND (-998)
517 #define kERROR_PARAMETER (-997)
518 #define kERROR_UNIMPLEMENTED (-996)
519 #define kERROR_MEMORY (-994)
520 #define kERROR_TIMEOUT (-993)
521 #define kERROR_INCOMPLETE (-992)
522 #define kERROR_STREAM (-991)
523 #define kERROR_CLOSED (-990)
524 #define kERROR_VERSION (-989)
525 #define kERROR_ABORT (-988)
526 #define kERROR_ALREADY_EXISTS (-987)
527 #define kERROR_NETWORK (-986)
528 #define kERROR_HEAP (-985)
529 #define kERROR_FORMAT (-984)
530 #define kERROR_READ_ONLY (-983)
531 #define kERROR_WRITE_ONLY (-982)
532 #define kERROR_BUSY (-981)
533 #define kERROR_CONFLICT (-980)
534 #define kERROR_OS (-979)
535 #define kERROR_DEVICE (-978)
536 #define kERROR_FULL (-977)
537 #define kERROR_IN_PROGRESS (-976)
538 #define kERROR (0)
539 #define kOK (1)
540 
551 kFx(const kChar*) kStatus_Name(kStatus status);
552 
561 {
562  return status != kOK;
563 }
564 
573 {
574  return status == kOK;
575 }
576 
585 #define kCheck(EXPRESSION) \
586  xkCheck(EXPRESSION)
587 
597 #define kCheckTrue(EXPRESSION, STATUS) \
598  xkCheckTrue(EXPRESSION, STATUS)
599 
608 #define kCheckArgs(EXPRESSION) \
609  xkCheckArgs(EXPRESSION)
610 
619 #define kCheckState(EXPRESSION) \
620  xkCheckState(EXPRESSION)
621 
627 #define kTry \
628  xkTry
629 
636 #define kThrow(EXPRESSION) \
637  xkThrow(EXPRESSION)
638 
648 #define kTest(EXPRESSION) \
649  xkTest(EXPRESSION)
650 
661 #define kTestTrue(EXPRESSION, STATUS) \
662  xkTestTrue(EXPRESSION, STATUS)
663 
673 #define kTestArgs(EXPRESSION) \
674  xkTestArgs(EXPRESSION)
675 
685 #define kTestState(EXPRESSION) \
686  xkTestState(EXPRESSION)
687 
694 #define kCatch(STATUS_POINTER) \
695  xkCatch(STATUS_POINTER)
696 
705 #define kEndCatch(STATUS) \
706  xkEndCatch(STATUS)
707 
713 #define kFinally \
714  xkFinally
715 
724 #define kEndFinally() \
725  xkEndFinally()
726 
733 #define kCatchEx(STATUS_POINTER) \
734  xkCatchEx(STATUS_POINTER)
735 
746 #define kEndCatchEx(STATUS) \
747  xkEndCatchEx(STATUS)
748 
754 #define kFinallyEx \
755  xkFinallyEx
756 
765 #define kEndFinallyEx() \
766  xkEndFinallyEx()
767 
775 #define kAssert(EXPRESSION) \
776  xkAssert(EXPRESSION)
777 
788 #define kAssertType(OBJECT, SYMBOL) \
789  xkAssertType(OBJECT, SYMBOL)
790 
798 #define kTrace(TAG) \
799  xkTrace(TAG)
800 
809 typedef k32u kVersion;
810 
811 #define kVERSION_NULL (k32U_NULL) // kVersion invalid value.
812 
823 kInlineFx(kVersion) kVersion_Create(k32u major, k32u minor, k32u release, k32u build)
824 {
825  return (major & 0xFF) << 24 |
826  (minor & 0xFF) << 16 |
827  (release & 0xFF) << 8 |
828  (build & 0xFF);
829 }
830 
841 #define kVersion_Stringify_(MAJOR, MINOR, RELEASE, BUILD) \
842  xkStringize(MAJOR) "." xkStringize(MINOR) "." xkStringize(RELEASE) "." xkStringize(BUILD)
843 
852 kFx(kStatus) kVersion_Parse(kVersion* version, const kChar* buffer);
853 
863 kFx(kStatus) kVersion_Format(kVersion version, kChar* buffer, kSize capacity);
864 
877 {
878  return (k32s)version1 - (k32s)version2;
879 }
880 
889 {
890  return (version >> 24) & 0xFF;
891 }
892 
901 {
902  return (version >> 16) & 0xFF;
903 }
904 
913 {
914  return (version >> 8) & 0xFF;
915 }
916 
925 {
926  return (version) & 0xFF;
927 }
928 
935 typedef k32s kEndianness;
936 
938 #define kENDIANNESS_LITTLE (1)
939 #define kENDIANNESS_BIG (2)
940 
947 kInlineFx(kEndianness) kEndianness_Host()
948 {
949  return K_ENDIANNESS;
950 }
951 
959 {
960  return endianness != kEndianness_Host();
961 }
962 
977 kFx(kStatus) k8u_Format(k8u value, kChar* buffer, kSize capacity);
978 
987 kFx(kStatus) k8u_Parse(k8u* value, const kChar* str);
988 
1003 kFx(kStatus) k8s_Format(k8s value, kChar* buffer, kSize capacity);
1004 
1013 kFx(kStatus) k8s_Parse(k8s* value, const kChar* str);
1014 
1029 kFx(kStatus) k16u_Format(k16u value, kChar* buffer, kSize capacity);
1030 
1039 kFx(kStatus) k16u_Parse(k16u* value, const kChar* str);
1040 
1055 kFx(kStatus) k16s_Format(k16s value, kChar* buffer, kSize capacity);
1056 
1065 kFx(kStatus) k16s_Parse(k16s* value, const kChar* str);
1066 
1081 kFx(kStatus) k32u_Format(k32u value, kChar* buffer, kSize capacity);
1082 
1091 kFx(kStatus) k32u_Parse(k32u* value, const kChar* str);
1092 
1107 kFx(kStatus) k32s_Format(k32s value, kChar* buffer, kSize capacity);
1108 
1117 kFx(kStatus) k32s_Parse(k32s* value, const kChar* str);
1118 
1133 kFx(kStatus) k64u_Format(k64u value, kChar* buffer, kSize capacity);
1134 
1143 kFx(kStatus) k64u_Parse(k64u* value, const kChar* str);
1144 
1159 kFx(kStatus) k64s_Format(k64s value, kChar* buffer, kSize capacity);
1160 
1169 kFx(kStatus) k64s_Parse(k64s* value, const kChar* str);
1170 
1185 kFx(kStatus) kBool_Format(kBool value, kChar* buffer, kSize capacity);
1186 
1195 kFx(kStatus) kBool_Parse(kBool* value, const kChar* str);
1196 
1211 kFx(kStatus) kSize_Format(kSize value, kChar* buffer, kSize capacity);
1212 
1221 kFx(kStatus) kSize_Parse(kSize* value, const kChar* str);
1222 
1237 kFx(kStatus) kSSize_Format(kSSize value, kChar* buffer, kSize capacity);
1238 
1247 kFx(kStatus) kSSize_Parse(kSSize* value, const kChar* str);
1248 
1263 kFx(kStatus) k32f_Format(k32f value, kChar* buffer, kSize capacity);
1264 
1273 kFx(kStatus) k32f_Parse(k32f* value, const kChar* str);
1274 
1289 kFx(kStatus) k64f_Format(k64f value, kChar* buffer, kSize capacity);
1290 
1299 kFx(kStatus) k64f_Parse(k64f* value, const kChar* str);
1300 
1309 typedef struct kPoint16s
1310 {
1313 } kPoint16s;
1314 
1323 typedef struct kPoint32s
1324 {
1327 } kPoint32s;
1328 
1337 typedef struct kPoint32f
1338 {
1341 } kPoint32f;
1342 
1351 typedef struct kPoint64f
1352 {
1355 } kPoint64f;
1356 
1366 #define kPoint_Init_(POINT, X, Y) xkPoint_Init_(POINT, X, Y)
1367 
1376 typedef struct kPoint3d16s
1377 {
1381 } kPoint3d16s;
1382 
1391 typedef struct kPoint3d32s
1392 {
1396 } kPoint3d32s;
1397 
1406 typedef struct kPoint3d32f
1407 {
1411 } kPoint3d32f;
1412 
1421 typedef struct kPoint3d64f
1422 {
1426 } kPoint3d64f;
1427 
1438 #define kPoint3d_Init_(POINT, X, Y, Z) xkPoint3d_Init_(POINT, X, Y, Z)
1439 
1448 typedef struct kPoint4d16s
1449 {
1454 } kPoint4d16s;
1455 
1467 #define kPoint4d_Init_(POINT, X, Y, Z, W) xkPoint4d_Init_(POINT, X, Y, Z, W)
1468 
1477 typedef struct kRect16s
1478 {
1483 } kRect16s;
1484 
1493 typedef struct kRect32s
1494 {
1499 } kRect32s;
1500 
1509 typedef struct kRect32f
1510 {
1515 } kRect32f;
1516 
1525 typedef struct kRect64f
1526 {
1531 } kRect64f;
1532 
1544 #define kRect_Init_(RECT, X, Y, W, H) \
1545  xkRect_Init_(RECT, X, Y, W, H)
1546 
1555 typedef struct kRect3d64f
1556 {
1563 } kRect3d64f;
1564 
1576 #define kRect3d_Init_(RECT, X, Y, Z, W, H, D) \
1577  xkRect3d_Init_(RECT, X, Y, Z, W, H, D)
1578 
1587 typedef struct kRotatedRect32s
1588 {
1594 } kRotatedRect32s;
1595 
1604 typedef struct kRotatedRect32f
1605 {
1611 } kRotatedRect32f;
1612 
1625 #define kRotatedRect_Init_(RECT, XC, YC, W, H, A) \
1626  xkRotatedRect_Init_(RECT, XC, YC, W, H, A)
1627 
1636 typedef k32s kPixelFormat;
1637 
1639 #define kPIXEL_FORMAT_NULL (0)
1640 #define kPIXEL_FORMAT_8BPP_GREYSCALE (1)
1641 #define kPIXEL_FORMAT_8BPP_CFA (2)
1642 #define kPIXEL_FORMAT_8BPC_BGRX (3)
1643 #define kPIXEL_FORMAT_1BPP_GREYSCALE (4)
1644 #define kPIXEL_FORMAT_16BPP_GREYSCALE (5)
1645 #define kPIXEL_FORMAT_8BPC_BGR (6)
1646 
1656 typedef k32s kCfa;
1657 
1659 #define kCFA_NONE (0)
1660 #define kCFA_BAYER_BGGR (1)
1661 #define kCFA_BAYER_GBRG (2)
1662 #define kCFA_BAYER_RGGB (3)
1663 #define kCFA_BAYER_GRBG (4)
1664 
1674 typedef struct kRgb
1675 {
1676  k8u b;
1677  k8u g;
1678  k8u r;
1679  k8u x;
1680 } kRgb;
1681 
1691 #define kRgb_Init_(RGB, R, G, B) \
1692  xkRgb_Init_(RGB, R, G, B)
1693 
1702 typedef struct kArgb
1703 {
1704  k8u b;
1705  k8u g;
1706  k8u r;
1707  k8u a;
1708 } kArgb;
1709 
1720 #define kArgb_Init_(ARGB, A, R, G, B) \
1721  xkArgb_Init_(ARGB, A, R, G, B)
1722 
1731 typedef struct kRgb24
1732 {
1733  k8u b;
1734  k8u g;
1735  k8u r;
1736 } kRgb24;
1737 
1747 #define kRgb24_Init_(RGB24, R, G, B) \
1748  xkRgb24_Init_(RGB24, R, G, B)
1749 
1756 typedef struct kMacAddress
1757 {
1759 } kMacAddress;
1760 
1767 typedef k32s kMemoryAlignment;
1768 
1770 #define kMEMORY_ALIGNMENT_8 (3)
1771 #define kMEMORY_ALIGNMENT_16 (4)
1772 #define kMEMORY_ALIGNMENT_32 (5)
1773 #define kMEMORY_ALIGNMENT_64 (6)
1774 #define kMEMORY_ALIGNMENT_128 (7)
1775 #define kMEMORY_ALIGNMENT_256 (8)
1776 #define kMEMORY_ALIGNMENT_512 (9)
1777 #define kMEMORY_ALIGNMENT_1024 (10)
1778 #define kMEMORY_ALIGNMENT_2048 (11)
1779 #define kMEMORY_ALIGNMENT_4096 (12)
1780 
1788 kInlineFx(kSize) kMemoryAlignment_Size(kMemoryAlignment alignment)
1789 {
1790  return ((kSize)1 << (kSize)alignment);
1791 }
1792 
1803 kFx(kStatus) kMacAddress_Parse(kMacAddress* address, const kChar* text);
1804 
1816 kFx(kStatus) kMacAddress_Format(kMacAddress address, kChar* text, kSize capacity);
1817 
1824 typedef k32s kComparison;
1825 
1826 #define kCOMPARISON_EQ (0)
1827 #define kCOMPARISON_NEQ (1)
1828 #define kCOMPARISON_LT (2)
1829 #define kCOMPARISON_LTE (3)
1830 #define kCOMPARISON_GT (4)
1831 #define kCOMPARISON_GTE (5)
1832 
1833 
1840 typedef kBool (kCall* kEqualsFx)(const void* item1, const void* item2);
1841 
1848 typedef kSize (kCall* kHashFx)(const void* item);
1849 
1858 typedef kStatus (kCall* kCallbackFx)(kPointer receiver, kPointer sender, void* args);
1859 
1866 typedef struct kCallback
1867 {
1868  kCallbackFx function;
1870 } kCallback;
1871 
1878 typedef k32s kFileMode;
1879 
1881 #define kFILE_MODE_READ (0x1)
1882 #define kFILE_MODE_WRITE (0x2)
1883 #define kFILE_MODE_UPDATE (0x4)
1884 
1892 typedef k32s kSeekOrigin;
1893 
1895 #define kSEEK_ORIGIN_BEGIN (0)
1896 #define kSEEK_ORIGIN_CURRENT (1)
1897 #define kSEEK_ORIGIN_END (2)
1898 
1906 typedef k32s kCompressionType;
1907 
1909 #define kCOMPRESSION_TYPE_NULL (0)
1910 #define kCOMPRESSION_TYPE_ZSTD (1)
1911 
1912 
1920 typedef k32s kCompressionPreset;
1921 
1923 #define kCOMPRESSION_PRESET_MIN (-1)
1924 #define kCOMPRESSION_PRESET_FAST (-2)
1925 #define kCOMPRESSION_PRESET_DEFAULT (-3)
1926 #define kCOMPRESSION_PRESET_DENSE (-4)
1927 #define kCOMPRESSION_PRESET_MAX (-5)
1928 
1939 typedef k64u kLogOption;
1940 
1942 #define kLOG_OPTION_WARNING (0x1)
1943 #define kLOG_OPTION_ERROR (0x2)
1944 #define kLOG_OPTION_PLATFORM (0x10)
1945 
1955 #define kCountOf(CARRAY) \
1956  (sizeof(CARRAY)/sizeof(CARRAY[0]))
1957 
1967 #define kCast(TYPE, ITEM) \
1968  ((TYPE)(ITEM))
1969 
1970 #if (K_CPP_VERSION >= K_CPP_VERSION_2011)
1971 
1981 template <typename T>
1982 static kInline typename std::enable_if<std::is_unsigned<T>::value, T>::type kAbs(const T& v)
1983 {
1984  return v;
1985 }
1986 
1996 template <typename T>
1997 static kInline typename std::enable_if<!std::is_unsigned<T>::value, T>::type kAbs(const T& v)
1998 {
1999  return (v >= T()) ? v : -v;
2000 }
2001 
2011 template <typename T>
2012 static kInline typename std::enable_if<std::is_unsigned<T>::value, T>::type kSign(const T& v)
2013 {
2014  return v > T();
2015 }
2016 
2026 template <typename T>
2027 static kInline typename std::enable_if<!std::is_unsigned<T>::value, T>::type kSign(const T& v)
2028 {
2029  return (v > T()) - (v < T());
2030 }
2031 
2042 template <typename T>
2043 kInlineFx(T) kMin(const T& a, const T& b)
2044 {
2045  return (a < b) ? a : b;
2046 }
2047 
2058 template <typename T>
2059 kInlineFx(T) kMax(const T& a, const T& b)
2060 {
2061  return (a > b) ? a : b;
2062 }
2063 
2075 template <typename T>
2076 kInlineFx(T) kClamp(const T& v, const T& min, const T& max)
2077 {
2078  return kMin(kMax(v, min), max);
2079 }
2080 
2091 template <typename T>
2092 static kInline typename std::enable_if<std::is_unsigned<T>::value, T>::type kDivideFloor(const T& a, const T& b)
2093 {
2094  return a / b;
2095 }
2096 
2107 template <typename T>
2108 static kInline typename std::enable_if<!std::is_unsigned<T>::value, T>::type kDivideFloor(const T& a, const T& b)
2109 {
2110  return ((kSign(a) * kSign(b)) >= T()) ? a / b : ((a / b) - ((a % b) != T()));
2111 }
2112 
2123 template <typename T>
2124 static kInline typename std::enable_if<std::is_unsigned<T>::value, T>::type kDivideCeil(const T& a, const T& b)
2125 {
2126  return (a / b) + ((a % b) != T());
2127 }
2128 
2139 template <typename T>
2140 static kInline typename std::enable_if<!std::is_unsigned<T>::value, T>::type kDivideCeil(const T& a, const T& b)
2141 {
2142  return ((kSign(a) * kSign(b)) <= T()) ? a / b : ((a / b) + ((a % b) != T()));
2143 }
2144 
2155 template <typename T>
2156 kInlineFx(T) kQuantizeFloor(const T& value, const T& granularity)
2157 {
2158  return kDivideFloor(value, granularity) * granularity;
2159 }
2160 
2171 template <typename T>
2172 kInlineFx(T) kQuantizeCeil(const T& value, const T& granularity)
2173 {
2174  return kDivideCeil(value, granularity) * granularity;
2175 }
2176 
2193 template <typename T>
2194 kInlineFx(T) kAdjustFloor(const T& value, const T& min, const T& max, const T& granularity)
2195 {
2196  typedef typename std::make_unsigned<T>::type U;
2197  U relativeValue = (value >= min) ? (U) (value - min) : U();
2198  U relativeMax = (max >= min) ? (U) (max - min) : U();
2199  U quantizedRelativeMax = kQuantizeFloor<U>(relativeMax, granularity);
2200  U limitedRelativeValue = kMin<U>(relativeValue, quantizedRelativeMax);
2201 
2202  return (T) kQuantizeFloor<U>(limitedRelativeValue, granularity) + min;
2203 }
2204 
2221 template <typename T>
2222 kInlineFx(T) kAdjustCeil(const T& value, const T& min, const T& max, const T& granularity)
2223 {
2224  typedef typename std::make_unsigned<T>::type U;
2225  U relativeValue = (value >= min) ? (U) (value - min) : U();
2226  U relativeMax = (max >= min) ? (U) (max - min) : U();
2227  U quantizedRelativeMax = kQuantizeFloor<U>(relativeMax, granularity);
2228  U limitedRelativeValue = kMin<U>(relativeValue, quantizedRelativeMax);
2229 
2230  return (T) kQuantizeCeil<U>(limitedRelativeValue, granularity) + min;
2231 }
2232 
2233 #endif
2234 
2240 #define kZero(VALUE) \
2241  memset(&VALUE, 0, sizeof(VALUE))
2242 
2257 kInlineFx(void) kItemCopy(void* dest, const void* src, kSize size)
2258 {
2259  memcpy(dest, src, size);
2260 }
2261 
2275 kInlineFx(void) kItemZero(void* dest, kSize size)
2276 {
2277  memset(dest, 0, size);
2278 }
2279 
2285 typedef k32s kAllocTrait;
2286 
2288 #define kALLOC_TRAIT_FOREIGN (0x00000001)
2289 #define kALLOC_TRAIT_SERIAL (0x00000002)
2290 #define kALLOC_TRAIT_NON_ATOMIC (0x00000004)
2291 #define kALLOC_TRAIT_CONTEXT (0x00000008)
2292 #define kALLOC_TRAIT_CUDA_PINNED (0x00010000)
2293 #define kALLOC_TRAIT_CUDA_MANAGED (0x00020000)
2294 #define kALLOC_TRAIT_CUDA_DEVICE (0x01000000)
2295 
2304 kInlineFx(kBool) kAllocTrait_IsForeign(kAllocTrait traits)
2305 {
2306  return (traits & kALLOC_TRAIT_FOREIGN) != 0;
2307 }
2308 
2317 {
2318  return (traits & kALLOC_TRAIT_SERIAL) != 0;
2319 }
2320 
2329 {
2330  return (traits & kALLOC_TRAIT_NON_ATOMIC) != 0;
2331 }
2332 
2341 {
2342  return (traits & kALLOC_TRAIT_CONTEXT) != 0;
2343 }
2344 
2353 {
2354  return (traits & kALLOC_TRAIT_CUDA_PINNED) != 0;
2355 }
2356 
2365 {
2366  return (traits & kALLOC_TRAIT_CUDA_MANAGED) != 0;
2367 }
2368 
2377 {
2378  return (traits & kALLOC_TRAIT_CUDA_DEVICE) != 0;
2379 }
2380 
2389 {
2391 }
2392 
2400 typedef kSize kThreadId;
2401 
2410 kFx(kBool) kThreadId_Compare(kThreadId a, kThreadId b);
2411 
2419 typedef k32s kThreadPriorityClass;
2420 
2422 #define kTHREAD_PRIORITY_CLASS_LOW (-1)
2423 #define kTHREAD_PRIORITY_CLASS_NORMAL (0)
2424 #define kTHREAD_PRIORITY_CLASS_HIGH (1)
2425 
2427 /*
2428  * Forward declarations
2429  */
2430 
2431 typedef void* kObject;
2432 typedef kObject kType;
2433 typedef kObject kAlloc;
2434 
2436 #define kTypeName kText64
2437 
2445 typedef k32u kTypeFlags;
2446 
2448 #define kTYPE_FLAGS_CLASS (0x01)
2449 #define kTYPE_FLAGS_INTERFACE (0x02)
2450 #define kTYPE_FLAGS_VALUE (0x04)
2451 #define kTYPE_FLAGS_ENUM (0x08)
2452 #define kTYPE_FLAGS_ABSTRACT (0x20)
2453 #define kTYPE_FLAGS_ARRAY_VALUE (0x40)
2454 #define kTYPE_FLAGS_PRIMITIVE (0x80)
2455 
2463 typedef kPointer kTypeVersion;
2464 
2466 typedef kStatus (kCall* kFrameworkConstructorFx)(kObject* object, kAlloc allocator);
2467 
2473 typedef struct kMethodInfo
2474 {
2475  kTypeName methodName;
2476  kTypeName functionName;
2477  kFunction function;
2478 } kMethodInfo;
2479 
2485 typedef struct kFieldInfo
2486 {
2487  kTypeName name;
2488  kType type;
2491 } kFieldInfo;
2492 
2498 typedef struct kEnumeratorInfo
2499 {
2501  kTypeName name;
2502  kTypeName displayName;
2503 } kEnumeratorInfo;
2504 
2530 #define kTypeOf(SYMBOL) \
2531  xkTypeOf(SYMBOL)
2532 
2558 #define kAssemblyOf(SYMBOL) \
2559  xkAssemblyOf(SYMBOL)
2560 
2569 #define kStaticOf(SYMBOL) \
2570  xkStaticOf(SYMBOL)
2571 
2579 #define kDeprecate(SYMBOL) \
2580  xkDeprecate(#SYMBOL)
2581 
2590 #define kWarn(MESSAGE) \
2591  xkWarn(MESSAGE)
2592 
2593 /*
2594 *
2595 * Type Declaration/Definition Macros, Generation 1.
2596 *
2597 * These type declaration/definition macros continue to be supported. However, consider using the Generation 2
2598 * macros (defined below) in new code.
2599 *
2600 */
2601 
2609 #define kDeclareAssembly(PREFIX, SYMBOL) \
2610  xkDeclareAssembly(PREFIX, SYMBOL)
2611 
2621 #define kBeginAssembly(PREFIX, SYMBOL, VERSION, PLATFORM_VERSION) \
2622  xkBeginAssembly(PREFIX, SYMBOL, VERSION, PLATFORM_VERSION)
2623 
2629 #define kEndAssembly() \
2630  xkEndAssembly()
2631 
2640 #define kDeclareValue(PREFIX, SYMBOL, BASE) \
2641  xkDeclareValue(PREFIX, SYMBOL, BASE)
2642 
2651 #define kBeginValue(PREFIX, SYMBOL, BASE) \
2652  xkBeginValue(PREFIX, SYMBOL, BASE)
2653 
2659 #define kEndValue() \
2660  xkEndValue()
2661 
2670 #define kDeclareEnum(PREFIX, SYMBOL, BASE) \
2671  xkDeclareEnum(PREFIX, SYMBOL, BASE)
2672 
2681 #define kBeginEnum(PREFIX, SYMBOL, BASE) \
2682  xkBeginEnum(PREFIX, SYMBOL, BASE)
2683 
2689 #define kEndEnum() \
2690  xkEndEnum()
2691 
2700 #define kDeclareArrayValue(PREFIX, SYMBOL, BASE) \
2701  xkDeclareArrayValue(PREFIX, SYMBOL, BASE)
2702 
2712 #define kBeginArrayValue(PREFIX, SYMBOL, TYPE, BASE) \
2713  xkBeginArrayValue(PREFIX, SYMBOL, TYPE, BASE)
2714 
2720 #define kEndArrayValue() \
2721  xkEndArrayValue()
2722 
2731 #define kDeclareInterface(PREFIX, SYMBOL, BASE) \
2732  xkDeclareInterface(PREFIX, SYMBOL, BASE)
2733 
2742 #define kBeginInterface(PREFIX, SYMBOL, BASE) \
2743  xkBeginInterface(PREFIX, SYMBOL, BASE)
2744 
2750 #define kEndInterface() \
2751  xkEndInterface()
2752 
2761 #define kDeclareFullClass(PREFIX, SYMBOL, BASE) \
2762  xkDeclareFullClass(PREFIX, SYMBOL, BASE)
2763 
2772 #define kBeginFullClass(PREFIX, SYMBOL, BASE) \
2773  xkBeginFullClass(PREFIX, SYMBOL, BASE)
2774 
2780 #define kEndFullClass() \
2781  xkEndFullClass()
2782 
2791 #define kDeclareVirtualClass(PREFIX, SYMBOL, BASE) \
2792  xkDeclareVirtualClass(PREFIX, SYMBOL, BASE)
2793 
2802 #define kBeginVirtualClass(PREFIX, SYMBOL, BASE) \
2803  xkBeginVirtualClass(PREFIX, SYMBOL, BASE)
2804 
2810 #define kEndVirtualClass() \
2811  xkEndVirtualClass()
2812 
2820 #define kDeclareStaticClass(PREFIX, SYMBOL) \
2821  xkDeclareStaticClass(PREFIX, SYMBOL)
2822 
2830 #define kBeginStaticClass(PREFIX, SYMBOL) \
2831  xkBeginStaticClass(PREFIX, SYMBOL)
2832 
2838 #define kEndStaticClass() \
2839  xkEndStaticClass()
2840 
2849 #define kDeclareClass(PREFIX, SYMBOL, BASE) \
2850  xkDeclareClass(PREFIX, SYMBOL, BASE)
2851 
2860 #define kBeginClass(PREFIX, SYMBOL, BASE) \
2861  xkBeginClass(PREFIX, SYMBOL, BASE)
2862 
2868 #define kEndClass() \
2869  xkEndClass()
2870 
2871 /*
2872 *
2873 * Type Declaration/Definition Macros, Generation 2.
2874 *
2875 * These macros are used to declare and define elements of the type system, such
2876 * as assemblies, classes and values. These macros supersede the Generation 1 macros,
2877 * defined above.
2878 *
2879 */
2880 
2888 #define kDeclareAssemblyEx(PREFIX, SYMBOL) \
2889  xkDeclareAssemblyEx(PREFIX, SYMBOL)
2890 
2900 #define kBeginAssemblyEx(PREFIX, SYMBOL, VERSION, PLATFORM_VERSION) \
2901  xkBeginAssemblyEx(PREFIX, SYMBOL, VERSION, PLATFORM_VERSION)
2902 
2908 #define kEndAssemblyEx() \
2909  xkEndAssemblyEx()
2910 
2919 #define kDeclareValueEx(PREFIX, SYMBOL, BASE) \
2920  xkDeclareValueEx(PREFIX, SYMBOL, BASE)
2921 
2929 #define kBeginValueEx(PREFIX, SYMBOL) \
2930  xkBeginValueEx(PREFIX, SYMBOL)
2931 
2937 #define kEndValueEx() \
2938  xkEndValueEx()
2939 
2948 #define kDeclareEnumEx(PREFIX, SYMBOL, BASE) \
2949  xkDeclareEnumEx(PREFIX, SYMBOL, BASE)
2950 
2958 #define kBeginEnumEx(PREFIX, SYMBOL) \
2959  xkBeginEnumEx(PREFIX, SYMBOL)
2960 
2966 #define kEndEnumEx() \
2967  xkEndEnumEx()
2968 
2977 #define kDeclareArrayValueEx(PREFIX, SYMBOL, BASE) \
2978  xkDeclareArrayValueEx(PREFIX, SYMBOL, BASE)
2979 
2988 #define kBeginArrayValueEx(PREFIX, SYMBOL, TYPE) \
2989  xkBeginArrayValueEx(PREFIX, SYMBOL, TYPE)
2990 
2996 #define kEndArrayValueEx() \
2997  xkEndArrayValueEx()
2998 
3007 #define kDeclareInterfaceEx(PREFIX, SYMBOL, BASE) \
3008  xkDeclareInterfaceEx(PREFIX, SYMBOL, BASE)
3009 
3017 #define kBeginInterfaceEx(PREFIX, SYMBOL) \
3018  xkBeginInterfaceEx(PREFIX, SYMBOL)
3019 
3025 #define kEndInterfaceEx() \
3026  xkEndInterfaceEx()
3027 
3036 #define kDeclareFullClassEx(PREFIX, SYMBOL, BASE) \
3037  xkDeclareFullClassEx(PREFIX, SYMBOL, BASE)
3038 
3046 #define kBeginFullClassEx(PREFIX, SYMBOL) \
3047  xkBeginFullClassEx(PREFIX, SYMBOL)
3048 
3054 #define kEndFullClassEx() \
3055  xkEndFullClassEx()
3056 
3065 #define kDeclareVirtualClassEx(PREFIX, SYMBOL, BASE) \
3066  xkDeclareVirtualClassEx(PREFIX, SYMBOL, BASE)
3067 
3075 #define kBeginVirtualClassEx(PREFIX, SYMBOL) \
3076  xkBeginVirtualClassEx(PREFIX, SYMBOL)
3077 
3083 #define kEndVirtualClassEx() \
3084  xkEndVirtualClassEx()
3085 
3093 #define kDeclareStaticClassEx(PREFIX, SYMBOL) \
3094  xkDeclareStaticClassEx(PREFIX, SYMBOL)
3095 
3103 #define kBeginStaticClassEx(PREFIX, SYMBOL) \
3104  xkBeginStaticClassEx(PREFIX, SYMBOL)
3105 
3111 #define kEndStaticClassEx() \
3112  xkEndStaticClassEx()
3113 
3122 #define kDeclareClassEx(PREFIX, SYMBOL, BASE) \
3123  xkDeclareClassEx(PREFIX, SYMBOL, BASE)
3124 
3132 #define kBeginClassEx(PREFIX, SYMBOL) \
3133  xkBeginClassEx(PREFIX, SYMBOL)
3134 
3140 #define kEndClassEx() \
3141  xkEndClassEx()
3142 
3143 /*
3144 *
3145 * Type Implementation Macros
3146 *
3147 * These macros are used to provide type-specific details. They are typically used between
3148 * type definition begin/end macros (e.g., kBeginClass/kEndClass).
3149 *
3150 */
3151 
3158 #define kAddDependency(SYMBOL) \
3159  xkAddDependency(SYMBOL)
3160 
3167 #define kAddType(SYMBOL) \
3168  xkAddType(SYMBOL)
3169 
3180 #define kAddPriority(SYMBOL) \
3181  xkAddPriority(SYMBOL)
3182 
3191 #define kAddStatic(SYMBOL) \
3192  xkAddStatic(SYMBOL)
3193 
3201 #define kAddInterface(SYMBOL, IFACE) \
3202  xkAddInterface(SYMBOL, IFACE)
3203 
3222 #define kAddFrameworkConstructor(SYMBOL, CTOR) \
3223  xkAddFrameworkConstructor(SYMBOL, CTOR)
3224 
3243 #define kAddPrivateFrameworkConstructor(SYMBOL, CTOR) \
3244  xkAddPrivateFrameworkConstructor(SYMBOL, CTOR)
3245 
3253 #define kAddMethod(SYMBOL, METHOD) \
3254  xkAddMethod(SYMBOL, METHOD)
3255 
3264 #define kAddVMethod(IN_TYPE, FROM_TYPE, METHOD) \
3265  xkAddVMethod(IN_TYPE, FROM_TYPE, METHOD)
3266 
3277 #define kAddPrivateVMethod(IN_TYPE, FROM_TYPE, METHOD) \
3278  xkAddPrivateVMethod(IN_TYPE, FROM_TYPE, METHOD)
3279 
3289 #define kAddIVMethod(IN_TYPE, FROM_IFACE, IMETHOD, CMETHOD) \
3290  xkAddIVMethod(IN_TYPE, FROM_IFACE, IMETHOD, CMETHOD)
3291 
3303 #define kAddPrivateIVMethod(IN_TYPE, FROM_IFACE, IMETHOD, CMETHOD) \
3304  xkAddPrivateIVMethod(IN_TYPE, FROM_IFACE, IMETHOD, CMETHOD)
3305 
3314 #define kAddField(VALUE, FIELD_TYPE, FIELD) \
3315  xkAddField(VALUE, FIELD_TYPE, FIELD)
3316 
3324 #define kAddEnumerator \
3325  xkAddEnumerator
3326 
3345 #define kAddVersionEx(TYPE, FORMAT, FORMAT_VER, GUID, WRITE_METHOD, READ_METHOD) \
3346  xkAddVersionEx(TYPE, FORMAT, FORMAT_VER, GUID, WRITE_METHOD, READ_METHOD)
3347 
3368 #define kAddPrivateVersionEx(TYPE, FORMAT, FORMAT_VER, GUID, WRITE_METHOD, READ_METHOD) \
3369  xkAddPrivateVersionEx(TYPE, FORMAT, FORMAT_VER, GUID, WRITE_METHOD, READ_METHOD)
3370 
3384 #define kAddAbstractVersionEx(TYPE, FORMAT, FORMAT_VER, GUID) \
3385  xkAddAbstractVersion(TYPE, FORMAT, FORMAT_VER, GUID)
3386 
3394 #define kAddFlags(TYPE, FLAGS) \
3395  xkAddFlags(TYPE, FLAGS)
3396 
3418 #define kDefineDebugHints() \
3419  xkDefineDebugHints()
3420 
3421 /*
3422 *
3423 * Method Implementation Macros
3424 *
3425 * These macros are used in the implementation of class methods.
3426 *
3427 */
3428 
3435 #define kObj(TypeName_T, T_object) \
3436  TypeName_T##Class* obj K_ATTRIBUTE_UNUSED = xx##TypeName_T##_Cast(T_object, __FILE__, __LINE__)
3437 
3447 #define kObjR(TypeName_T, T_object) \
3448  TypeName_T##Class* obj K_ATTRIBUTE_UNUSED = x##TypeName_T##_CastRaw(T_object)
3449 
3461 #define kObjN(TypeName_T, VarName_obj, T_object) \
3462  TypeName_T##Class* VarName_obj = xx##TypeName_T##_Cast(T_object, __FILE__, __LINE__)
3463 
3474 #define kObjNR(TypeName_T, VarName_obj, T_object) \
3475  TypeName_T##Class* VarName_obj = x##TypeName_T##_CastRaw(T_object)
3476 
3482 #define kStaticObj(TypeName_T) \
3483  TypeName_T##Static* sobj = kStaticOf(TypeName_T)
3484 
3495 #define kCastClass_(TYPE, OBJECT) \
3496  xkCastClass_(TYPE, OBJECT)
3497 
3508 #define kCastVTable_(TYPE, OBJECT) \
3509  xkCastVTable_(TYPE, OBJECT)
3510 
3521 #define kCastIVTable_(IFACE, OBJECT) \
3522  xkCastIVTable_(IFACE, OBJECT)
3523 
3529 #define kDebugBreak() \
3530  xkDebugBreak()
3531 
3532 #include <kApi/kApiDef.x.h>
3533 
3534 #endif
k32f y
Y-coordinate value.
Definition: kApiDef.h:1340
kStatus k32s_Parse(k32s *value, const kChar *str)
Converts string to k32s value.
k64f height
Height of the rectangular cuboid.
Definition: kApiDef.h:1561
Represents a 64-unit, null-terminated, kChar sequence.
#define kALLOC_TRAIT_NON_ATOMIC
Allocates memory that cannot support atomic operations.
Definition: kApiDef.h:2290
Represents a 32-bit unsigned integer.
k32s y
Y-coordinate of the origin.
Definition: kApiDef.h:1496
kBool kChar_IsSpace(kChar ch)
Checks whether ASCII character is a some kind of white space character type.
Definition: kApiDef.h:424
kStatus kBool_Parse(kBool *value, const kChar *str)
Converts string to kBool value.
k64f height
Height of the rectangle.
Definition: kApiDef.h:1530
k32f x
X-coordinate of the origin.
Definition: kApiDef.h:1511
Rectangle structure with 32-bit signed integer fields.
Definition: kApiDef.h:1493
3D point structure with 32-bit floating-point fields.
Definition: kApiDef.h:1406
k64f x
X-coordinate of the origin.
Definition: kApiDef.h:1527
k32s width
Width of the rectangle.
Definition: kApiDef.h:1591
k8u b
Blue component value.
Definition: kApiDef.h:1676
k32s y
Y-coordinate value.
Definition: kApiDef.h:1394
#define kALLOC_TRAIT_SERIAL
Allocates memory suitable for single-threaded use only.
Definition: kApiDef.h:2289
k16s width
Width of the rectangle.
Definition: kApiDef.h:1481
32-bit color pixel structure (B/G/R/A).
Definition: kApiDef.h:1702
k16s y
Y-coordinate of the origin.
Definition: kApiDef.h:1480
k8u b
Blue component value.
Definition: kApiDef.h:1733
Represents a unique thread identifier.
2D point structure with 16-bit signed integer fields.
Definition: kApiDef.h:1309
kStatus(kCall * kFrameworkConstructorFx)(kObject *object, kAlloc allocator)
Required signature for kObject framework constructors.
Definition: kApiDef.h:2466
kChar kChar_ToLower(kChar ch)
Convert ASCII character to lower case.
Definition: kApiDef.h:400
kBool kAllocTrait_IsCudaManaged(kAllocTrait traits)
Reports whether the kALLOC_TRAIT_CUDA_MANAGED trait is present in an allocator trait bitset...
Definition: kApiDef.h:2364
Represents a 64-bit unsigned integer.
Architecture/compiler-specific definitions.
kBool kSuccess(kStatus status)
Returns kTRUE if the given expression value is kOK.
Definition: kApiDef.h:572
Represents a 256-unit, null-terminated, kChar sequence.
kTypeName methodName
Method name (e.g. "Clone").
Definition: kApiDef.h:2475
kPointer receiver
Callback receiver context pointer.
Definition: kApiDef.h:1869
kTypeName name
Enumerator name (e.g. "kPIXEL_FORMAT_8BPP_GREYSCALE").
Definition: kApiDef.h:2501
#define kALLOC_TRAIT_CUDA_PINNED
Allocates Cuda pinned memory (host or device).
Definition: kApiDef.h:2292
Rotated rectangle structure with 32-bit floating-point fields.
Definition: kApiDef.h:1604
k64f y
Y-coordinate of the origin.
Definition: kApiDef.h:1528
k32s z
Z-coordinate value.
Definition: kApiDef.h:1395
Represents a void pointer.
32-bit color pixel structure (B/G/R/X).
Definition: kApiDef.h:1674
kStatus kSize_Parse(kSize *value, const kChar *str)
Converts string to kSize value.
k32f x
X-coordinate value.
Definition: kApiDef.h:1339
kBool kThreadId_Compare(kThreadId a, kThreadId b)
Compares two thread identifiers for equality.
kByte address[6]
Address bytes (most significant byte first).
Definition: kApiDef.h:1758
kStatus kSSize_Parse(kSSize *value, const kChar *str)
Converts string to kSSize value.
kBool kAllocTrait_SupportsContext(kAllocTrait traits)
Reports whether the kALLOC_TRAIT_CONTEXT trait is present in an allocator trait bitset.
Definition: kApiDef.h:2340
static kInline std::enable_if< std::is_unsigned< T >::value, T >::type kDivideCeil(const T &a, const T &b)
Calculates the quotient of two unsigned integers, rounding up.
Definition: kApiDef.h:2124
T kQuantizeFloor(const T &value, const T &granularity)
Rounds the specified input value down to the nearest multiple of the specified granularity.
Definition: kApiDef.h:2156
kBool kChar_IsLetter(kChar ch)
Checks whether ASCII character is a letter.
Definition: kApiDef.h:436
T kClamp(const T &v, const T &min, const T &max)
Returns a value limited to the specified range.
Definition: kApiDef.h:2076
k16s z
Z-coordinate value.
Definition: kApiDef.h:1380
T kMax(const T &a, const T &b)
Returns the maximum of two numbers.
Definition: kApiDef.h:2059
kStatus k32f_Format(k32f value, kChar *buffer, kSize capacity)
Converts k32f value to string.
Represents a 16-bit unsigned integer.
kStatus k32u_Format(k32u value, kChar *buffer, kSize capacity)
Converts k32u value to string.
k32s xc
X-coordinate of the rectangle center.
Definition: kApiDef.h:1589
Rotated rectangle structure with 32-bit signed integer fields.
Definition: kApiDef.h:1587
kBool kAllocTrait_IsSerial(kAllocTrait traits)
Reports whether the kALLOC_TRAIT_SERIAL trait is present in an allocator trait bitset.
Definition: kApiDef.h:2316
k32f yc
Y-coordinate of the rectangle center.
Definition: kApiDef.h:1607
kStatus kBool_Format(kBool value, kChar *buffer, kSize capacity)
Converts kBool value to string.
Represents an unsigned integer that can store a pointer address.
Abstract base class for memory allocator types.
k32s angle
Rotation angle of the rectangle.
Definition: kApiDef.h:1593
void * kPointer_ItemOffset(const void *pointer, kSSize itemIndex, kSize itemSize)
Gets a pointer to the Nth element of an array.
Definition: kApiDef.h:333
kTypeName displayName
Formatted display name (e.g. "8bpp Greyscale");.
Definition: kApiDef.h:2502
Represents type field information.
Definition: kApiDef.h:2485
k64f width
Width of the rectangular cuboid.
Definition: kApiDef.h:1560
Represents an 8-bit unsigned integer.
k64f x
X-coordinate of the origin.
Definition: kApiDef.h:1557
k64f depth
Depth of the rectangular cuboid.
Definition: kApiDef.h:1562
#define kInlineFx(TYPE)
Inline method declaration helper.
Definition: kApiDef.h:26
k64f y
Y-coordinate value.
Definition: kApiDef.h:1424
#define k64F_NULL
k64f invalid value.
Definition: kApiDef.h:219
k64f x
X-coordinate value.
Definition: kApiDef.h:1423
kBool kAllocTrait_IsNonAtomic(kAllocTrait traits)
Reports whether the kALLOC_TRAIT_NON_ATOMIC trait is present in an allocator trait bitset...
Definition: kApiDef.h:2328
Represents enumerator information.
Definition: kApiDef.h:2498
Represents a single unit (byte) in a UTF-8 character.
#define kALLOC_TRAIT_CONTEXT
Allocator supports use of a context object during copy operations.
Definition: kApiDef.h:2291
Represents a byte on the current platform.
kStatus k64s_Format(k64s value, kChar *buffer, kSize capacity)
Converts k64s value to string.
T kAdjustCeil(const T &value, const T &min, const T &max, const T &granularity)
Rounds the specified input up, conforming to minimum, maximum, and granularity constraints.
Definition: kApiDef.h:2222
kStatus k16u_Parse(k16u *value, const kChar *str)
Converts string to k16u value.
k16s x
X-coordinate value.
Definition: kApiDef.h:1311
k16s y
Y-coordinate value.
Definition: kApiDef.h:1379
kStatus kSSize_Format(kSSize value, kChar *buffer, kSize capacity)
Converts kSSize value to string.
kSize(kCall * kHashFx)(const void *item)
Callback signature to determine hash code of an item.
Definition: kApiDef.h:1848
kStatus k64f_Parse(k64f *value, const kChar *str)
Converts string to k64f value.
k32f angle
Rotation angle of the rectangle.
Definition: kApiDef.h:1610
Represents a signed integer that can store a pointer address.
typedef kStatus(kCall *kMsgQueueDropFx)(kPointer receiver
Defines the signature of a callback function to handle dropped items.
k32s height
Height of the rectangle.
Definition: kApiDef.h:1498
Rectangle structure with 32-bit floating-point fields.
Definition: kApiDef.h:1509
kBool kIsError(kStatus status)
Returns kTRUE if the given status value is not kOK.
Definition: kApiDef.h:560
k32s kVersion_Compare(kVersion version1, kVersion version2)
Returns an integral value indicating the relationship between the versions.
Definition: kApiDef.h:876
kBool kAllocTrait_IsCudaPinned(kAllocTrait traits)
Reports whether the kALLOC_TRAIT_CUDA_PINNED trait is present in an allocator trait bitset...
Definition: kApiDef.h:2352
k32s width
Width of the rectangle.
Definition: kApiDef.h:1497
#define k32F_NULL
k32f invalid value.
Definition: kApiDef.h:190
kStatus k32u_Parse(k32u *value, const kChar *str)
Converts string to k32u value.
k32s x
X-coordinate value.
Definition: kApiDef.h:1325
Pixel format descriptor.
k32s height
Height of the rectangle.
Definition: kApiDef.h:1592
Rectangle structure with 64-bit floating-point fields.
Definition: kApiDef.h:1525
Represents a 128-unit, null-terminated, kChar sequence.
k32f x
X-coordinate value.
Definition: kApiDef.h:1408
k8u kVersion_Minor(kVersion version)
Returns the minor part of a version number.
Definition: kApiDef.h:900
#define kALLOC_TRAIT_CUDA_MANAGED
Allocates Cuda managed memory (host or device).
Definition: kApiDef.h:2293
kChar kChar_ToUpper(kChar ch)
Convert ASCII character to upper case.
Definition: kApiDef.h:412
kStatus k16s_Format(k16s value, kChar *buffer, kSize capacity)
Converts k16s value to string.
kBool(kCall * kEqualsFx)(const void *item1, const void *item2)
Callback signature to determine equality of two items.
Definition: kApiDef.h:1840
k8u kVersion_Major(kVersion version)
Returns the major part of a version number.
Definition: kApiDef.h:888
kBool k64f_IsNull(k64f value)
Tests for null k64f.
Definition: kApiDef.h:240
T kQuantizeCeil(const T &value, const T &granularity)
Rounds the specified input value up to the nearest multiple of the specified granularity.
Definition: kApiDef.h:2172
k16s y
Y-coordinate value.
Definition: kApiDef.h:1312
Represents type method information.
Definition: kApiDef.h:2473
k16s x
X-coordinate value.
Definition: kApiDef.h:1378
k32f z
Z-coordinate value.
Definition: kApiDef.h:1410
kTypeName name
Field name.
Definition: kApiDef.h:2487
kStatus k32f_Parse(k32f *value, const kChar *str)
Converts string to k32f value.
k64f width
Width of the rectangle.
Definition: kApiDef.h:1529
k64f z
Z-coordinate value.
Definition: kApiDef.h:1425
Represents a callback function and context pointer.
Definition: kApiDef.h:1866
void kItemCopy(void *dest, const void *src, kSize size)
Performs a small copy with minimal overhead.
Definition: kApiDef.h:2257
k8u kVersion_Build(kVersion version)
Returns the build part of a version number.
Definition: kApiDef.h:924
k8u r
Red component value.
Definition: kApiDef.h:1706
2D point structure with 32-bit floating-point fields.
Definition: kApiDef.h:1337
k64f y
Y-coordinate of the origin.
Definition: kApiDef.h:1558
kStatus k32s_Format(k32s value, kChar *buffer, kSize capacity)
Converts k32s value to string.
Preset compression levels.
k16s w
W-coordinate value.
Definition: kApiDef.h:1453
k32s yc
Y-coordinate of the rectangle center.
Definition: kApiDef.h:1590
k8u r
Red component value.
Definition: kApiDef.h:1735
Represents a 32-bit signed integer.
Represents an Ethernet address.
Definition: kApiDef.h:1756
void * kPointer_ByteOffset(const void *pointer, kSSize offset)
Calculates a pointer address from a base address and a byte offset.
Definition: kApiDef.h:319
void(kCall * kFunction)()
Generic pointer to function.
Definition: kApiDef.h:28
k8u r
Red component value.
Definition: kApiDef.h:1678
k32f height
Height of the rectangle.
Definition: kApiDef.h:1609
kBool kChar_IsDigit(kChar ch)
Checks whether ASCII character is a digit.
Definition: kApiDef.h:448
k64f x
X-coordinate value.
Definition: kApiDef.h:1353
void kItemZero(void *dest, kSize size)
Zero-initializes a small amount of memory with minimal overhead.
Definition: kApiDef.h:2275
kVersion kVersion_Create(k32u major, k32u minor, k32u release, k32u build)
Creates a version value from its constituent parts.
Definition: kApiDef.h:823
kType type
Field type.
Definition: kApiDef.h:2488
k8u kVersion_Release(kVersion version)
Returns the release part of a version number.
Definition: kApiDef.h:912
kEndianness kEndianness_Host()
Reports the endianness of the current platform.
Definition: kApiDef.h:947
kStatus k16s_Parse(k16s *value, const kChar *str)
Converts string to k16s value.
2D point structure with 64-bit floating-point fields.
Definition: kApiDef.h:1351
kBool kEndianness_ShouldReverse(kEndianness endianness)
Reports whether byte ordering must be reversed to be consistent with the current platform.
Definition: kApiDef.h:958
kStatus(kCall * kCallbackFx)(kPointer receiver, kPointer sender, void *args)
Callback signature for a generic event handler.
Definition: kApiDef.h:1858
#define kALLOC_TRAIT_CUDA_DEVICE
Allocates Cuda device memory (device only).
Definition: kApiDef.h:2294
k8u g
Green component value.
Definition: kApiDef.h:1677
Represents a 64-bit signed integer.
kStatus kSize_Format(kSize value, kChar *buffer, kSize capacity)
Converts kSize value to string.
kBool kAllocTrait_IsCudaDeviceAccessible(kAllocTrait traits)
Reports whether the memory is Cuda device-accessible.
Definition: kApiDef.h:2388
T kMin(const T &a, const T &b)
Returns the minimum of two numbers.
Definition: kApiDef.h:2043
#define kALLOC_TRAIT_FOREIGN
Allocates memory in a foreign memory domain (non-host address space).
Definition: kApiDef.h:2288
kStatus kVersion_Format(kVersion version, kChar *buffer, kSize capacity)
Formats a version to a string buffer.
Represents a 16-unit, null-terminated, kChar sequence.
Flags that control how a file is opened.
Represents an 8-bit signed integer.
Represents the byte-ordering of primitive data types.
k32f width
Width of the rectangle.
Definition: kApiDef.h:1608
k8u b
Blue component value.
Definition: kApiDef.h:1704
k16s height
Height of the rectangle.
Definition: kApiDef.h:1482
kStatus k8s_Format(k8s value, kChar *buffer, kSize capacity)
Converts k8s value to string.
Represents metadata about a type (class, interface, or value).
k8u g
Green component value.
Definition: kApiDef.h:1705
kStatus k64s_Parse(k64s *value, const kChar *str)
Converts string to k64s value.
k16s x
X-coordinate value.
Definition: kApiDef.h:1450
k32s x
X-coordinate value.
Definition: kApiDef.h:1393
kStatus kVersion_Parse(kVersion *version, const kChar *buffer)
Parses a version from a formatted string.
Represents a 32-unit, null-terminated, kChar sequence.
kStatus kMacAddress_Format(kMacAddress address, kChar *text, kSize capacity)
Formats an Ethernet MAC address as a string.
3D point structure with 16-bit signed integer fields.
Definition: kApiDef.h:1376
k32s value
Enumerator numeric value.
Definition: kApiDef.h:2500
kTypeName functionName
Full function name (e.g. "kObject_Clone").
Definition: kApiDef.h:2476
Represents a 16-bit signed integer.
k32f y
Y-coordinate of the origin.
Definition: kApiDef.h:1512
Represents a 32-bit floating-point number.
k64f y
Y-coordinate value.
Definition: kApiDef.h:1354
Root of all Zen classes.
Represents a version number.
k8u a
Alpha component value.
Definition: kApiDef.h:1707
#define kOK
Operation successful.
Definition: kApiDef.h:539
static kInline std::enable_if< std::is_unsigned< T >::value, T >::type kDivideFloor(const T &a, const T &b)
Calculates the quotient of two unsigned integers, rounding down.
Definition: kApiDef.h:2092
Represents an error code.
k64f z
Z-coordinate of the origin.
Definition: kApiDef.h:1559
Represents a thread priority class.
kStatus k64u_Format(k64u value, kChar *buffer, kSize capacity)
Converts k64u value to string.
k8u x
Undefined.
Definition: kApiDef.h:1679
k32s y
Y-coordinate value.
Definition: kApiDef.h:1326
kSize offset
Offset of field within structure (bytes).
Definition: kApiDef.h:2489
k16s y
Y-coordinate value.
Definition: kApiDef.h:1451
#define kCall
kApi standard function calling convention.
Definition: kApiDef.h:15
k32f width
Width of the rectangle.
Definition: kApiDef.h:1513
kStatus k16u_Format(k16u value, kChar *buffer, kSize capacity)
Converts k16u value to string.
Rectangular cuboid structure with 64-bit floating-point fields.
Definition: kApiDef.h:1555
kStatus k64f_Format(k64f value, kChar *buffer, kSize capacity)
Converts k64f value to string.
Rectangle structure with 16-bit signed integer fields.
Definition: kApiDef.h:1477
kStatus k8u_Format(k8u value, kChar *buffer, kSize capacity)
Converts k8u value to string.
24-bit color pixel structure (B/G/R).
Definition: kApiDef.h:1731
Represents a 64-bit floating-point number.
Represents a comparison type.
kSSize kPointer_Diff(void *a, void *b)
Calculates the signed difference between two pointers.
Definition: kApiDef.h:346
k32s x
X-coordinate of the origin.
Definition: kApiDef.h:1495
static kInline std::enable_if< std::is_unsigned< T >::value, T >::type kAbs(const T &v)
Returns the absolute value of an unsigned number.
Definition: kApiDef.h:1982
Represents a memory allocator trait.
k32f xc
X-coordinate of the rectangle center.
Definition: kApiDef.h:1606
2D point structure with 32-bit signed integer fields.
Definition: kApiDef.h:1323
Represents a boolean value.
kStatus k64u_Parse(k64u *value, const kChar *str)
Converts string to k64u value.
k16s x
X-coordinate of the origin.
Definition: kApiDef.h:1479
Represents alignment options for allocations.
kStatus kMacAddress_Parse(kMacAddress *address, const kChar *text)
Parses a text-formatted Ethernet MAC address.
kSize count
Count of values in this field (typically 1; can be higher for "array value" fields, e.g. kText32).
Definition: kApiDef.h:2490
T kAdjustFloor(const T &value, const T &min, const T &max, const T &granularity)
Rounds the specified input down, conforming to minimum, maximum, and granularity constraints.
Definition: kApiDef.h:2194
k32f height
Height of the rectangle.
Definition: kApiDef.h:1514
k8u g
Green component value.
Definition: kApiDef.h:1734
3D point structure with 64-bit floating-point fields.
Definition: kApiDef.h:1421
static kInline std::enable_if< std::is_unsigned< T >::value, T >::type kSign(const T &v)
Returns the sign of an unsigned number.
Definition: kApiDef.h:2012
kBool kAllocTrait_IsCudaDevice(kAllocTrait traits)
Reports whether the kALLOC_TRAIT_CUDA_DEVICE trait is present in an allocator trait bitset...
Definition: kApiDef.h:2376
3D point structure with 32-bit signed integer fields.
Definition: kApiDef.h:1391
k16s z
Z-coordinate value.
Definition: kApiDef.h:1452
kStatus k8u_Parse(k8u *value, const kChar *str)
Converts string to k8u value.
k32f y
Y-coordinate value.
Definition: kApiDef.h:1409
4D point structure with 16-bit signed integer fields.
Definition: kApiDef.h:1448
kStatus k8s_Parse(k8s *value, const kChar *str)
Converts string to k8s value.