![]() |
![]() |
|
|
00001 /* ///////////////////////////////////////////////////////////////////////// 00002 * File: fastformat/shims/conversion/filter_type/reals.hpp 00003 * 00004 * Purpose: FastFormat argument conversion shim for floating-point 00005 * types. 00006 * 00007 * Created: 1st June 2008 00008 * Updated: 18th January 2009 00009 * 00010 * Home: http://www.fastformat.org/ 00011 * 00012 * Copyright (c) 2008-2009, Matthew Wilson and Synesis Software 00013 * All rights reserved. 00014 * 00015 * Redistribution and use in source and binary forms, with or without 00016 * modification, are permitted provided that the following conditions are 00017 * met: 00018 * 00019 * - Redistributions of source code must retain the above copyright notice, 00020 * this list of conditions and the following disclaimer. 00021 * - Redistributions in binary form must reproduce the above copyright 00022 * notice, this list of conditions and the following disclaimer in the 00023 * documentation and/or other materials provided with the distribution. 00024 * - Neither the names of Matthew Wilson and Synesis Software nor the names 00025 * of any contributors may be used to endorse or promote products derived 00026 * from this software without specific prior written permission. 00027 * 00028 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 00029 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 00030 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00031 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 00032 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00033 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00034 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00035 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00036 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00037 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00038 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00039 * 00040 * ////////////////////////////////////////////////////////////////////// */ 00041 00042 00048 #ifndef FASTFORMAT_INCL_FASTFORMAT_SHIMS_CONVERSION_FILTER_TYPE_HPP_REALS 00049 #define FASTFORMAT_INCL_FASTFORMAT_SHIMS_CONVERSION_FILTER_TYPE_HPP_REALS 00050 00051 /* ///////////////////////////////////////////////////////////////////////// 00052 * Version information 00053 */ 00054 00055 #ifndef FASTFORMAT_DOCUMENTATION_SKIP_SECTION 00056 # define FASTFORMAT_VER_FASTFORMAT_SHIMS_CONVERSION_FILTER_TYPE_HPP_REALS_MAJOR 1 00057 # define FASTFORMAT_VER_FASTFORMAT_SHIMS_CONVERSION_FILTER_TYPE_HPP_REALS_MINOR 2 00058 # define FASTFORMAT_VER_FASTFORMAT_SHIMS_CONVERSION_FILTER_TYPE_HPP_REALS_REVISION 1 00059 # define FASTFORMAT_VER_FASTFORMAT_SHIMS_CONVERSION_FILTER_TYPE_HPP_REALS_EDIT 5 00060 #endif /* !FASTFORMAT_DOCUMENTATION_SKIP_SECTION */ 00061 00062 /* ///////////////////////////////////////////////////////////////////////// 00063 * Language 00064 */ 00065 00066 #ifndef __cplusplus 00067 # error This file can only be included in C++ compilation units 00068 #endif /* !__cplusplus */ 00069 00070 /* ///////////////////////////////////////////////////////////////////////// 00071 * Includes 00072 */ 00073 00074 #include <fastformat/fastformat.h> 00075 #include <fastformat/internal/stlsoft.h> 00076 #include <fastformat/quality/contract.h> 00077 00078 #include <stlsoft/string/shim_string.hpp> 00079 00080 #include <stdio.h> 00081 00082 /* ///////////////////////////////////////////////////////////////////////// 00083 * Namespace 00084 */ 00085 00086 #if !defined(FASTFORMAT_NO_NAMESPACE) 00087 namespace fastformat 00088 { 00089 namespace filters 00090 { 00091 #endif /* !FASTFORMAT_NO_NAMESPACE */ 00092 00093 /* ///////////////////////////////////////////////////////////////////////// 00094 * Overloadable conversion shim functions: 00095 * 00096 * float 00097 * double 00098 */ 00099 00103 inline stlsoft::basic_shim_string<ff_char_t, 32> filter_type(double value, double const*, ff_char_t const volatile*) 00104 { 00105 static const ff_char_t fmt[] = { '%', 'G', '\0' }; 00106 00107 ff_char_t num[100]; 00108 00109 // TODO: Sort this properly, using detection of the "Safe" string library, a la Pantheios 00110 00111 // TODO: Sort this properly, using traits instead of all the pre-processor clutter 00112 00113 #if defined(__STDC_SECURE_LIB__) && \ 00114 defined(__STDC_WANT_SECURE_LIB__) && \ 00115 __STDC_WANT_SECURE_LIB__ == 1 00116 # ifdef FASTFORMAT_USE_WIDE_STRINGS 00117 int n = ::swprintf_s(&num[0], STLSOFT_NUM_ELEMENTS(num), fmt, value); 00118 # else /* ? FASTFORMAT_USE_WIDE_STRINGS */ 00119 int n = ::sprintf_s(&num[0], STLSOFT_NUM_ELEMENTS(num), fmt, value); 00120 # endif /* FASTFORMAT_USE_WIDE_STRINGS */ 00121 #else /* ? "secure" */ 00122 # ifdef FASTFORMAT_USE_WIDE_STRINGS 00123 int n = ::swprintf(&num[0], fmt, value); 00124 # else /* ? FASTFORMAT_USE_WIDE_STRINGS */ 00125 int n = ::sprintf(&num[0], fmt, value); 00126 # endif /* FASTFORMAT_USE_WIDE_STRINGS */ 00127 #endif /* "secure" */ 00128 00129 if(n < 0) 00130 { 00131 n = 0; 00132 } 00133 00134 return stlsoft::basic_shim_string<ff_char_t, 32>(num, static_cast<size_t>(n)); 00135 } 00136 00140 inline stlsoft::basic_shim_string<ff_char_t, 32> filter_type(float value, float const*, ff_char_t const volatile*) 00141 { 00142 double value2 = value; 00143 00144 return filter_type(value2, &value2, static_cast<ff_char_t const volatile*>(0)); 00145 } 00146 00147 /* ///////////////////////////////////////////////////////////////////////// 00148 * Namespace 00149 */ 00150 00151 #if !defined(FASTFORMAT_NO_NAMESPACE) 00152 } /* namespace filters */ 00153 } /* namespace fastformat */ 00154 #endif /* !FASTFORMAT_NO_NAMESPACE */ 00155 00156 /* ///////////////////////////////////////////////////////////////////////// 00157 * Inclusion 00158 */ 00159 00160 #ifdef STLSOFT_CF_PRAGMA_ONCE_SUPPORT 00161 # pragma once 00162 #endif /* STLSOFT_CF_PRAGMA_ONCE_SUPPORT */ 00163 00164 /* ////////////////////////////////////////////////////////////////////// */ 00165 00166 #endif /* FASTFORMAT_INCL_FASTFORMAT_SHIMS_CONVERSION_FILTER_TYPE_HPP_REALS */ 00167 00168 /* ////////////////////////////////////////////////////////////////////// */
|
|
FastFormat Library documentation © Matthew Wilson, 2006-2009 |
|