blob: 8fd0b8af737d1ca6ba0976e03d5bca3594fceb09 [file] [log] [blame]
/***************************************************************************************************************************************************************************************************************************
*
This file is part of CertiVox M-Pin Client and Server Libraries. *
The CertiVox M-Pin Client and Server Libraries provide developers with an extensive and efficient set of strong authentication and cryptographic functions. *
For further information about its features and functionalities please refer to http://www.certivox.com *
The CertiVox M-Pin Client and Server Libraries are free software: you can redistribute it and/or modify it under the terms of the BSD 3-Clause License http://opensource.org/licenses/BSD-3-Clause as stated below. *
The CertiVox M-Pin Client and Server Libraries are distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
Note that CertiVox Ltd issues a patent grant for use of this software under specific terms and conditions, which you can find here: http://certivox.com/about-certivox/patents/ *
Copyright (c) 2013, CertiVox UK Ltd *
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 of CertiVox UK Ltd nor the names of its contributors 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 HOLDER 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. *
*
***************************************************************************************************************************************************************************************************************************/
/*! \file CvString.h
\brief C++ class which extends the std::string with useful functionality.
*- Project : SkyKey SDK
*- Authors : Mony Aladjem
*- Company : Certivox
*- Created : August 27, 2012, 10:49 AM
*- Last update : February 15, 2013
*- Platform : Windows XP SP3 - Windows 7
*- Dependency : STL std::string
C++ class which extends the std::string with useful functionality.
The CvString doesn't add any members to the std::string base, so it
is binary compatible with it.
*/
#ifndef CVSTRING_H
#define CVSTRING_H
#include "CvCommon.h"
#include <string>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef _WIN32
#define STRCASECMP _stricmp
#define STRNCASECMP _strnicmp
#define SPRINTF sprintf_s
#else
#define STRCASECMP strcasecmp
#define STRNCASECMP strncasecmp
#define SPRINTF sprintf
#endif
class CvString : public std::string
{
public:
typedef std::string String;
typedef std::vector<CvString> CStringVector;
CvString() {}
CvString( const String& aString ) : String(aString) {}
CvString( const char* apString ) : String(apString) {}
CvString( const CvString& aString ) : String(aString) {}
CvString( const String& aString, size_t aPos, size_t aSize = npos ) : String(aString,aPos,aSize) {}
CvString( const char* apString, size_t aSize ) : String(apString,aSize) {}
CvString( size_t aSize, char aChar ) : String(aSize,aChar) {}
CvString( uint32_t aUint ) { *this = aUint; }
CvString( long aInt ) { *this = aInt; }
CvString& Format( const char* apFormat, ... );
CvString& TrimLeft( const String& aChars = " \t\f\v\n\r" );
CvString& TrimRight( const String& aChars = " \t\f\v\n\r" );
int ReplaceAll( const String& aPattern, const String& aReplacement );
void Tokenize( const String& aDelimiters, OUT CStringVector& aTokens ) const;
inline long Long( int aBase = 10 ) const;
inline uint32_t Ulong( int aBase = 10 ) const;
inline int CompareNoCase( const String& aOther ) const;
inline int CompareNoCase( const String& aOther, size_t n ) const;
inline CvString& operator=( uint32_t aUint );
inline CvString& operator=( long aInt );
private:
};
long CvString::Long( int aBase ) const
{
char* pEnd;
return strtol( c_str(), &pEnd, aBase );
}
uint32_t CvString::Ulong( int aBase ) const
{
char* pEnd;
return (uint32_t)strtoul( c_str(), &pEnd, aBase );
}
int CvString::CompareNoCase( const String& aOther ) const
{
return STRCASECMP( c_str(), aOther.c_str() );
}
int CvString::CompareNoCase( const String& aOther, size_t n ) const
{
return STRNCASECMP( c_str(), aOther.c_str(), n );
}
CvString& CvString::operator=( uint32_t aUint )
{
char str[16];
SPRINTF( str, "%u", aUint );
*this = str;
return *this;
}
CvString& CvString::operator=( long aInt )
{
char str[16];
SPRINTF( str, "%ld", aInt );
*this = str;
return *this;
}
std::wstring StringToWstring( const std::string& str );
std::string WstringToString( const std::wstring& str );
#endif /* CVSTRING_H */