numeric_cast_traits_long_long.hpp 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. //
  2. //! Copyright (c) 2011-2012
  3. //! Brandon Kohn
  4. //
  5. // Distributed under the Boost Software License, Version 1.0. (See
  6. // accompanying file LICENSE_1_0.txt or copy at
  7. // http://www.boost.org/LICENSE_1_0.txt)
  8. //
  9. namespace boost { namespace numeric {
  10. template <>
  11. struct numeric_cast_traits
  12. <
  13. char
  14. , boost::long_long_type
  15. >
  16. {
  17. typedef def_overflow_handler overflow_policy;
  18. typedef UseInternalRangeChecker range_checking_policy;
  19. typedef Trunc<boost::long_long_type> rounding_policy;
  20. };
  21. template <>
  22. struct numeric_cast_traits
  23. <
  24. char
  25. , boost::ulong_long_type
  26. >
  27. {
  28. typedef def_overflow_handler overflow_policy;
  29. typedef UseInternalRangeChecker range_checking_policy;
  30. typedef Trunc<boost::ulong_long_type> rounding_policy;
  31. };
  32. template <>
  33. struct numeric_cast_traits
  34. <
  35. signed char
  36. , boost::long_long_type
  37. >
  38. {
  39. typedef def_overflow_handler overflow_policy;
  40. typedef UseInternalRangeChecker range_checking_policy;
  41. typedef Trunc<boost::long_long_type> rounding_policy;
  42. };
  43. template <>
  44. struct numeric_cast_traits
  45. <
  46. signed char
  47. , boost::ulong_long_type
  48. >
  49. {
  50. typedef def_overflow_handler overflow_policy;
  51. typedef UseInternalRangeChecker range_checking_policy;
  52. typedef Trunc<boost::ulong_long_type> rounding_policy;
  53. };
  54. template <>
  55. struct numeric_cast_traits
  56. <
  57. unsigned char
  58. , boost::long_long_type
  59. >
  60. {
  61. typedef def_overflow_handler overflow_policy;
  62. typedef UseInternalRangeChecker range_checking_policy;
  63. typedef Trunc<boost::long_long_type> rounding_policy;
  64. };
  65. template <>
  66. struct numeric_cast_traits
  67. <
  68. unsigned char
  69. , boost::ulong_long_type
  70. >
  71. {
  72. typedef def_overflow_handler overflow_policy;
  73. typedef UseInternalRangeChecker range_checking_policy;
  74. typedef Trunc<boost::ulong_long_type> rounding_policy;
  75. };
  76. template <>
  77. struct numeric_cast_traits
  78. <
  79. short
  80. , boost::long_long_type
  81. >
  82. {
  83. typedef def_overflow_handler overflow_policy;
  84. typedef UseInternalRangeChecker range_checking_policy;
  85. typedef Trunc<boost::long_long_type> rounding_policy;
  86. };
  87. template <>
  88. struct numeric_cast_traits
  89. <
  90. short
  91. , boost::ulong_long_type
  92. >
  93. {
  94. typedef def_overflow_handler overflow_policy;
  95. typedef UseInternalRangeChecker range_checking_policy;
  96. typedef Trunc<boost::ulong_long_type> rounding_policy;
  97. };
  98. template <>
  99. struct numeric_cast_traits
  100. <
  101. unsigned short
  102. , boost::long_long_type
  103. >
  104. {
  105. typedef def_overflow_handler overflow_policy;
  106. typedef UseInternalRangeChecker range_checking_policy;
  107. typedef Trunc<boost::long_long_type> rounding_policy;
  108. };
  109. template <>
  110. struct numeric_cast_traits
  111. <
  112. unsigned short
  113. , boost::ulong_long_type
  114. >
  115. {
  116. typedef def_overflow_handler overflow_policy;
  117. typedef UseInternalRangeChecker range_checking_policy;
  118. typedef Trunc<boost::ulong_long_type> rounding_policy;
  119. };
  120. template <>
  121. struct numeric_cast_traits
  122. <
  123. int
  124. , boost::long_long_type
  125. >
  126. {
  127. typedef def_overflow_handler overflow_policy;
  128. typedef UseInternalRangeChecker range_checking_policy;
  129. typedef Trunc<boost::long_long_type> rounding_policy;
  130. };
  131. template <>
  132. struct numeric_cast_traits
  133. <
  134. int
  135. , boost::ulong_long_type
  136. >
  137. {
  138. typedef def_overflow_handler overflow_policy;
  139. typedef UseInternalRangeChecker range_checking_policy;
  140. typedef Trunc<boost::ulong_long_type> rounding_policy;
  141. };
  142. template <>
  143. struct numeric_cast_traits
  144. <
  145. unsigned int
  146. , boost::long_long_type
  147. >
  148. {
  149. typedef def_overflow_handler overflow_policy;
  150. typedef UseInternalRangeChecker range_checking_policy;
  151. typedef Trunc<boost::long_long_type> rounding_policy;
  152. };
  153. template <>
  154. struct numeric_cast_traits
  155. <
  156. unsigned int
  157. , boost::ulong_long_type
  158. >
  159. {
  160. typedef def_overflow_handler overflow_policy;
  161. typedef UseInternalRangeChecker range_checking_policy;
  162. typedef Trunc<boost::ulong_long_type> rounding_policy;
  163. };
  164. template <>
  165. struct numeric_cast_traits
  166. <
  167. long
  168. , boost::long_long_type
  169. >
  170. {
  171. typedef def_overflow_handler overflow_policy;
  172. typedef UseInternalRangeChecker range_checking_policy;
  173. typedef Trunc<boost::long_long_type> rounding_policy;
  174. };
  175. template <>
  176. struct numeric_cast_traits
  177. <
  178. long
  179. , boost::ulong_long_type
  180. >
  181. {
  182. typedef def_overflow_handler overflow_policy;
  183. typedef UseInternalRangeChecker range_checking_policy;
  184. typedef Trunc<boost::ulong_long_type> rounding_policy;
  185. };
  186. template <>
  187. struct numeric_cast_traits
  188. <
  189. unsigned long
  190. , boost::long_long_type
  191. >
  192. {
  193. typedef def_overflow_handler overflow_policy;
  194. typedef UseInternalRangeChecker range_checking_policy;
  195. typedef Trunc<boost::long_long_type> rounding_policy;
  196. };
  197. template <>
  198. struct numeric_cast_traits
  199. <
  200. unsigned long
  201. , boost::ulong_long_type
  202. >
  203. {
  204. typedef def_overflow_handler overflow_policy;
  205. typedef UseInternalRangeChecker range_checking_policy;
  206. typedef Trunc<boost::ulong_long_type> rounding_policy;
  207. };
  208. template <>
  209. struct numeric_cast_traits
  210. <
  211. float
  212. , boost::long_long_type
  213. >
  214. {
  215. typedef def_overflow_handler overflow_policy;
  216. typedef UseInternalRangeChecker range_checking_policy;
  217. typedef Trunc<boost::long_long_type> rounding_policy;
  218. };
  219. template <>
  220. struct numeric_cast_traits
  221. <
  222. float
  223. , boost::ulong_long_type
  224. >
  225. {
  226. typedef def_overflow_handler overflow_policy;
  227. typedef UseInternalRangeChecker range_checking_policy;
  228. typedef Trunc<boost::ulong_long_type> rounding_policy;
  229. };
  230. template <>
  231. struct numeric_cast_traits
  232. <
  233. double
  234. , boost::long_long_type
  235. >
  236. {
  237. typedef def_overflow_handler overflow_policy;
  238. typedef UseInternalRangeChecker range_checking_policy;
  239. typedef Trunc<boost::long_long_type> rounding_policy;
  240. };
  241. template <>
  242. struct numeric_cast_traits
  243. <
  244. double
  245. , boost::ulong_long_type
  246. >
  247. {
  248. typedef def_overflow_handler overflow_policy;
  249. typedef UseInternalRangeChecker range_checking_policy;
  250. typedef Trunc<boost::ulong_long_type> rounding_policy;
  251. };
  252. template <>
  253. struct numeric_cast_traits
  254. <
  255. long double
  256. , boost::long_long_type
  257. >
  258. {
  259. typedef def_overflow_handler overflow_policy;
  260. typedef UseInternalRangeChecker range_checking_policy;
  261. typedef Trunc<boost::long_long_type> rounding_policy;
  262. };
  263. template <>
  264. struct numeric_cast_traits
  265. <
  266. long double
  267. , boost::ulong_long_type
  268. >
  269. {
  270. typedef def_overflow_handler overflow_policy;
  271. typedef UseInternalRangeChecker range_checking_policy;
  272. typedef Trunc<boost::ulong_long_type> rounding_policy;
  273. };
  274. template <>
  275. struct numeric_cast_traits
  276. <
  277. boost::long_long_type
  278. , boost::long_long_type
  279. >
  280. {
  281. typedef def_overflow_handler overflow_policy;
  282. typedef UseInternalRangeChecker range_checking_policy;
  283. typedef Trunc<boost::long_long_type> rounding_policy;
  284. };
  285. template <>
  286. struct numeric_cast_traits
  287. <
  288. boost::long_long_type
  289. , boost::ulong_long_type
  290. >
  291. {
  292. typedef def_overflow_handler overflow_policy;
  293. typedef UseInternalRangeChecker range_checking_policy;
  294. typedef Trunc<boost::ulong_long_type> rounding_policy;
  295. };
  296. template <>
  297. struct numeric_cast_traits
  298. <
  299. boost::ulong_long_type
  300. , boost::long_long_type
  301. >
  302. {
  303. typedef def_overflow_handler overflow_policy;
  304. typedef UseInternalRangeChecker range_checking_policy;
  305. typedef Trunc<boost::long_long_type> rounding_policy;
  306. };
  307. template <>
  308. struct numeric_cast_traits
  309. <
  310. boost::ulong_long_type
  311. , boost::ulong_long_type
  312. >
  313. {
  314. typedef def_overflow_handler overflow_policy;
  315. typedef UseInternalRangeChecker range_checking_policy;
  316. typedef Trunc<boost::ulong_long_type> rounding_policy;
  317. };
  318. }}