basic_macros.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*
  2. Minetest
  3. Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
  4. This program is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU Lesser General Public License as published by
  6. the Free Software Foundation; either version 2.1 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU Lesser General Public License for more details.
  12. You should have received a copy of the GNU Lesser General Public License along
  13. with this program; if not, write to the Free Software Foundation, Inc.,
  14. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  15. */
  16. #pragma once
  17. #define ARRLEN(x) (sizeof(x) / sizeof((x)[0]))
  18. #define MYMIN(a, b) ((a) < (b) ? (a) : (b))
  19. #define MYMAX(a, b) ((a) > (b) ? (a) : (b))
  20. // Requires <algorithm>
  21. #define CONTAINS(c, v) (std::find((c).begin(), (c).end(), (v)) != (c).end())
  22. // To disable copy constructors and assignment operations for some class
  23. // 'Foobar', add the macro DISABLE_CLASS_COPY(Foobar) as a private member.
  24. // Note this also disables copying for any classes derived from 'Foobar' as well
  25. // as classes having a 'Foobar' member.
  26. #define DISABLE_CLASS_COPY(C) \
  27. C(const C &) = delete; \
  28. C &operator=(const C &) = delete;
  29. #ifndef _MSC_VER
  30. #define UNUSED_ATTRIBUTE __attribute__ ((unused))
  31. #else
  32. #define UNUSED_ATTRIBUTE
  33. #endif
  34. // Fail compilation if condition expr is not met.
  35. // Note that 'msg' must follow the format of a valid identifier, e.g.
  36. // STATIC_ASSERT(sizeof(foobar_t) == 40), foobar_t_is_wrong_size);
  37. #define STATIC_ASSERT(expr, msg) \
  38. UNUSED_ATTRIBUTE typedef char msg[!!(expr) * 2 - 1]
  39. // Macros to facilitate writing position vectors to a stream
  40. // Usage:
  41. // v3s16 pos(1,2,3);
  42. // mystream << "message " << PP(pos) << std::endl;
  43. #define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
  44. #define PP2(x) "("<<(x).X<<","<<(x).Y<<")"