make.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. /*
  2. Copyright Rene Rivera 2008-2015
  3. Distributed under the Boost Software License, Version 1.0.
  4. (See accompanying file LICENSE_1_0.txt or copy at
  5. http://www.boost.org/LICENSE_1_0.txt)
  6. */
  7. #include <asio2/bho/predef/detail/test.h>
  8. #ifndef BHO_PREDEF_MAKE_H
  9. #define BHO_PREDEF_MAKE_H
  10. /*
  11. Shorthands for the common version number formats used by vendors...
  12. */
  13. /* tag::reference[]
  14. = `BHO_PREDEF_MAKE_..` macros
  15. These set of macros decompose common vendor version number
  16. macros which are composed version, revision, and patch digits.
  17. The naming convention indicates:
  18. * The base of the specified version number. "`BHO_PREDEF_MAKE_0X`" for
  19. hexadecimal digits, and "`BHO_PREDEF_MAKE_10`" for decimal digits.
  20. * The format of the vendor version number. Where "`V`" indicates the version digits,
  21. "`R`" indicates the revision digits, "`P`" indicates the patch digits, and "`0`"
  22. indicates an ignored digit.
  23. Macros are:
  24. */ // end::reference[]
  25. /* tag::reference[]
  26. * `BHO_PREDEF_MAKE_0X_VRP(V)`
  27. */ // end::reference[]
  28. #define BHO_PREDEF_MAKE_0X_VRP(V) BHO_VERSION_NUMBER((V&0xF00)>>8,(V&0xF0)>>4,(V&0xF))
  29. /* tag::reference[]
  30. * `BHO_PREDEF_MAKE_0X_VVRP(V)`
  31. */ // end::reference[]
  32. #define BHO_PREDEF_MAKE_0X_VVRP(V) BHO_VERSION_NUMBER((V&0xFF00)>>8,(V&0xF0)>>4,(V&0xF))
  33. /* tag::reference[]
  34. * `BHO_PREDEF_MAKE_0X_VRPP(V)`
  35. */ // end::reference[]
  36. #define BHO_PREDEF_MAKE_0X_VRPP(V) BHO_VERSION_NUMBER((V&0xF000)>>12,(V&0xF00)>>8,(V&0xFF))
  37. /* tag::reference[]
  38. * `BHO_PREDEF_MAKE_0X_VVRR(V)`
  39. */ // end::reference[]
  40. #define BHO_PREDEF_MAKE_0X_VVRR(V) BHO_VERSION_NUMBER((V&0xFF00)>>8,(V&0xFF),0)
  41. /* tag::reference[]
  42. * `BHO_PREDEF_MAKE_0X_VRRPPPP(V)`
  43. */ // end::reference[]
  44. #define BHO_PREDEF_MAKE_0X_VRRPPPP(V) BHO_VERSION_NUMBER((V&0xF000000)>>24,(V&0xFF0000)>>16,(V&0xFFFF))
  45. /* tag::reference[]
  46. * `BHO_PREDEF_MAKE_0X_VVRRP(V)`
  47. */ // end::reference[]
  48. #define BHO_PREDEF_MAKE_0X_VVRRP(V) BHO_VERSION_NUMBER((V&0xFF000)>>12,(V&0xFF0)>>4,(V&0xF))
  49. /* tag::reference[]
  50. * `BHO_PREDEF_MAKE_0X_VRRPP000(V)`
  51. */ // end::reference[]
  52. #define BHO_PREDEF_MAKE_0X_VRRPP000(V) BHO_VERSION_NUMBER((V&0xF0000000)>>28,(V&0xFF00000)>>20,(V&0xFF000)>>12)
  53. /* tag::reference[]
  54. * `BHO_PREDEF_MAKE_0X_VVRRPP(V)`
  55. */ // end::reference[]
  56. #define BHO_PREDEF_MAKE_0X_VVRRPP(V) BHO_VERSION_NUMBER((V&0xFF0000)>>16,(V&0xFF00)>>8,(V&0xFF))
  57. /* tag::reference[]
  58. * `BHO_PREDEF_MAKE_10_VPPP(V)`
  59. */ // end::reference[]
  60. #define BHO_PREDEF_MAKE_10_VPPP(V) BHO_VERSION_NUMBER(((V)/1000)%10,0,(V)%1000)
  61. /* tag::reference[]
  62. * `BHO_PREDEF_MAKE_10_VVPPP(V)`
  63. */ // end::reference[]
  64. #define BHO_PREDEF_MAKE_10_VVPPP(V) BHO_VERSION_NUMBER(((V)/1000)%100,0,(V)%1000)
  65. /* tag::reference[]
  66. * `BHO_PREDEF_MAKE_10_VR0(V)`
  67. */ // end::reference[]
  68. #define BHO_PREDEF_MAKE_10_VR0(V) BHO_VERSION_NUMBER(((V)/100)%10,((V)/10)%10,0)
  69. /* tag::reference[]
  70. * `BHO_PREDEF_MAKE_10_VRP(V)`
  71. */ // end::reference[]
  72. #define BHO_PREDEF_MAKE_10_VRP(V) BHO_VERSION_NUMBER(((V)/100)%10,((V)/10)%10,(V)%10)
  73. /* tag::reference[]
  74. * `BHO_PREDEF_MAKE_10_VRP000(V)`
  75. */ // end::reference[]
  76. #define BHO_PREDEF_MAKE_10_VRP000(V) BHO_VERSION_NUMBER(((V)/100000)%10,((V)/10000)%10,((V)/1000)%10)
  77. /* tag::reference[]
  78. * `BHO_PREDEF_MAKE_10_VRPPPP(V)`
  79. */ // end::reference[]
  80. #define BHO_PREDEF_MAKE_10_VRPPPP(V) BHO_VERSION_NUMBER(((V)/100000)%10,((V)/10000)%10,(V)%10000)
  81. /* tag::reference[]
  82. * `BHO_PREDEF_MAKE_10_VRPP(V)`
  83. */ // end::reference[]
  84. #define BHO_PREDEF_MAKE_10_VRPP(V) BHO_VERSION_NUMBER(((V)/1000)%10,((V)/100)%10,(V)%100)
  85. /* tag::reference[]
  86. * `BHO_PREDEF_MAKE_10_VRR(V)`
  87. */ // end::reference[]
  88. #define BHO_PREDEF_MAKE_10_VRR(V) BHO_VERSION_NUMBER(((V)/100)%10,(V)%100,0)
  89. /* tag::reference[]
  90. * `BHO_PREDEF_MAKE_10_VRRPP(V)`
  91. */ // end::reference[]
  92. #define BHO_PREDEF_MAKE_10_VRRPP(V) BHO_VERSION_NUMBER(((V)/10000)%10,((V)/100)%100,(V)%100)
  93. /* tag::reference[]
  94. * `BHO_PREDEF_MAKE_10_VRR000(V)`
  95. */ // end::reference[]
  96. #define BHO_PREDEF_MAKE_10_VRR000(V) BHO_VERSION_NUMBER(((V)/100000)%10,((V)/1000)%100,0)
  97. /* tag::reference[]
  98. * `BHO_PREDEF_MAKE_10_VV00(V)`
  99. */ // end::reference[]
  100. #define BHO_PREDEF_MAKE_10_VV00(V) BHO_VERSION_NUMBER(((V)/100)%100,0,0)
  101. /* tag::reference[]
  102. * `BHO_PREDEF_MAKE_10_VVR_0PPPPP(V, P)`, the second parameter specifies a year-month patch level with the first digit discarded
  103. */ // end::reference[]
  104. #define BHO_PREDEF_MAKE_10_VVR_0PPPPP(V, P) BHO_VERSION_NUMBER(((V)/10)%100,(V)%10,(P)%100000)
  105. /* tag::reference[]
  106. * `BHO_PREDEF_MAKE_10_VVRR(V)`
  107. */ // end::reference[]
  108. #define BHO_PREDEF_MAKE_10_VVRR(V) BHO_VERSION_NUMBER(((V)/100)%100,(V)%100,0)
  109. /* tag::reference[]
  110. * `BHO_PREDEF_MAKE_10_VVRRP(V)`
  111. */ // end::reference[]
  112. #define BHO_PREDEF_MAKE_10_VVRRP(V) BHO_VERSION_NUMBER(((V)/1000)%100,((V)/10)%100,(V)%10)
  113. /* tag::reference[]
  114. * `BHO_PREDEF_MAKE_10_VVRRPP(V)`
  115. */ // end::reference[]
  116. #define BHO_PREDEF_MAKE_10_VVRRPP(V) BHO_VERSION_NUMBER(((V)/10000)%100,((V)/100)%100,(V)%100)
  117. /* tag::reference[]
  118. * `BHO_PREDEF_MAKE_10_VVRRPPP(V)`
  119. */ // end::reference[]
  120. #define BHO_PREDEF_MAKE_10_VVRRPPP(V) BHO_VERSION_NUMBER(((V)/100000)%100,((V)/1000)%100,(V)%1000)
  121. /* tag::reference[]
  122. * `BHO_PREDEF_MAKE_10_VVRR0PP00(V)`
  123. */ // end::reference[]
  124. #define BHO_PREDEF_MAKE_10_VVRR0PP00(V) BHO_VERSION_NUMBER(((V)/10000000)%100,((V)/100000)%100,((V)/100)%100)
  125. /* tag::reference[]
  126. * `BHO_PREDEF_MAKE_10_VVRR0PPPP(V)`
  127. */ // end::reference[]
  128. #define BHO_PREDEF_MAKE_10_VVRR0PPPP(V) BHO_VERSION_NUMBER(((V)/10000000)%100,((V)/100000)%100,(V)%10000)
  129. /* tag::reference[]
  130. * `BHO_PREDEF_MAKE_10_VVRR00PP00(V)`
  131. */ // end::reference[]
  132. #define BHO_PREDEF_MAKE_10_VVRR00PP00(V) BHO_VERSION_NUMBER(((V)/100000000)%100,((V)/1000000)%100,((V)/100)%100)
  133. /* tag::reference[]
  134. = `BHO_PREDEF_MAKE_*..` date macros
  135. Date decomposition macros return a date in the relative to the 1970
  136. Epoch date. If the month is not available, January 1st is used as the month and day.
  137. If the day is not available, but the month is, the 1st of the month is used as the day.
  138. */ // end::reference[]
  139. /* tag::reference[]
  140. * `BHO_PREDEF_MAKE_DATE(Y,M,D)`
  141. */ // end::reference[]
  142. #define BHO_PREDEF_MAKE_DATE(Y,M,D) BHO_VERSION_NUMBER((Y)%10000-1970,(M)%100,(D)%100)
  143. /* tag::reference[]
  144. * `BHO_PREDEF_MAKE_YYYYMMDD(V)`
  145. */ // end::reference[]
  146. #define BHO_PREDEF_MAKE_YYYYMMDD(V) BHO_PREDEF_MAKE_DATE(((V)/10000)%10000,((V)/100)%100,(V)%100)
  147. /* tag::reference[]
  148. * `BHO_PREDEF_MAKE_YYYY(V)`
  149. */ // end::reference[]
  150. #define BHO_PREDEF_MAKE_YYYY(V) BHO_PREDEF_MAKE_DATE(V,1,1)
  151. /* tag::reference[]
  152. * `BHO_PREDEF_MAKE_YYYYMM(V)`
  153. */ // end::reference[]
  154. #define BHO_PREDEF_MAKE_YYYYMM(V) BHO_PREDEF_MAKE_DATE((V)/100,(V)%100,1)
  155. #endif