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.

526 lines
20 KiB

  1. /* /////////////////////////////////////////////////////////////////////////
  2. * File: pantheios/inserters/integer.hpp
  3. *
  4. * Purpose: String inserters for fundamental types
  5. *
  6. * Created: 21st June 2005
  7. * Updated: 18th October 2012
  8. *
  9. * Home: http://www.pantheios.org/
  10. *
  11. * Copyright (c) 2005-2012, Matthew Wilson and Synesis Software
  12. * Copyright (c) 1999-2005, Synesis Software and Matthew Wilson
  13. * All rights reserved.
  14. *
  15. * Redistribution and use in source and binary forms, with or without
  16. * modification, are permitted provided that the following conditions are
  17. * met:
  18. *
  19. * - Redistributions of source code must retain the above copyright notice,
  20. * this list of conditions and the following disclaimer.
  21. * - Redistributions in binary form must reproduce the above copyright
  22. * notice, this list of conditions and the following disclaimer in the
  23. * documentation and/or other materials provided with the distribution.
  24. * - Neither the name(s) of Matthew Wilson and Synesis Software nor the
  25. * names of any contributors may be used to endorse or promote products
  26. * derived from this software without specific prior written permission.
  27. *
  28. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  29. * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  30. * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  31. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  32. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  33. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  34. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  35. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  36. * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  37. * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  38. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  39. *
  40. * ////////////////////////////////////////////////////////////////////// */
  41. /** \file pantheios/inserters/integer.hpp
  42. *
  43. * [C++ only] Definition of the pantheios::integer string inserter for
  44. * for integral built-in types.
  45. */
  46. #ifndef PANTHEIOS_INCL_PANTHEIOS_INSERTERS_HPP_INTEGER
  47. #define PANTHEIOS_INCL_PANTHEIOS_INSERTERS_HPP_INTEGER
  48. /* /////////////////////////////////////////////////////////////////////////
  49. * Version information
  50. */
  51. #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
  52. # define PANTHEIOS_VER_PANTHEIOS_INSERTERS_HPP_INTEGER_MAJOR 2
  53. # define PANTHEIOS_VER_PANTHEIOS_INSERTERS_HPP_INTEGER_MINOR 5
  54. # define PANTHEIOS_VER_PANTHEIOS_INSERTERS_HPP_INTEGER_REVISION 5
  55. # define PANTHEIOS_VER_PANTHEIOS_INSERTERS_HPP_INTEGER_EDIT 37
  56. #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
  57. /* /////////////////////////////////////////////////////////////////////////
  58. * Includes
  59. */
  60. #ifndef PANTHEIOS_INCL_PANTHEIOS_H_PANTHEIOS
  61. # include <pantheios/pantheios.h>
  62. #endif /* !PANTHEIOS_INCL_PANTHEIOS_H_PANTHEIOS */
  63. #ifndef PANTHEIOS_INCL_PANTHEIOS_INSERTERS_HPP_FMT
  64. # include <pantheios/inserters/fmt.hpp>
  65. #endif /* !PANTHEIOS_INCL_PANTHEIOS_INSERTERS_HPP_FMT */
  66. #ifndef STLSOFT_INCL_STLSOFT_SHIMS_ACCESS_STRING_H_FWD
  67. # include <stlsoft/shims/access/string/fwd.h>
  68. #endif /* !STLSOFT_INCL_STLSOFT_SHIMS_ACCESS_STRING_H_FWD */
  69. /* /////////////////////////////////////////////////////////////////////////
  70. * Namespace
  71. */
  72. #if !defined(PANTHEIOS_NO_NAMESPACE)
  73. namespace pantheios
  74. {
  75. #endif /* !PANTHEIOS_NO_NAMESPACE */
  76. /* /////////////////////////////////////////////////////////////////////////
  77. * Inserter classes
  78. */
  79. /** Class for inserting integral types into Pantheios diagnostic logging
  80. * statements.
  81. *
  82. * \ingroup group__application_layer_interface__inserters
  83. *
  84. * This class converts an integer into a string, thereby enabling it to be
  85. * inserted into a logging statement. Consider the following statement
  86. *
  87. * \code
  88. int i = 123;
  89. char s[] = "abc";
  90. std::string str("def");
  91. pantheios::log(pantheios::notice, "s=", s, ", i=", pantheios::integer(i), ", str=", str);
  92. * \endcode
  93. *
  94. * This will produce the output:
  95. *
  96. * &nbsp;&nbsp;&nbsp;&nbsp;<b>s=abc, i=123, str=def</b>
  97. *
  98. * The constructor takes a second, defaulted (to 0), parameter, which allows
  99. * a width (up to a maximum of 255) and a format to be specified. The low
  100. * 8 bits of this parameter are interpreted as an unsigned integer specifying
  101. * the width. The remaining bits are treated as bit flags that control the
  102. *
  103. * \note Currently, Pantheios does not support the insertion of integral types
  104. * in diagnostic logging statements, due to the various ambiguities inherent
  105. * in the C++ language. (See chapters 14, 15, 19, 24 of
  106. * <a href = "http://imperfectcplusplus.com" target="_blank">Imperfect C++</a>
  107. * for discussions of these issues.) It is possible that a future version of
  108. * the library will be able to incorporate them directly, so long as that does
  109. * not sacrifice Pantheios's central claim of not paying for what you don't use.
  110. */
  111. class integer
  112. {
  113. /// \name Member Types
  114. /// @{
  115. public:
  116. typedef integer class_type;
  117. /// @}
  118. /// \name Implementation
  119. /// @{
  120. private:
  121. size_t init_(::stlsoft::sint8_t i);
  122. size_t init_(::stlsoft::uint8_t i);
  123. size_t init_(::stlsoft::sint16_t i);
  124. size_t init_(::stlsoft::uint16_t i);
  125. size_t init_(::stlsoft::sint32_t i);
  126. size_t init_(::stlsoft::uint32_t i);
  127. #ifdef STLSOFT_CF_64BIT_INT_SUPPORT
  128. size_t init_(::stlsoft::sint64_t i);
  129. size_t init_(::stlsoft::uint64_t i);
  130. #endif /* STLSOFT_CF_64BIT_INT_SUPPORT */
  131. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  132. size_t init_(int i);
  133. size_t init_(unsigned int i);
  134. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  135. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  136. size_t init_(long i);
  137. size_t init_(unsigned long i);
  138. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  139. /// @}
  140. /// \name Construction
  141. /// @{
  142. public:
  143. /// [DEPRECATED] Construct from an 8-bit signed integer
  144. ///
  145. /// \deprecated This function is now deprecated, and will be removed from a future
  146. /// version of Pantheios; instead use either the 1-parameter or 3-parameter overload.
  147. explicit integer(::stlsoft::sint8_t i, int widthAndFormat);
  148. /// [DEPRECATED] Construct from an 8-bit unsigned integer
  149. ///
  150. /// \deprecated This function is now deprecated, and will be removed from a future
  151. /// version of Pantheios; instead use either the 1-parameter or 3-parameter overload.
  152. explicit integer(::stlsoft::uint8_t i, int widthAndFormat);
  153. /// [DEPRECATED] Construct from a 16-bit signed integer
  154. ///
  155. /// \deprecated This function is now deprecated, and will be removed from a future
  156. /// version of Pantheios; instead use either the 1-parameter or 3-parameter overload.
  157. explicit integer(::stlsoft::sint16_t i, int widthAndFormat);
  158. /// [DEPRECATED] Construct from a 16-bit unsigned integer
  159. ///
  160. /// \deprecated This function is now deprecated, and will be removed from a future
  161. /// version of Pantheios; instead use either the 1-parameter or 3-parameter overload.
  162. explicit integer(::stlsoft::uint16_t i, int widthAndFormat);
  163. /// [DEPRECATED] Construct from a 32-bit signed integer
  164. ///
  165. /// \deprecated This function is now deprecated, and will be removed from a future
  166. /// version of Pantheios; instead use either the 1-parameter or 3-parameter overload.
  167. explicit integer(::stlsoft::sint32_t i, int widthAndFormat);
  168. /// [DEPRECATED] Construct from a 32-bit unsigned integer
  169. ///
  170. /// \deprecated This function is now deprecated, and will be removed from a future
  171. /// version of Pantheios; instead use either the 1-parameter or 3-parameter overload.
  172. explicit integer(::stlsoft::uint32_t i, int widthAndFormat);
  173. #ifdef STLSOFT_CF_64BIT_INT_SUPPORT
  174. /// [DEPRECATED] Construct from a 64-bit signed integer
  175. ///
  176. /// \deprecated This function is now deprecated, and will be removed from a future
  177. /// version of Pantheios; instead use either the 1-parameter or 3-parameter overload.
  178. explicit integer(::stlsoft::sint64_t i, int widthAndFormat);
  179. /// [DEPRECATED] Construct from a 64-bit unsigned integer
  180. ///
  181. /// \deprecated This function is now deprecated, and will be removed from a future
  182. /// version of Pantheios; instead use either the 1-parameter or 3-parameter overload.
  183. explicit integer(::stlsoft::uint64_t i, int widthAndFormat);
  184. #endif /* STLSOFT_CF_64BIT_INT_SUPPORT */
  185. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  186. /// [DEPRECATED] Construct from an int
  187. ///
  188. /// \deprecated This function is now deprecated, and will be removed from a future
  189. /// version of Pantheios; instead use either the 1-parameter or 3-parameter overload.
  190. explicit integer(int i, int widthAndFormat);
  191. /// [DEPRECATED] Construct from an unsigned int
  192. ///
  193. /// \deprecated This function is now deprecated, and will be removed from a future
  194. /// version of Pantheios; instead use either the 1-parameter or 3-parameter overload.
  195. explicit integer(unsigned int i, int widthAndFormat);
  196. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  197. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  198. /// [DEPRECATED] Construct from a long
  199. ///
  200. /// \deprecated This function is now deprecated, and will be removed from a future
  201. /// version of Pantheios; instead use either the 1-parameter or 3-parameter overload.
  202. explicit integer(long i, int widthAndFormat);
  203. /// [DEPRECATED] Construct from an unsigned long
  204. ///
  205. /// \deprecated This function is now deprecated, and will be removed from a future
  206. /// version of Pantheios; instead use either the 1-parameter or 3-parameter overload.
  207. explicit integer(unsigned long i, int widthAndFormat);
  208. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  209. /// Construct from an 8-bit signed integer
  210. explicit integer(::stlsoft::sint8_t i);
  211. /// Construct from an 8-bit unsigned integer
  212. explicit integer(::stlsoft::uint8_t i);
  213. /// Construct from a 16-bit signed integer
  214. explicit integer(::stlsoft::sint16_t i);
  215. /// Construct from a 16-bit unsigned integer
  216. explicit integer(::stlsoft::uint16_t i);
  217. /// Construct from a 32-bit signed integer
  218. explicit integer(::stlsoft::sint32_t i);
  219. /// Construct from a 32-bit unsigned integer
  220. explicit integer(::stlsoft::uint32_t i);
  221. #ifdef STLSOFT_CF_64BIT_INT_SUPPORT
  222. /// Construct from a 64-bit signed integer
  223. explicit integer(::stlsoft::sint64_t i);
  224. /// Construct from a 64-bit unsigned integer
  225. explicit integer(::stlsoft::uint64_t i);
  226. #endif /* STLSOFT_CF_64BIT_INT_SUPPORT */
  227. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  228. /// Construct from an int
  229. explicit integer(int i);
  230. /// Construct from an unsigned int
  231. explicit integer(unsigned int i);
  232. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  233. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  234. /// Construct from a long
  235. explicit integer(long i);
  236. /// Construct from an unsigned long
  237. explicit integer(unsigned long i);
  238. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  239. /// Construct from an 8-bit signed integer
  240. ///
  241. /// \param i The integer to convert to string form
  242. /// \param minWidth The minimum width of the converted form. Must be in
  243. /// the range [-128,127]
  244. /// \param format The format used in the conversion
  245. explicit integer(::stlsoft::sint8_t i, int minWidth, int format);
  246. /// Construct from an 8-bit unsigned integer
  247. ///
  248. /// \param i The integer to convert to string form
  249. /// \param minWidth The minimum width of the converted form. Must be in
  250. /// the range [-128,127]
  251. /// \param format The format used in the conversion
  252. explicit integer(::stlsoft::uint8_t i, int minWidth, int format);
  253. /// Construct from a 16-bit signed integer
  254. ///
  255. /// \param i The integer to convert to string form
  256. /// \param minWidth The minimum width of the converted form. Must be in
  257. /// the range [-128,127]
  258. /// \param format The format used in the conversion
  259. explicit integer(::stlsoft::sint16_t i, int minWidth, int format);
  260. /// Construct from a 16-bit unsigned integer
  261. ///
  262. /// \param i The integer to convert to string form
  263. /// \param minWidth The minimum width of the converted form. Must be in
  264. /// the range [-128,127]
  265. /// \param format The format used in the conversion
  266. explicit integer(::stlsoft::uint16_t i, int minWidth, int format);
  267. /// Construct from a 32-bit signed integer
  268. ///
  269. /// \param i The integer to convert to string form
  270. /// \param minWidth The minimum width of the converted form. Must be in
  271. /// the range [-128,127]
  272. /// \param format The format used in the conversion
  273. explicit integer(::stlsoft::sint32_t i, int minWidth, int format);
  274. /// Construct from a 32-bit unsigned integer
  275. ///
  276. /// \param i The integer to convert to string form
  277. /// \param minWidth The minimum width of the converted form. Must be in
  278. /// the range [-128,127]
  279. /// \param format The format used in the conversion
  280. explicit integer(::stlsoft::uint32_t i, int minWidth, int format);
  281. #ifdef STLSOFT_CF_64BIT_INT_SUPPORT
  282. /// Construct from a 64-bit signed integer
  283. ///
  284. /// \param i The integer to convert to string form
  285. /// \param minWidth The minimum width of the converted form. Must be in
  286. /// the range [-128,127]
  287. /// \param format The format used in the conversion
  288. explicit integer(::stlsoft::sint64_t i, int minWidth, int format);
  289. /// Construct from a 64-bit unsigned integer
  290. ///
  291. /// \param i The integer to convert to string form
  292. /// \param minWidth The minimum width of the converted form. Must be in
  293. /// the range [-128,127]
  294. /// \param format The format used in the conversion
  295. explicit integer(::stlsoft::uint64_t i, int minWidth, int format);
  296. #endif /* STLSOFT_CF_64BIT_INT_SUPPORT */
  297. #ifdef STLSOFT_CF_INT_DISTINCT_INT_TYPE
  298. /// Construct from an int
  299. ///
  300. /// \param i The integer to convert to string form
  301. /// \param minWidth The minimum width of the converted form. Must be in
  302. /// the range [-128,127]
  303. /// \param format The format used in the conversion
  304. explicit integer(int i, int minWidth, int format);
  305. /// Construct from an unsigned int
  306. ///
  307. /// \param i The integer to convert to string form
  308. /// \param minWidth The minimum width of the converted form. Must be in
  309. /// the range [-128,127]
  310. /// \param format The format used in the conversion
  311. explicit integer(unsigned int i, int minWidth, int format);
  312. #endif /* STLSOFT_CF_INT_DISTINCT_INT_TYPE */
  313. #ifdef STLSOFT_CF_LONG_DISTINCT_INT_TYPE
  314. /// Construct from a long
  315. ///
  316. /// \param i The integer to convert to string form
  317. /// \param minWidth The minimum width of the converted form. Must be in
  318. /// the range [-128,127]
  319. /// \param format The format used in the conversion
  320. explicit integer(long i, int minWidth, int format);
  321. /// Construct from an unsigned long
  322. ///
  323. /// \param i The integer to convert to string form
  324. /// \param minWidth The minimum width of the converted form. Must be in
  325. /// the range [-128,127]
  326. /// \param format The format used in the conversion
  327. explicit integer(unsigned long i, int minWidth, int format);
  328. #endif /* STLSOFT_CF_LONG_DISTINCT_INT_TYPE */
  329. /// @}
  330. /// \name Accessors
  331. /// @{
  332. public:
  333. /// A possibly non-nul-terminated non-null pointer to the c-style string representation of the integer
  334. pan_char_t const* data() const;
  335. /// A nul-terminated non-null pointer to the c-style string representation of the integer
  336. pan_char_t const* c_str() const;
  337. /// The length of the c-style string representation of the integer
  338. size_t length() const;
  339. /// @}
  340. /// \name Implementation
  341. /// @{
  342. private:
  343. void construct_() const;
  344. void construct_();
  345. static int validate_width_(int minWidth);
  346. /// @}
  347. /// \name Member Variables
  348. /// @{
  349. private:
  350. union u
  351. {
  352. ::stlsoft::sint32_t s32; // typeIsS32
  353. ::stlsoft::uint32_t u32; // typeIsU32
  354. #ifdef STLSOFT_CF_64BIT_INT_SUPPORT
  355. ::stlsoft::sint64_t s64; // typeIsS64
  356. ::stlsoft::uint64_t u64; // typeIsU64
  357. #endif /* STLSOFT_CF_64BIT_INT_SUPPORT */
  358. };
  359. u m_value; // The value, copied for lazy conversion
  360. size_t m_len; // Length, and marker for type: 1 == float; 2 == double; 3 == long double
  361. const int m_minWidth; // The minimum width
  362. const int m_format; // The format
  363. pan_char_t m_sz[129]; // Marker for converted, if m_sz[0] == '\0'
  364. /// @}
  365. /// \name Not to be implemented
  366. /// @{
  367. private:
  368. #if !defined(STLSOFT_COMPILER_IS_GCC)
  369. integer(class_type const&);
  370. #endif /* compiler */
  371. class_type& operator =(class_type const&);
  372. /// @}
  373. };
  374. /* /////////////////////////////////////////////////////////////////////////
  375. * String Access Shims
  376. */
  377. #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
  378. # if !defined(PANTHEIOS_NO_NAMESPACE)
  379. namespace shims
  380. {
  381. # endif /* !PANTHEIOS_NO_NAMESPACE */
  382. /** \overload c_str_data_a(integer const&) */
  383. # ifdef PANTHEIOS_USE_WIDE_STRINGS
  384. inline wchar_t const* c_str_data_w(integer const& i)
  385. # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
  386. inline char const* c_str_data_a(integer const& i)
  387. # endif /* PANTHEIOS_USE_WIDE_STRINGS */
  388. {
  389. return i.data();
  390. }
  391. /** \overload c_str_data(integer const&) */
  392. inline pan_char_t const* c_str_data(integer const& i)
  393. {
  394. return i.data();
  395. }
  396. /** \overload c_str_len_a(integer const&) */
  397. # ifdef PANTHEIOS_USE_WIDE_STRINGS
  398. inline size_t c_str_len_w(integer const& i)
  399. # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
  400. inline size_t c_str_len_a(integer const& i)
  401. # endif /* PANTHEIOS_USE_WIDE_STRINGS */
  402. {
  403. return i.length();
  404. }
  405. /** \overload c_str_len(integer const&) */
  406. inline size_t c_str_len(integer const& i)
  407. {
  408. return i.length();
  409. }
  410. /** \overload c_str_ptr_a(integer const&) */
  411. # ifdef PANTHEIOS_USE_WIDE_STRINGS
  412. inline wchar_t const* c_str_ptr_w(integer const& i)
  413. # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
  414. inline char const* c_str_ptr_a(integer const& i)
  415. # endif /* PANTHEIOS_USE_WIDE_STRINGS */
  416. {
  417. return i.c_str();
  418. }
  419. /** \overload c_str_ptr(integer const&) */
  420. inline pan_char_t const* c_str_ptr(integer const& i)
  421. {
  422. return i.c_str();
  423. }
  424. # if !defined(PANTHEIOS_NO_NAMESPACE)
  425. } /* namespace shims */
  426. # if defined(STLSOFT_COMPILER_IS_GCC)
  427. /* GCC does not seem to correctly handle the phases of
  428. * processing of C++ templates, so we need to 'use' the
  429. * shims into the same namespace as the inserter class
  430. * in order that ADL can suffice instead.
  431. */
  432. # ifdef PANTHEIOS_USE_WIDE_STRINGS
  433. using ::pantheios::shims::c_str_data_w;
  434. using ::pantheios::shims::c_str_len_w;
  435. using ::pantheios::shims::c_str_ptr_w;
  436. # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
  437. using ::pantheios::shims::c_str_data_a;
  438. using ::pantheios::shims::c_str_len_a;
  439. using ::pantheios::shims::c_str_ptr_a;
  440. # endif /* PANTHEIOS_USE_WIDE_STRINGS */
  441. using ::pantheios::shims::c_str_data;
  442. using ::pantheios::shims::c_str_len;
  443. using ::pantheios::shims::c_str_ptr;
  444. # endif /* compiler */
  445. # endif /* !PANTHEIOS_NO_NAMESPACE */
  446. #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
  447. /* /////////////////////////////////////////////////////////////////////////
  448. * Namespace
  449. */
  450. #if !defined(PANTHEIOS_NO_NAMESPACE)
  451. } /* namespace pantheios */
  452. namespace stlsoft
  453. {
  454. // 'Export' the string access shims into the STLSoft namespace
  455. //
  456. // c_str_ptr(_a) is not necessary for version 1.0 of Pantheios, but it's
  457. // defined and exported in order to allow for the case where someone
  458. // may find a legitimate use for the conversion classes additional to
  459. // the type-tunneling of the Pantheios API.
  460. # ifdef PANTHEIOS_USE_WIDE_STRINGS
  461. using ::pantheios::shims::c_str_data_w;
  462. using ::pantheios::shims::c_str_len_w;
  463. using ::pantheios::shims::c_str_ptr_w;
  464. # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
  465. using ::pantheios::shims::c_str_data_a;
  466. using ::pantheios::shims::c_str_len_a;
  467. using ::pantheios::shims::c_str_ptr_a;
  468. # endif /* PANTHEIOS_USE_WIDE_STRINGS */
  469. using ::pantheios::shims::c_str_data;
  470. using ::pantheios::shims::c_str_len;
  471. using ::pantheios::shims::c_str_ptr;
  472. }
  473. #endif /* !PANTHEIOS_NO_NAMESPACE */
  474. /* /////////////////////////////////////////////////////////////////////////
  475. * Inclusion
  476. */
  477. #ifdef STLSOFT_PPF_pragma_once_SUPPORT
  478. # pragma once
  479. #endif /* STLSOFT_PPF_pragma_once_SUPPORT */
  480. /* ////////////////////////////////////////////////////////////////////// */
  481. #endif /* !PANTHEIOS_INCL_PANTHEIOS_INSERTERS_HPP_INTEGER */
  482. /* ///////////////////////////// end of file //////////////////////////// */