From e53cb861a74e8d43f12fca9b96a76ede2c706e06 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Sat, 28 Mar 2015 01:04:18 +0000 Subject: [PATCH] added a missed file --- qse/lib/cmn/String.cpp | 119 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 qse/lib/cmn/String.cpp diff --git a/qse/lib/cmn/String.cpp b/qse/lib/cmn/String.cpp new file mode 100644 index 00000000..1129d71a --- /dev/null +++ b/qse/lib/cmn/String.cpp @@ -0,0 +1,119 @@ +/* + * $Id$ + * + Copyright (c) 2006-2014 Chung, Hyung-Hwan. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "mem.h" + +#if !defined(QSE_HAVE_CONFIG_H) +# if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) +# if (defined(__WATCOMC__) && (__WATCOMC__ < 1200)) || defined(__BORLANDC__) +# undef HAVE_VA_COPY +# undef HAVE___VA_COPY +# else +# define HAVE_VA_COPY +# define HAVE___VA_COPY +# endif +# endif +#endif + +#if !defined(HAVE_VA_COPY) +# if defined(HAVE___VA_COPY) +# define va_copy(dst,src) __va_copy((dst),(src)) +# else +# define va_copy(dst,src) QSE_MEMCPY(&(dst),&(src),QSE_SIZEOF(va_list)) +# endif +#endif + +///////////////////////////////// +QSE_BEGIN_NAMESPACE(QSE) +///////////////////////////////// + + +int WcString::format (const qse_wchar_t* fmt, ...) +{ + va_list ap; + va_start (ap, fmt); + int x = this->formatv (fmt, ap); + va_end (ap); + return x; + +} +int WcString::formatv (const qse_wchar_t* fmt, va_list ap) +{ + va_list saved_ap; + + va_copy (saved_ap, ap); + qse_size_t n = qse_wcsxvfmt(QSE_NULL, 0, fmt, ap); + if (n == (qse_size_t)-1) + { + // there's mb/wc conversion error. + return -1; + } + + if (n > this->getCapacity()) this->possess_data (this->round_capacity(n)); + else if (this->_item->isShared()) this->possess_data (); + + qse_wcsxvfmt ((qse_wchar_t*)this->getBuffer(), this->getCapacity() + 1, fmt, saved_ap); + + this->force_size (n); + return 0; +} + +////////////////////////////////////////////////////////////////////////// + +int MbString::format (const qse_mchar_t* fmt, ...) +{ + va_list ap; + va_start (ap, fmt); + int x = this->formatv (fmt, ap); + va_end (ap); + return x; +} + +int MbString::formatv (const qse_mchar_t* fmt, va_list ap) +{ + va_list saved_ap; + + va_copy (saved_ap, ap); + qse_size_t n = qse_mbsxvfmt(QSE_NULL, 0, fmt, ap); + if (n == (qse_size_t)-1) + { + // there's mb/wc conversion error. + return -1; + } + + if (n > this->getCapacity()) this->possess_data (this->round_capacity(n)); + else if (this->_item->isShared()) this->possess_data (); + + qse_mbsxvfmt ((qse_mchar_t*)this->getBuffer(), this->getCapacity() + 1, fmt, saved_ap); + + this->force_size (n); + return 0; +} + +///////////////////////////////// +QSE_END_NAMESPACE(QSE) +/////////////////////////////////