NSIS/Source/tstring.h
anders_k f69251d87e (C) 2021
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7245 212acab6-be3b-0410-9dea-997c60f758d6
2021-01-01 20:27:52 +00:00

89 lines
2.2 KiB
C++

// tstring.h
//
// This file is a part of Unicode NSIS.
//
// Copyright (C) 2007-2021 Jim Park
//
// Licensed under the zlib/libpng license (the "License");
// you may not use this file except in compliance with the License.
//
// This software is provided 'as-is', without any expressed or implied
// warranty.
//
// Provides TSTRING support.
/*
Unicode support by Jim Park -- 07/23/2007
*/
#ifndef NSIS_TSTRING___H__
#define NSIS_TSTRING___H__
#include "Platform.h"
#include "tchar.h"
#include <string>
/* Abstract string type as well. */
#ifdef _UNICODE
typedef std::wstring tstring;
typedef std::wofstream tofstream;
typedef std::wifstream tifstream;
#else
typedef std::string tstring;
typedef std::ofstream tofstream;
typedef std::ifstream tifstream;
#endif
#ifndef _UNICODE
#define CtoTString(str) (str)
#define CtoTString2(str,cp) (str)
#define TtoCString(str) (str)
#define CtoTStrParam CtoTString
#else
#define CtoTString2(str,cp) CtoTString((str),(cp))
#define CtoTStrParam(str) ( (const TCHAR*) CtoTString((str)) ) // Use this when passing as a vararg parameter
// This is a helpful little function for converting exceptions or
// other system type things that come back ANSI and must be
// utilized as either ANSI or wchar_t depending on _UNICODE.
class CtoTString
{
void Init(const char* str, UINT cp);
void Init(const char* str);
public:
CtoTString(const char* str) { Init(str); }
CtoTString(const char* str, UINT cp) { Init(str, cp); }
CtoTString(const std::string& str) { Init(str.c_str()); }
~CtoTString();
operator const wchar_t*() const { return m_wStr; }
inline const wchar_t*GetTStr() const { return m_wStr; }
private:
wchar_t* m_wStr;
};
// There may be system things that require C strings but we
// may actually have Unicode strings.
class TtoCString
{
void Init(const wchar_t* str);
public:
TtoCString(const wchar_t* wStr) { Init(wStr); }
TtoCString(const tstring& wStr) { Init(wStr.c_str()); }
~TtoCString();
operator const char*() const { return m_cStr; };
private:
char* m_cStr;
};
#endif // _UNICODE
#define PosixBug_CtoTString CtoTString
#define PosixBug_TtoCString TtoCString
#endif // NSIS_TSTRING___H__