/* * This file is a part of TTMath Bignum Library * and is distributed under the 3-Clause BSD Licence. * Author: Tomasz Sowa */ /* * Copyright (c) 2006-2010, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * 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. * * * Neither the name Tomasz Sowa nor the names of contributors to this * project may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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. */ #ifndef headerfilettmathmisc #define headerfilettmathmisc /*! \file ttmathmisc.h \brief some helpful functions */ #include namespace ttmath { /*! some helpful functions */ class Misc { public: /* * * AssignString(result, str) * result = str * */ /*! result = str */ static void AssignString(std::string & result, const char * str) { result = str; } #ifndef TTMATH_DONT_USE_WCHAR /*! result = str */ static void AssignString(std::wstring & result, const char * str) { result.clear(); for( ; *str ; ++str ) result += *str; } /*! result = str */ static void AssignString(std::wstring & result, const std::string & str) { return AssignString(result, str.c_str()); } /*! result = str */ static void AssignString(std::string & result, const wchar_t * str) { result.clear(); for( ; *str ; ++str ) result += static_cast(*str); } /*! result = str */ static void AssignString(std::string & result, const std::wstring & str) { return AssignString(result, str.c_str()); } #endif /* * * AddString(result, str) * result += str * */ /*! result += str */ static void AddString(std::string & result, const char * str) { result += str; } #ifndef TTMATH_DONT_USE_WCHAR /*! result += str */ static void AddString(std::wstring & result, const char * str) { for( ; *str ; ++str ) result += *str; } #endif /* this method omits any white characters from the string char_type is char or wchar_t */ template static void SkipWhiteCharacters(const char_type * & c) { // 13 is at the end in a DOS text file (\r\n) while( (*c==' ' ) || (*c=='\t') || (*c==13 ) || (*c=='\n') ) ++c; } /*! this static method converts one character into its value for example: - 1 -> 1 - 8 -> 8 - A -> 10 - f -> 15 this method don't check whether c is correct or not */ static uint CharToDigit(uint c) { if(c>='0' && c<='9') return c-'0'; if(c>='a' && c<='z') return c-'a'+10; return c-'A'+10; } /*! this method changes a character 'c' into its value (if there can't be a correct value it returns -1) for example: - c=2, base=10 -> function returns 2 - c=A, base=10 -> function returns -1 - c=A, base=16 -> function returns 10 */ static sint CharToDigit(uint c, uint base) { if( c>='0' && c<='9' ) c=c-'0'; else if( c>='a' && c<='z' ) c=c-'a'+10; else if( c>='A' && c<='Z' ) c=c-'A'+10; else return -1; if( c >= base ) return -1; return sint(c); } /*! this method converts a digit into a char digit should be from <0,F> (we don't have to get a base) for example: - 1 -> 1 - 8 -> 8 - 10 -> A - 15 -> F */ static uint DigitToChar(uint digit) { if( digit < 10 ) return digit + '0'; return digit - 10 + 'A'; } }; // struct Misc } #endif