common.hpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #ifndef COMMON_HPP
  2. #define COMMON_HPP
  3. #include <iostream>
  4. #include <string>
  5. #include "format.hpp"
  6. namespace
  7. {
  8. const char GI_PTR = '*';
  9. const std::string GI_SUFFIX_REF = "_Ref";
  10. const std::string GI_SUFFIX_CF_CTYPE = "_CF_CType";
  11. const std::string GI_SUFFIX_CB_TRAIT = "_CB_Trait";
  12. const std::string GIR_GOBJECT("GObject.Object");
  13. const std::string GIR_GINITIALLYUNOWNED("GObject.InitiallyUnowned");
  14. const std::string GIR_GVARIANT("GLib.Variant");
  15. const std::string GIR_VOID("none");
  16. const std::string GIR_GDESTROYNOTIFY("GLib.DestroyNotify");
  17. const std::string GDESTROYNOTIFY("GDestroyNotify");
  18. const std::string CPP_VOID("void");
  19. const std::string GIR_SUFFIX(".gir");
  20. const std::string PT_ATTR("<xmlattr>");
  21. const std::string GI_NS("gi");
  22. const std::string GI_NS_INTERNAL("internal");
  23. const std::string GI_NS_IMPL("impl");
  24. const std::string GI_SCOPE("::");
  25. const std::string GI_NS_SCOPED("gi::");
  26. const std::string GI_NS_DETAIL_SCOPED("gi::detail::");
  27. const std::string GI_REPOSITORY_NS("repository");
  28. const std::string GI_INLINE("GI_INLINE_DECL");
  29. const std::string GI_CLASS_IMPL_BEGIN("GI_CLASS_IMPL_BEGIN");
  30. const std::string GI_CLASS_IMPL_END("GI_CLASS_IMPL_END");
  31. const std::string GI_DISABLE_DEPRECATED_WARN_BEGIN(
  32. "GI_DISABLE_DEPRECATED_WARN_BEGIN");
  33. const std::string GI_DISABLE_DEPRECATED_WARN_END(
  34. "GI_DISABLE_DEPRECATED_WARN_END");
  35. const std::string EMPTY;
  36. const std::string EL_REPOSITORY("repository");
  37. const std::string EL_CINCLUDE("c:include");
  38. const std::string EL_ALIAS("alias");
  39. const std::string EL_ENUM("enumeration");
  40. const std::string EL_FLAGS("bitfield");
  41. const std::string EL_MEMBER("member");
  42. const std::string EL_CONST("constant");
  43. const std::string EL_OBJECT("class");
  44. const std::string EL_INTERFACE("interface");
  45. const std::string EL_RECORD("record");
  46. const std::string EL_CALLBACK("callback");
  47. const std::string EL_FUNCTION("function");
  48. const std::string EL_CONSTRUCTOR("constructor");
  49. const std::string EL_METHOD("method");
  50. const std::string EL_VIRTUAL_METHOD("virtual-method");
  51. const std::string EL_FIELD("field");
  52. const std::string EL_PROPERTY("property");
  53. const std::string EL_SIGNAL("glib:signal");
  54. const std::string EL_RETURN("return-value");
  55. const std::string EL_PARAMETERS("parameters");
  56. const std::string EL_INSTANCE_PARAMETER("instance-parameter");
  57. const std::string EL_PARAMETER("parameter");
  58. const std::string EL_TYPE("type");
  59. const std::string EL_ARRAY("array");
  60. const std::string EL_VARARGS("varargs");
  61. const std::string EL_IMPLEMENTS("implements");
  62. const std::string AT_SHARED_LIBRARY("shared-library");
  63. const std::string AT_DEPRECATED("deprecated");
  64. const std::string AT_INTROSPECTABLE("introspectable");
  65. const std::string AT_FOREIGN("foreign");
  66. const std::string AT_SHADOWS("shadows");
  67. const std::string AT_SHADOWED_BY("shadowed-by");
  68. const std::string AT_DISGUISED("disguised");
  69. const std::string AT_MOVED_TO("moved-to");
  70. const std::string AT_VERSION("version");
  71. const std::string AT_NAME("name");
  72. const std::string AT_TRANSFER("transfer-ownership");
  73. const std::string AT_DIRECTION("direction");
  74. const std::string AT_CLOSURE("closure");
  75. const std::string AT_DESTROY("destroy");
  76. const std::string AT_SCOPE("scope");
  77. const std::string AT_NULLABLE("nullable");
  78. const std::string AT_OPTIONAL("optional");
  79. const std::string AT_ALLOW_NONE("allow-none");
  80. const std::string AT_CALLER_ALLOCATES("caller-allocates");
  81. const std::string AT_GLIB_GET_TYPE("glib:get-type");
  82. const std::string AT_GLIB_FUNDAMENTAL("glib:fundamental");
  83. const std::string AT_GLIB_TYPE_STRUCT("glib:type-struct");
  84. const std::string AT_GLIB_IS_TYPE_STRUCT_FOR("glib:is-gtype-struct-for");
  85. const std::string AT_PARENT("parent");
  86. const std::string AT_LENGTH("length");
  87. const std::string AT_ZERO_TERMINATED("zero-terminated");
  88. const std::string AT_FIXED_SIZE("fixed-size");
  89. const std::string AT_THROWS("throws");
  90. const std::string AT_CTYPE("c:type");
  91. const std::string AT_CIDENTIFIER("c:identifier");
  92. const std::string TRANSFER_NOTHING("none");
  93. const std::string TRANSFER_FULL("full");
  94. const std::string TRANSFER_CONTAINER("container");
  95. const std::string SCOPE_NOTIFIED("notified");
  96. const std::string SCOPE_ASYNC("async");
  97. const std::string SCOPE_CALL("call");
  98. const std::string DIR_IN("in");
  99. const std::string DIR_OUT("out");
  100. const std::string DIR_INOUT("inout");
  101. const std::string DIR_RETURN("return");
  102. const std::string AT_READABLE("readable");
  103. const std::string AT_WRITABLE("writable");
  104. const std::string AT_PRIVATE("private");
  105. } // namespace
  106. enum class Log { NONE, ERROR, WARNING, INFO, DEBUG, LOG };
  107. extern Log _loglevel;
  108. template<typename T>
  109. void
  110. logger(Log level, const T &m)
  111. {
  112. static std::string lvl[] = {"NONE", "ERROR", "WARN", "INFO", "DEBUG", "LOG"};
  113. if (level <= _loglevel)
  114. std::cerr << lvl[(int)level] << " " << m << std::endl;
  115. }
  116. template<typename T, typename ARG, typename... ARGS>
  117. void
  118. logger(Log level, const T &m, ARG &&arg, ARGS &&...args)
  119. {
  120. logger(level,
  121. fmt::format(m, std::forward<ARG>(arg), std::forward<ARGS>(args)...));
  122. }
  123. inline bool
  124. is_qualified(const std::string &name)
  125. {
  126. return (name.find(':') != name.npos) || (name.find('.') != name.npos);
  127. }
  128. inline std::string
  129. toupper(const std::string &s)
  130. {
  131. auto c = s;
  132. for (auto &ch : c)
  133. ch = std::toupper(ch);
  134. return c;
  135. }
  136. inline std::string
  137. tolower(const std::string &s)
  138. {
  139. auto c = s;
  140. for (auto &ch : c)
  141. ch = std::tolower(ch);
  142. return c;
  143. }
  144. #endif // COMMON_HPP