You.i Engine
YiPredef.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2020. All rights reserved.
2 #ifndef _YI_PREDEF_H_
3 #define _YI_PREDEF_H_
4 
5 #define YI_DRAW_SKIP
6 
12 #if defined(__x86_64__) || defined(__powerpc64__) || defined(__powerpc64__) || defined(_WIN64) || \
13  defined(__powerpc64__) || defined(__alpha__) || defined(__ia64__) || defined(__s390__) || \
14  defined(__s390x__) || defined(__arm64) || defined(__aarch64__) || defined(__amd64__) || \
15  defined(_M_AMD64) || defined(_M_X64)
16 # define YI_ENV_64 1
17 #else
18 # define YI_ENV_32 1
19 #endif
20 
21 // Enforce debuging preprocessor directive
22 #if !defined(YI_DEBUG) && !defined(_DEBUG) && !defined(DEBUG) && !defined(NDEBUG)
23 # error None of the expected debugging (or release) macros can be found. YI_DEBUG must be defined for debug builds, and NDEBUG must be defined for release builds.
24 #endif
25 #if defined(YI_DEBUG) || defined(_DEBUG) || defined(DEBUG)
26 # if !defined(YI_DEBUG)
27 # define YI_DEBUG 1
28 # endif
29 # if !defined(_DEBUG)
30 # define _DEBUG 1
31 # endif
32 # if !defined(DEBUG)
33 # define DEBUG 1
34 # endif
35 #endif
36 #if defined(YI_DEBUG) && defined(NDEBUG)
37 # error YI_DEBUG and NDEBUG cannot both be defined at the same time.
38 #endif
39 
40 #define YI_FULLY_SUPPORTS_CPP14_CONSTEXPR 1
41 #define YI_IS_LITTLE_ENDIAN 1
42 
43 #include <framework/YiPredefPlatform.h>
45 
46 // On Playstation 4 the maximum named synchronization objects (std::mutex, std::condition_variable, std::recursive_mutex) is 4096.
47 // Synchronization objects take a name parameter on PS4 which is set to nullptr to make them un-named. On every other platform this define is empty because synchronization objects only have the default constructor.
48 #ifndef YI_SYNCHRONIZATION_OBJECT_INIT_VALUE
49 # define YI_SYNCHRONIZATION_OBJECT_INIT_VALUE
50 #endif
51 
52 // Mandatory CWE-120 preventions
53 #if !defined(YI_DISABLE_SECURITY)
54 # define strcat(dst, src) YI_ERROR("strcat: Does not check for buffer overflows when concatenating to destination (CWE-120). Consider using YI_STRNCAT, strcat_s, or strlcat (warning, YI_STRNCAT is easily misused).")
55 # define strcpy(dst, src) YI_ERROR("strcpy: Does not check for buffer overflows when copying to destination (CWE-120). Consider using YI_STRNCPY, strcpy_s, or strlcpy (warning, YI_STRNCAT is easily misused).")
56 # define gets(str) YI_ERROR("gets: Does not check for buffer overflows (CWE-120, CWE-20). Use fgets() instead.")
57 # define wcscpy(dst, src) YI_ERROR("wcscpy: Does not check for buffer overflows when copying to destination (CWE-120). Consider using a function version that stops copying at the end of the buffer.")
58 # define wcscat(dst, src) YI_ERROR("wcscat: Does not check for buffer overflows when concatenating to destination (CWE-120).")
59 
60 template<typename T, typename... Args>
61 inline int sprintf(T &&, Args &&...)
62 {
63  static_assert(std::is_void<T>::value, "sprintf: Does not check for buffer overflows (CWE-120). Use YI_SNPRINTF, YI_VSNPRINTF, or sprintf_s.");
64  return -1;
65 }
66 #endif
67 
68 #include <cstdint>
69 
70 #define YI_WTEXT(quote) (const wchar_t *)L##quote
71 #define YI_TEXT(quote) (const char *)quote
72 #define YI_TEXT16(quote) (const char16_t *)L##quote
73 #define YI_TEXT32(quote) (const char32_t *)L##quote
74 
75 // framework/YiPredefXXXXX.h should define YI_HASINLINE if platform supports
76 // however the double underscored __inline is Microsoft specific and no other platforms define YI_HASINLINE at the moment
77 // presumably they would use inline
78 #ifdef YI_HASINLINE
79 # define YI_INLINE __inline
80 # define YI_EXTERNINLINE extern __inline
81 #else
82 # define YI_INLINE
83 # define YI_EXTERNINLINE
84 #endif
85 #define YI_SEEK_SET 0
86 #define YI_SEEK_END 1
87 #define YI_SEEK_CUR 2
88 #define YI_MAX_PATH 260
89 #define YI_MAX_BUFFER 1024
90 
91 #define YI_MIN(a, b) (((a) < (b)) ? (a) : (b))
92 #define YI_MAX(a, b) (((a) < (b)) ? (b) : (a))
93 #define YI_FLOAT_EQUAL(a, b) ((a) >= ((b)-FLT_EPSILON) && (a) <= ((b) + FLT_EPSILON))
94 #define YI_UNUSED(param) (void)(param)
95 
96 #if defined(_MSC_VER)
97 # define YI_UNUSED_ATTRIBUTE
98 #else
99 # define YI_UNUSED_ATTRIBUTE __attribute__((unused))
100 #endif
101 
102 #if defined(__clang__) || defined(__GNUC__)
103 # define YI_FORCE_INLINE __attribute__((always_inline)) inline
104 #elif defined(_MSC_VER)
105 # define YI_FORCE_INLINE __forceinline
106 #else
107 # define YI_FORCE_INLINE inline
108 #endif
109 
110 // Detect if template specialization of templated functions is fully supported
111 #if defined(_MSC_VER)
112 # if _MSC_VER != 1800 // there's a bug in vs2013 that prevents template specializations from working in some cases (e.g. when used with YiEnableIf)
113 # define YI_FUNCTION_SPECIALIZATION_FULLY_SUPPORTED
114 # endif
115 #else
116 # define YI_FUNCTION_SPECIALIZATION_FULLY_SUPPORTED
117 #endif
118 
122 #define YI_DISALLOW_COPY_AND_ASSIGN(TypeName) \
123  TypeName(const TypeName &) = delete; \
124  TypeName &operator=(const TypeName &) = delete;
125 
129 #define YI_DEFAULT_MOVE_AND_COPY(TypeName) \
130  TypeName &operator=(const TypeName &) = default; \
131  TypeName &operator=(TypeName &&) = default; \
132  TypeName(const TypeName &) = default; \
133  TypeName(TypeName &&) = default;
134 
138 #define YI_DEFAULT_MOVE_NO_COPY(TypeName) \
139  TypeName &operator=(const TypeName &) = delete; \
140  TypeName &operator=(TypeName &&) = default; \
141  TypeName(const TypeName &) = delete; \
142  TypeName(TypeName &&) = default;
143 
147 #define YI_DEFAULT_MOVE(TypeName) \
148  TypeName &operator=(TypeName &&) = default; \
149  TypeName(TypeName &&) = default;
150 
154 #define YI_DEFAULT_COPY(TypeName) \
155  TypeName &operator=(const TypeName &) = default; \
156  TypeName(const TypeName &) = default;
157 
158 #if !defined(DOXY) && defined(YI_WIN32)
159 # define YI_REMOVE_CONSTANT_CONDITION(x) \
160  __pragma(warning(push)) \
161  __pragma(warning(disable : 4127)) do { x } \
162  while ((void)0, 0) \
163  __pragma(warning(pop))
164 #else
165 
174 # define YI_REMOVE_CONSTANT_CONDITION(x) \
175  do \
176  { \
177  x \
178  } while ((void)0, 0)
179 #endif
180 
181 // Structures
182 
183 struct YI_POINT
184 {
185  int32_t x;
186  int32_t y;
187 };
188 
190 {
191  float x;
192  float y;
193 };
194 
195 struct YI_RECT_REL;
196 
197 struct YI_RECT
198 {
200  : left(0)
201  , top(0)
202  , right(0)
203  , bottom(0)
204  {
205  }
206 
207  YI_RECT(int32_t left, int32_t top, int32_t right, int32_t bottom)
208  : left(left)
209  , top(top)
210  , right(right)
211  , bottom(bottom)
212  {
213  }
214 
215  YI_RECT(const YI_RECT_REL &rect);
216 
217  void Set(int32_t _left, int32_t _top, int32_t _right, int32_t _bottom)
218  {
219  left = _left;
220  top = _top;
221  right = _right;
222  bottom = _bottom;
223  }
224 
225  YI_RECT &operator=(const YI_RECT_REL &rect);
226 
227  bool operator<(YI_RECT const &other) const
228  {
229  if (left < other.left)
230  {
231  return true;
232  }
233  else if (left == other.left)
234  {
235  if (top < other.top)
236  {
237  return true;
238  }
239  else if (top == other.top)
240  {
241  if (right < other.right)
242  {
243  return true;
244  }
245  else if (right == other.right)
246  {
247  if (bottom < other.bottom)
248  {
249  return true;
250  }
251  }
252  }
253  }
254  return false;
255  }
256 
257  bool operator>(const YI_RECT &rhs) const
258  {
259  return rhs < *this;
260  }
261 
262  bool operator<=(const YI_RECT &rhs) const
263  {
264  return !(rhs < *this);
265  }
266 
267  bool operator>=(const YI_RECT &rhs) const
268  {
269  return !(*this < rhs);
270  }
271 
272  bool operator==(const YI_RECT &rhs) const
273  {
274  return (left == rhs.left) &&
275  (top == rhs.top) &&
276  (right == rhs.right) &&
277  (bottom == rhs.bottom);
278  }
279 
280  bool operator!=(const YI_RECT &rhs) const
281  {
282  return !(*this == rhs);
283  }
284 
285  int32_t left;
286  int32_t top;
287  int32_t right;
288  int32_t bottom;
289 };
290 
292 {
294  : x(0)
295  , y(0)
296  , width(0)
297  , height(0)
298  {
299  }
300 
301  YI_RECT_REL(int32_t x, int32_t y, int32_t width, int32_t height)
302  : x(x)
303  , y(y)
304  , width(width)
305  , height(height)
306  {
307  }
308 
309  YI_RECT_REL(const YI_RECT &rect)
310  : x(rect.left)
311  , y(rect.top)
312  , width(rect.right - rect.left)
313  , height(rect.bottom - rect.top)
314  {
315  }
316 
317  void Set(int32_t _x, int32_t _y, int32_t _width, int32_t _height)
318  {
319  x = _x;
320  y = _y;
321  width = _width;
322  height = _height;
323  }
324 
326  {
327  x = rect.left;
328  y = rect.top;
329  width = rect.right - rect.left;
330  height = rect.bottom - rect.top;
331  return *this;
332  }
333 
334  bool operator<(YI_RECT_REL const &other) const
335  {
336  if (x < other.x)
337  {
338  return true;
339  }
340  else if (x == other.x)
341  {
342  if (y < other.y)
343  {
344  return true;
345  }
346  else if (y == other.y)
347  {
348  if (width < other.width)
349  {
350  return true;
351  }
352  else if (width == other.width)
353  {
354  if (height < other.height)
355  {
356  return true;
357  }
358  }
359  }
360  }
361  return false;
362  }
363 
364  bool operator>(const YI_RECT_REL &rhs) const
365  {
366  return rhs < *this;
367  }
368 
369  bool operator<=(const YI_RECT_REL &rhs) const
370  {
371  return !(rhs < *this);
372  }
373 
374  bool operator>=(const YI_RECT_REL &rhs) const
375  {
376  return !(*this < rhs);
377  }
378 
379  bool operator==(const YI_RECT_REL &rhs) const
380  {
381  return (x == rhs.x) &&
382  (y == rhs.y) &&
383  (width == rhs.width) &&
384  (height == rhs.height);
385  }
386 
387  bool operator!=(const YI_RECT_REL &rhs) const
388  {
389  return !(*this == rhs);
390  }
391 
392  int32_t x;
393  int32_t y;
394  int32_t width;
395  int32_t height;
396 };
397 
398 inline YI_RECT::YI_RECT(const YI_RECT_REL &rect)
399  : left(rect.x)
400  , top(rect.y)
401  , right(rect.x + rect.width)
402  , bottom(rect.y + rect.height)
403 {
404 }
405 
407 {
408  left = rect.x;
409  top = rect.y;
410  right = rect.x + rect.width;
411  bottom = rect.y + rect.height;
412  return *this;
413 }
414 
415 struct YI_FLOAT_RECT_REL;
416 
418 {
420  : left(0)
421  , top(0)
422  , right(0)
423  , bottom(0)
424  {
425  }
426 
427  YI_FLOAT_RECT(float left, float top, float right, float bottom)
428  : left(left)
429  , top(top)
430  , right(right)
431  , bottom(bottom)
432  {
433  }
434 
435  YI_FLOAT_RECT(const YI_FLOAT_RECT_REL &rect);
436 
437  explicit YI_FLOAT_RECT(const YI_RECT &rect)
438  : left((float)rect.left)
439  , top((float)rect.top)
440  , right((float)rect.right)
441  , bottom((float)rect.bottom)
442  {
443  }
444 
445  void Set(float _left, float _top, float _right, float _bottom)
446  {
447  left = _left;
448  top = _top;
449  right = _right;
450  bottom = _bottom;
451  }
452 
454 
456  {
457  left = (float)rect.left;
458  top = (float)rect.top;
459  right = (float)rect.right;
460  bottom = (float)rect.bottom;
461  return *this;
462  }
463 
464  bool operator<(const YI_FLOAT_RECT &rhs) const
465  {
466  if (left < rhs.left)
467  {
468  return true;
469  }
470  else if (left > rhs.left)
471  {
472  return false;
473  }
474 
475  if (top < rhs.top)
476  {
477  return true;
478  }
479  else if (top > rhs.top)
480  {
481  return false;
482  }
483 
484  if (right < rhs.right)
485  {
486  return true;
487  }
488  else if (right > rhs.right)
489  {
490  return false;
491  }
492 
493  return bottom < rhs.bottom;
494  }
495 
496  bool operator>(const YI_FLOAT_RECT &rhs) const
497  {
498  return rhs < *this;
499  }
500 
501  bool operator<=(const YI_FLOAT_RECT &rhs) const
502  {
503  return !(rhs < *this);
504  }
505 
506  bool operator>=(const YI_FLOAT_RECT &rhs) const
507  {
508  return !(*this < rhs);
509  }
510 
511  bool operator==(const YI_FLOAT_RECT &rhs) const
512  {
513  return YI_FLOAT_EQUAL(left, rhs.left) &&
514  YI_FLOAT_EQUAL(top, rhs.top) &&
515  YI_FLOAT_EQUAL(right, rhs.right) &&
517  }
518 
519  bool operator!=(const YI_FLOAT_RECT &rhs) const
520  {
521  return !(*this == rhs);
522  }
523 
524  float left;
525  float top;
526  float right;
527  float bottom;
528 };
529 
531 {
533  : x(0)
534  , y(0)
535  , width(0)
536  , height(0)
537  {
538  }
539 
540  YI_FLOAT_RECT_REL(float x, float y, float width, float height)
541  : x(x)
542  , y(y)
543  , width(width)
544  , height(height)
545  {
546  }
547 
549  : x(rect.left)
550  , y(rect.top)
551  , width(rect.right - rect.left)
552  , height(rect.bottom - rect.top)
553  {
554  }
555 
556  explicit YI_FLOAT_RECT_REL(const YI_RECT_REL &rect)
557  : x((float)rect.x)
558  , y((float)rect.y)
559  , width((float)rect.width)
560  , height((float)rect.height)
561  {
562  }
563 
564  void Set(float _x, float _y, float _width, float _height)
565  {
566  x = _x;
567  y = _y;
568  width = _width;
569  height = _height;
570  }
571 
573  {
574  x = rect.left;
575  y = rect.top;
576  width = rect.right - rect.left;
577  height = rect.bottom - rect.top;
578  return *this;
579  }
580 
582  {
583  x = (float)rect.x;
584  y = (float)rect.y;
585  width = (float)rect.width;
586  height = (float)rect.height;
587  return *this;
588  }
589 
590  bool operator<(const YI_FLOAT_RECT_REL &rhs) const
591  {
592  if (x < rhs.x)
593  {
594  return true;
595  }
596  else if (x > rhs.x)
597  {
598  return false;
599  }
600 
601  if (y < rhs.y)
602  {
603  return true;
604  }
605  else if (y > rhs.y)
606  {
607  return false;
608  }
609 
610  if (width < rhs.width)
611  {
612  return true;
613  }
614  else if (width > rhs.width)
615  {
616  return false;
617  }
618 
619  return height < rhs.height;
620  }
621 
622  bool operator>(const YI_FLOAT_RECT_REL &rhs) const
623  {
624  return rhs < *this;
625  }
626 
627  bool operator<=(const YI_FLOAT_RECT_REL &rhs) const
628  {
629  return !(rhs < *this);
630  }
631 
632  bool operator>=(const YI_FLOAT_RECT_REL &rhs) const
633  {
634  return !(*this < rhs);
635  }
636 
637  bool operator==(const YI_FLOAT_RECT_REL &rhs) const
638  {
639  return YI_FLOAT_EQUAL(x, rhs.x) &&
640  YI_FLOAT_EQUAL(y, rhs.y) &&
641  YI_FLOAT_EQUAL(width, rhs.width) &&
642  YI_FLOAT_EQUAL(height, rhs.height);
643  }
644 
645  bool operator!=(const YI_FLOAT_RECT_REL &rhs) const
646  {
647  return !(*this == rhs);
648  }
649 
650  float x;
651  float y;
652  float width;
653  float height;
654 };
655 
657  : left(rect.x)
658  , top(rect.y)
659  , right(rect.x + rect.width)
660  , bottom(rect.y + rect.height)
661 {
662 }
663 
665 {
666  left = rect.x;
667  top = rect.y;
668  right = rect.x + rect.width;
669  bottom = rect.y + rect.height;
670  return *this;
671 }
672 
673 // Macros to help with endianess
674 #if defined(__BIG_ENDIAN__)
675 # define YI_LITTLE_ENDIAN_16(a) (((a & 0xff) << 8) | ((a & 0xff00) >> 8))
676 # define YI_LITTLE_ENDIAN_24(a) (((a >> 16) & 0xff) | (a & 0xff00) | ((a & 0xff) << 16))
677 # define YI_LITTLE_ENDIAN_32(a) (((a >> 24) & 0xff) | ((a >> 8) & 0xff00) | ((a & 0xff00) << 8) | ((a & 0xff) << 24))
678 # ifdef _MSC_VER
679 # define YI_LITTLE_ENDIAN_64(a) (((a >> 56) & 0xff) | ((a >> 40) & 0xff00) | ((a >> 24) & 0xff0000) | ((a >> 8) & 0xff000000) | \
680  ((a << 8) & DECL_U64(0xff00000000)) | ((a << 24) & DECL_U64(0xff0000000000)) | \
681  ((a << 40) & DECL_U64(0xff000000000000)) | ((a << 56) & DECL_U64(0xff00000000000000)))
682 # else
683 # define YI_LITTLE_ENDIAN_64(a) (((a >> 56) & 0xff) | ((a >> 40) & 0xff00) | ((a >> 24) & 0xff0000) | ((a >> 8) & 0xff000000) | \
684  ((a << 8) & 0xff00000000LLU) | ((a << 24) & 0xff0000000000LLU) | \
685  ((a << 40) & 0xff000000000000LLU) | ((a << 56) & 0xff00000000000000LLU))
686 # endif
687 #else
688 # define YI_LITTLE_ENDIAN_16(a) (a)
689 # define YI_LITTLE_ENDIAN_24(a) (a)
690 # define YI_LITTLE_ENDIAN_32(a) (a)
691 # define YI_LITTLE_ENDIAN_64(a) (a)
692 #endif
693 
699 
700 #endif // _YI_PREDEF_H_
YI_FLOAT_RECT_REL(float x, float y, float width, float height)
Definition: YiPredef.h:540
bool operator<=(const YI_RECT_REL &rhs) const
Definition: YiPredef.h:369
void Set(float _x, float _y, float _width, float _height)
Definition: YiPredef.h:564
float x
Definition: YiPredef.h:650
YI_FLOAT_RECT_REL & operator=(const YI_RECT_REL &rect)
Definition: YiPredef.h:581
YI_FLOAT_RECT_REL()
Definition: YiPredef.h:532
YI_FLOAT_RECT_REL & operator=(const YI_FLOAT_RECT &rect)
Definition: YiPredef.h:572
bool operator>(const YI_RECT_REL &rhs) const
Definition: YiPredef.h:364
bool operator<=(const YI_FLOAT_RECT &rhs) const
Definition: YiPredef.h:501
void Set(int32_t _left, int32_t _top, int32_t _right, int32_t _bottom)
Definition: YiPredef.h:217
YI_FLOAT_RECT(float left, float top, float right, float bottom)
Definition: YiPredef.h:427
float left
Definition: YiPredef.h:524
Definition: YiPredef.h:291
float width
Definition: YiPredef.h:652
YI_FLOAT_RECT_REL(const YI_FLOAT_RECT &rect)
Definition: YiPredef.h:548
bool operator==(const YI_RECT_REL &rhs) const
Definition: YiPredef.h:379
float x
Definition: YiPredef.h:191
bool operator<(const YI_FLOAT_RECT_REL &rhs) const
Definition: YiPredef.h:590
YI_FLOAT_RECT_REL(const YI_RECT_REL &rect)
Definition: YiPredef.h:556
bool operator==(const YI_RECT &rhs) const
Definition: YiPredef.h:272
int32_t x
Definition: YiPredef.h:392
bool operator!=(const YI_FLOAT_RECT &rhs) const
Definition: YiPredef.h:519
Definition: YiPredef.h:197
float top
Definition: YiPredef.h:525
int32_t height
Definition: YiPredef.h:395
bool operator!=(const YI_RECT_REL &rhs) const
Definition: YiPredef.h:387
bool operator<=(const YI_RECT &rhs) const
Definition: YiPredef.h:262
void Set(float _left, float _top, float _right, float _bottom)
Definition: YiPredef.h:445
bool operator>(const YI_RECT &rhs) const
Definition: YiPredef.h:257
YI_RECT & operator=(const YI_RECT_REL &rect)
Definition: YiPredef.h:406
bool operator!=(const YI_FLOAT_RECT_REL &rhs) const
Definition: YiPredef.h:645
int32_t width
Definition: YiPredef.h:394
bool operator==(const YI_FLOAT_RECT &rhs) const
Definition: YiPredef.h:511
YI_FLOAT_RECT & operator=(const YI_FLOAT_RECT_REL &rect)
Definition: YiPredef.h:664
bool operator>=(const YI_RECT_REL &rhs) const
Definition: YiPredef.h:374
int32_t bottom
Definition: YiPredef.h:288
Definition: YiPredef.h:417
bool operator<=(const YI_FLOAT_RECT_REL &rhs) const
Definition: YiPredef.h:627
int32_t top
Definition: YiPredef.h:286
YI_RECT()
Definition: YiPredef.h:199
int32_t right
Definition: YiPredef.h:287
float bottom
Definition: YiPredef.h:527
void Set(int32_t _x, int32_t _y, int32_t _width, int32_t _height)
Definition: YiPredef.h:317
int sprintf(T &&, Args &&...)
Definition: YiPredef.h:61
YI_FLOAT_RECT(const YI_RECT &rect)
Definition: YiPredef.h:437
YI_RECT_REL(int32_t x, int32_t y, int32_t width, int32_t height)
Definition: YiPredef.h:301
bool operator>=(const YI_FLOAT_RECT_REL &rhs) const
Definition: YiPredef.h:632
bool operator>(const YI_FLOAT_RECT_REL &rhs) const
Definition: YiPredef.h:622
float height
Definition: YiPredef.h:653
YI_RECT_REL(const YI_RECT &rect)
Definition: YiPredef.h:309
Definition: YiPredef.h:183
int32_t left
Definition: YiPredef.h:285
bool operator<(YI_RECT_REL const &other) const
Definition: YiPredef.h:334
bool operator==(const YI_FLOAT_RECT_REL &rhs) const
Definition: YiPredef.h:637
bool operator>(const YI_FLOAT_RECT &rhs) const
Definition: YiPredef.h:496
YI_FLOAT_RECT & operator=(const YI_RECT &rect)
Definition: YiPredef.h:455
YI_RECT(int32_t left, int32_t top, int32_t right, int32_t bottom)
Definition: YiPredef.h:207
Definition: YiPredef.h:530
int32_t x
Definition: YiPredef.h:185
bool operator<(YI_RECT const &other) const
Definition: YiPredef.h:227
YI_RECT_REL()
Definition: YiPredef.h:293
bool operator!=(const YI_RECT &rhs) const
Definition: YiPredef.h:280
YI_FLOAT_RECT()
Definition: YiPredef.h:419
int32_t y
Definition: YiPredef.h:186
YI_RECT_REL & operator=(const YI_RECT &rect)
Definition: YiPredef.h:325
int32_t y
Definition: YiPredef.h:393
Definition: YiPredef.h:189
bool operator<(const YI_FLOAT_RECT &rhs) const
Definition: YiPredef.h:464
float y
Definition: YiPredef.h:192
#define YI_FLOAT_EQUAL(a, b)
Definition: YiPredef.h:93
float right
Definition: YiPredef.h:526
bool operator>=(const YI_FLOAT_RECT &rhs) const
Definition: YiPredef.h:506
float y
Definition: YiPredef.h:651
bool operator>=(const YI_RECT &rhs) const
Definition: YiPredef.h:267