You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

678 lines
17 KiB

  1. /* /////////////////////////////////////////////////////////////////////////
  2. * File: stlsoft/util/64bit_integers.hpp
  3. *
  4. * Purpose: Byte-order independent large integer (aggregate) classes.
  5. *
  6. * Created: 15th October 2000
  7. * Updated: 10th August 2009
  8. *
  9. * Home: http://stlsoft.org/
  10. *
  11. * Copyright (c) 2000-2009, Matthew Wilson and Synesis Software
  12. * All rights reserved.
  13. *
  14. * Redistribution and use in source and binary forms, with or without
  15. * modification, are permitted provided that the following conditions are met:
  16. *
  17. * - Redistributions of source code must retain the above copyright notice, this
  18. * list of conditions and the following disclaimer.
  19. * - Redistributions in binary form must reproduce the above copyright notice,
  20. * this list of conditions and the following disclaimer in the documentation
  21. * and/or other materials provided with the distribution.
  22. * - Neither the name(s) of Matthew Wilson and Synesis Software nor the names of
  23. * any contributors may be used to endorse or promote products derived from
  24. * this software without specific prior written permission.
  25. *
  26. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  27. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  29. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  30. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  31. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  32. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  33. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  34. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  35. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  36. * POSSIBILITY OF SUCH DAMAGE.
  37. *
  38. * ////////////////////////////////////////////////////////////////////// */
  39. /** \file stlsoft/util/64bit_integers.hpp
  40. *
  41. * \brief [C++ only] Definition of the stlsoft::sinteger64 class
  42. * (\ref group__library__utility "Utility" Library).
  43. */
  44. #ifndef STLSOFT_INCL_STLSOFT_UTIL_HPP_64BIT_INTEGERS
  45. #define STLSOFT_INCL_STLSOFT_UTIL_HPP_64BIT_INTEGERS
  46. #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
  47. # define STLSOFT_VER_STLSOFT_UTIL_HPP_64BIT_INTEGERS_MAJOR 5
  48. # define STLSOFT_VER_STLSOFT_UTIL_HPP_64BIT_INTEGERS_MINOR 1
  49. # define STLSOFT_VER_STLSOFT_UTIL_HPP_64BIT_INTEGERS_REVISION 1
  50. # define STLSOFT_VER_STLSOFT_UTIL_HPP_64BIT_INTEGERS_EDIT 130
  51. #endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */
  52. /* /////////////////////////////////////////////////////////////////////////
  53. * Includes
  54. */
  55. #ifndef STLSOFT_INCL_STLSOFT_H_STLSOFT
  56. # include <stlsoft/stlsoft.h>
  57. #endif /* !STLSOFT_INCL_STLSOFT_H_STLSOFT */
  58. /* /////////////////////////////////////////////////////////////////////////
  59. * Namespace
  60. */
  61. #ifndef _STLSOFT_NO_NAMESPACE
  62. namespace stlsoft
  63. {
  64. #endif /* _STLSOFT_NO_NAMESPACE */
  65. /* /////////////////////////////////////////////////////////////////////////
  66. * Classes
  67. */
  68. #ifndef _STLSOFT_NO_NAMESPACE
  69. namespace sinteger64_util
  70. {
  71. #endif /* _STLSOFT_NO_NAMESPACE */
  72. /** \brief Signed 64-bit integer class
  73. *
  74. * \ingroup group__library__utility
  75. */
  76. class sinteger64
  77. {
  78. public:
  79. typedef sinteger64 class_type;
  80. public:
  81. sinteger64();
  82. sinteger64(ss_sint8_t i);
  83. sinteger64(ss_sint16_t i);
  84. sinteger64(ss_sint32_t i);
  85. sinteger64(ss_sint32_t high, ss_sint32_t low);
  86. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  87. sinteger64(int i);
  88. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  89. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  90. sinteger64(long i);
  91. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  92. class_type& operator =(class_type const& rhs);
  93. class_type& operator =(ss_sint8_t i);
  94. class_type& operator =(ss_sint16_t i);
  95. class_type& operator =(ss_sint32_t i);
  96. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  97. class_type& operator =(int i);
  98. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  99. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  100. class_type& operator =(long i);
  101. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  102. class_type& operator +=(class_type const& rhs);
  103. class_type& operator +=(ss_sint8_t i);
  104. class_type& operator +=(ss_sint16_t i);
  105. class_type& operator +=(ss_sint32_t i);
  106. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  107. class_type& operator +=(int i);
  108. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  109. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  110. class_type& operator +=(long i);
  111. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  112. class_type& operator -=(class_type const& rhs);
  113. class_type& operator -=(ss_sint8_t i);
  114. class_type& operator -=(ss_sint16_t i);
  115. class_type& operator -=(ss_sint32_t i);
  116. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  117. class_type& operator -=(int i);
  118. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  119. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  120. class_type& operator -=(long i);
  121. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  122. class_type& operator *=(class_type const& rhs);
  123. class_type& operator *=(ss_sint8_t i);
  124. class_type& operator *=(ss_sint16_t i);
  125. class_type& operator *=(ss_sint32_t i);
  126. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  127. class_type& operator *=(int i);
  128. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  129. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  130. class_type& operator *=(long i);
  131. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  132. class_type& operator /=(class_type const& rhs);
  133. class_type& operator /=(ss_sint8_t i);
  134. class_type& operator /=(ss_sint16_t i);
  135. class_type& operator /=(ss_sint32_t i);
  136. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  137. class_type& operator /=(int i);
  138. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  139. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  140. class_type& operator /=(long i);
  141. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  142. class_type& operator %=(class_type const& rhs);
  143. class_type& operator %=(ss_sint8_t i);
  144. class_type& operator %=(ss_sint16_t i);
  145. class_type& operator %=(ss_sint32_t i);
  146. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  147. class_type& operator %=(int i);
  148. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  149. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  150. class_type& operator %=(long i);
  151. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  152. public:
  153. ss_sint_t compare(class_type const& rhs) const;
  154. ss_sint_t compare(ss_sint8_t i) const;
  155. ss_sint_t compare(ss_sint16_t i) const;
  156. ss_sint_t compare(ss_sint32_t i) const;
  157. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  158. ss_sint_t compare(int i) const;
  159. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  160. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  161. ss_sint_t compare(long i) const;
  162. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  163. // Members
  164. private:
  165. ss_sint32_t m_low;
  166. ss_sint32_t m_high;
  167. };
  168. #ifndef _STLSOFT_NO_NAMESPACE
  169. } // namespace sinteger64_util
  170. using ::stlsoft::sinteger64_util::sinteger64;
  171. #endif /* _STLSOFT_NO_NAMESPACE */
  172. /* /////////////////////////////////////////////////////////////////////////
  173. * Operators
  174. */
  175. #ifndef _STLSOFT_NO_NAMESPACE
  176. namespace sinteger64_util
  177. {
  178. #endif /* _STLSOFT_NO_NAMESPACE */
  179. // operator ==
  180. inline ss_bool_t operator ==(sinteger64 const& lhs, sinteger64 const& rhs)
  181. {
  182. return 0 == lhs.compare(rhs);
  183. }
  184. // operator !=
  185. inline ss_bool_t operator !=(sinteger64 const& lhs, sinteger64 const& rhs)
  186. {
  187. return 0 != lhs.compare(rhs);
  188. }
  189. // operator <
  190. inline ss_bool_t operator <(sinteger64 const& lhs, sinteger64 const& rhs)
  191. {
  192. return lhs.compare(rhs) < 0;
  193. }
  194. // operator >
  195. inline ss_bool_t operator >(sinteger64 const& lhs, sinteger64 const& rhs)
  196. {
  197. return lhs.compare(rhs) > 0;
  198. }
  199. // operator <=
  200. inline ss_bool_t operator <=(sinteger64 const& lhs, sinteger64 const& rhs)
  201. {
  202. return lhs.compare(rhs) <= 0;
  203. }
  204. // operator >=
  205. inline ss_bool_t operator >=(sinteger64 const& lhs, sinteger64 const& rhs)
  206. {
  207. return lhs.compare(rhs) >= 0;
  208. }
  209. // operator +
  210. inline sinteger64 operator +(sinteger64 const& lhs, sinteger64 const& rhs)
  211. {
  212. sinteger64 result(lhs);
  213. result += rhs;
  214. return result;
  215. }
  216. // operator -
  217. inline sinteger64 operator -(sinteger64 const& lhs, sinteger64 const& rhs)
  218. {
  219. sinteger64 result(lhs);
  220. result -= rhs;
  221. return result;
  222. }
  223. // operator *
  224. inline sinteger64 operator *(sinteger64 const& lhs, sinteger64 const& rhs)
  225. {
  226. sinteger64 result(lhs);
  227. result *= rhs;
  228. return result;
  229. }
  230. // operator /
  231. inline sinteger64 operator /(sinteger64 const& lhs, sinteger64 const& rhs)
  232. {
  233. sinteger64 result(lhs);
  234. result /= rhs;
  235. return result;
  236. }
  237. // operator %
  238. inline sinteger64 operator %(sinteger64 const& lhs, sinteger64 const& rhs)
  239. {
  240. sinteger64 result(lhs);
  241. result %= rhs;
  242. return result;
  243. }
  244. #ifndef _STLSOFT_NO_NAMESPACE
  245. } // namespace sinteger64_util
  246. #endif /* _STLSOFT_NO_NAMESPACE */
  247. /* /////////////////////////////////////////////////////////////////////////
  248. * Unit-testing
  249. */
  250. #ifdef STLSOFT_UNITTEST
  251. # include "./unittest/64bit_integers_unittest_.h"
  252. #endif /* STLSOFT_UNITTEST */
  253. /* /////////////////////////////////////////////////////////////////////////
  254. * Implementation
  255. */
  256. #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
  257. #ifndef _STLSOFT_NO_NAMESPACE
  258. namespace sinteger64_util
  259. {
  260. #endif /* _STLSOFT_NO_NAMESPACE */
  261. inline sinteger64::sinteger64()
  262. {}
  263. inline sinteger64::sinteger64(ss_sint8_t i)
  264. : m_low(i)
  265. , m_high(0)
  266. {}
  267. inline sinteger64::sinteger64(ss_sint16_t i)
  268. : m_low(i)
  269. , m_high(0)
  270. {}
  271. inline sinteger64::sinteger64(ss_sint32_t i)
  272. : m_low(i)
  273. , m_high(0)
  274. {}
  275. inline sinteger64::sinteger64(ss_sint32_t high, ss_sint32_t low)
  276. : m_low(low)
  277. , m_high(high)
  278. {}
  279. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  280. inline sinteger64::sinteger64(int i)
  281. : m_low(i)
  282. , m_high(0)
  283. {}
  284. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  285. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  286. inline sinteger64::sinteger64(long i)
  287. : m_low(i)
  288. , m_high(0)
  289. {}
  290. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  291. inline sinteger64::class_type& sinteger64::operator =(class_type const& rhs)
  292. {
  293. m_high = rhs.m_high;
  294. m_low = rhs.m_low;
  295. return *this;
  296. }
  297. inline sinteger64::class_type& sinteger64::operator =(ss_sint8_t i)
  298. {
  299. m_high = 0;
  300. m_low = i;
  301. return *this;
  302. }
  303. inline sinteger64::class_type& sinteger64::operator =(ss_sint16_t i)
  304. {
  305. m_high = 0;
  306. m_low = i;
  307. return *this;
  308. }
  309. inline sinteger64::class_type& sinteger64::operator =(ss_sint32_t i)
  310. {
  311. m_high = 0;
  312. m_low = i;
  313. return *this;
  314. }
  315. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  316. inline sinteger64::class_type& sinteger64::operator =(int i)
  317. {
  318. m_high = 0;
  319. m_low = i;
  320. return *this;
  321. }
  322. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  323. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  324. inline sinteger64::class_type& sinteger64::operator =(long i)
  325. {
  326. m_high = 0;
  327. m_low = i;
  328. return *this;
  329. }
  330. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  331. inline sinteger64::class_type& sinteger64::operator +=(class_type const& rhs)
  332. {
  333. m_low += rhs.m_low;
  334. m_high += rhs.m_high;
  335. if( rhs.m_low > 0 &&
  336. m_low < rhs.m_low)
  337. {
  338. ++m_high;
  339. }
  340. else if(rhs.m_low < 0 &&
  341. m_low > rhs.m_low)
  342. {
  343. --m_high;
  344. }
  345. return *this;
  346. }
  347. inline sinteger64::class_type& sinteger64::operator +=(ss_sint8_t i)
  348. {
  349. return operator +=(class_type(i));
  350. }
  351. inline sinteger64::class_type& sinteger64::operator +=(ss_sint16_t i)
  352. {
  353. return operator +=(class_type(i));
  354. }
  355. inline sinteger64::class_type& sinteger64::operator +=(ss_sint32_t i)
  356. {
  357. return operator +=(class_type(i));
  358. }
  359. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  360. inline sinteger64::class_type& sinteger64::operator +=(int i)
  361. {
  362. return operator +=(class_type(i));
  363. }
  364. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  365. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  366. inline sinteger64::class_type& sinteger64::operator +=(long i)
  367. {
  368. return operator +=(class_type(i));
  369. }
  370. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  371. inline sinteger64::class_type& sinteger64::operator -=(class_type const& rhs)
  372. {
  373. m_low -= rhs.m_low;
  374. m_high -= rhs.m_high;
  375. if( rhs.m_low > 0 &&
  376. m_low < rhs.m_low)
  377. {
  378. ++m_high;
  379. }
  380. else if(rhs.m_low < 0 &&
  381. m_low > rhs.m_low)
  382. {
  383. --m_high;
  384. }
  385. return *this;
  386. }
  387. inline sinteger64::class_type& sinteger64::operator -=(ss_sint8_t i)
  388. {
  389. return operator -=(class_type(i));
  390. }
  391. inline sinteger64::class_type& sinteger64::operator -=(ss_sint16_t i)
  392. {
  393. return operator -=(class_type(i));
  394. }
  395. inline sinteger64::class_type& sinteger64::operator -=(ss_sint32_t i)
  396. {
  397. return operator -=(class_type(i));
  398. }
  399. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  400. inline sinteger64::class_type& sinteger64::operator -=(int i)
  401. {
  402. return operator -=(class_type(i));
  403. }
  404. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  405. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  406. inline sinteger64::class_type& sinteger64::operator -=(long i)
  407. {
  408. return operator -=(class_type(i));
  409. }
  410. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  411. inline sinteger64::class_type& sinteger64::operator *=(class_type const& rhs)
  412. {
  413. m_low *= rhs.m_low;
  414. m_high *= rhs.m_high;
  415. if( rhs.m_low > 0 &&
  416. m_low < rhs.m_low)
  417. {
  418. ++m_high;
  419. }
  420. else if(rhs.m_low < 0 &&
  421. m_low > rhs.m_low)
  422. {
  423. --m_high;
  424. }
  425. return *this;
  426. }
  427. inline sinteger64::class_type& sinteger64::operator *=(ss_sint8_t i)
  428. {
  429. return operator *=(class_type(i));
  430. }
  431. inline sinteger64::class_type& sinteger64::operator *=(ss_sint16_t i)
  432. {
  433. return operator *=(class_type(i));
  434. }
  435. inline sinteger64::class_type& sinteger64::operator *=(ss_sint32_t i)
  436. {
  437. return operator *=(class_type(i));
  438. }
  439. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  440. inline sinteger64::class_type& sinteger64::operator *=(int i)
  441. {
  442. return operator *=(class_type(i));
  443. }
  444. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  445. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  446. inline sinteger64::class_type& sinteger64::operator *=(long i)
  447. {
  448. return operator *=(class_type(i));
  449. }
  450. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  451. //inline sinteger64::class_type& sinteger64::operator /=(class_type const& rhs);
  452. inline sinteger64::class_type& sinteger64::operator /=(ss_sint8_t i)
  453. {
  454. return operator /=(class_type(i));
  455. }
  456. inline sinteger64::class_type& sinteger64::operator /=(ss_sint16_t i)
  457. {
  458. return operator /=(class_type(i));
  459. }
  460. inline sinteger64::class_type& sinteger64::operator /=(ss_sint32_t i)
  461. {
  462. return operator /=(class_type(i));
  463. }
  464. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  465. inline sinteger64::class_type& sinteger64::operator /=(int i)
  466. {
  467. return operator /=(class_type(i));
  468. }
  469. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  470. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  471. inline sinteger64::class_type& sinteger64::operator /=(long i)
  472. {
  473. return operator /=(class_type(i));
  474. }
  475. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  476. //inline sinteger64::class_type& sinteger64::operator %=(class_type const& rhs);
  477. inline sinteger64::class_type& sinteger64::operator %=(ss_sint8_t i)
  478. {
  479. return operator %=(class_type(i));
  480. }
  481. inline sinteger64::class_type& sinteger64::operator %=(ss_sint16_t i)
  482. {
  483. return operator %=(class_type(i));
  484. }
  485. inline sinteger64::class_type& sinteger64::operator %=(ss_sint32_t i)
  486. {
  487. return operator %=(class_type(i));
  488. }
  489. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  490. inline sinteger64::class_type& sinteger64::operator %=(int i)
  491. {
  492. return operator %=(class_type(i));
  493. }
  494. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  495. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  496. inline sinteger64::class_type& sinteger64::operator %=(long i)
  497. {
  498. return operator %=(class_type(i));
  499. }
  500. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  501. inline ss_sint_t sinteger64::compare(class_type const& rhs) const
  502. {
  503. ss_sint_t res = m_high - rhs.m_high;
  504. if(0 == res)
  505. {
  506. res = m_low - rhs.m_low;
  507. }
  508. return res;
  509. }
  510. inline ss_sint_t sinteger64::compare(ss_sint8_t i) const
  511. {
  512. return compare(class_type(0, i));
  513. }
  514. inline ss_sint_t sinteger64::compare(ss_sint16_t i) const
  515. {
  516. return compare(class_type(0, i));
  517. }
  518. inline ss_sint_t sinteger64::compare(ss_sint32_t i) const
  519. {
  520. return compare(class_type(0, i));
  521. }
  522. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  523. inline ss_sint_t sinteger64::compare(int i) const
  524. {
  525. return compare(class_type(0, i));
  526. }
  527. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  528. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  529. inline ss_sint_t sinteger64::compare(long i) const
  530. {
  531. return compare(class_type(0, i));
  532. }
  533. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  534. #ifndef _STLSOFT_NO_NAMESPACE
  535. } // namespace sinteger64_util
  536. #endif /* _STLSOFT_NO_NAMESPACE */
  537. #endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */
  538. /* ////////////////////////////////////////////////////////////////////// */
  539. #ifndef _STLSOFT_NO_NAMESPACE
  540. } // namespace stlsoft
  541. #endif /* _STLSOFT_NO_NAMESPACE */
  542. /* ////////////////////////////////////////////////////////////////////// */
  543. #endif /* !STLSOFT_INCL_STLSOFT_UTIL_HPP_64BIT_INTEGERS */
  544. /* ///////////////////////////// end of file //////////////////////////// */