Files
@ r9583:b6e25a00b908
Branch filter:
Location: cpp/openttd-patchpack/source/src/misc/strapi.hpp - annotation
r9583:b6e25a00b908
2.8 KiB
text/x-c++hdr
(svn r13621) -Fix: building roadbits in the wrong direction on bridges or building roadbits from underneath the bridge to the bridgehead is impossible, so don't silently ignore that error when building over houses and industries is not ignored.
r7116:89f0639a0770 r7116:89f0639a0770 r9111:983de9c5a848 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7255:05cabf856bb4 r7255:05cabf856bb4 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7255:05cabf856bb4 r7255:05cabf856bb4 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7405:862aed0b6ae4 r7116:89f0639a0770 r7255:05cabf856bb4 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7255:05cabf856bb4 r7255:05cabf856bb4 r7255:05cabf856bb4 r7255:05cabf856bb4 r7255:05cabf856bb4 r7255:05cabf856bb4 r7255:05cabf856bb4 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7405:862aed0b6ae4 r7116:89f0639a0770 r7255:05cabf856bb4 r7116:89f0639a0770 r7116:89f0639a0770 r7255:05cabf856bb4 r7116:89f0639a0770 r7255:05cabf856bb4 r7116:89f0639a0770 r7116:89f0639a0770 r7255:05cabf856bb4 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7255:05cabf856bb4 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7116:89f0639a0770 r7255:05cabf856bb4 r7116:89f0639a0770 r7116:89f0639a0770 | /* $Id$ */
/** @file strapi.hpp More string formatting? */
#ifndef STRAPI_HPP
#define STRAPI_HPP
#include <string.h>
#if defined(HAS_WCHAR)
#include <wchar.h>
#if !defined(_MSC_VER)
#define _stricmp strcmp
#define _wcsicmp wcscmp
#endif /* !defined(_MSC_VER) */
#endif /* HAS_WCHAR */
/** String API mapper base - just mapping by character type, not by case sensitivity yet.
* Class template CStrApiBaseT declaration is general, but following inline method
* definitions are specialized by character type. Class is not used directly, but only
* as a base class for template class CStrApiT */
template <typename Tchar>
class CStrApiBaseT
{
public:
/** ::strlen wrapper */
static size_t StrLen(const Tchar *s);
static int SPrintFL(Tchar *buf, size_t count, const Tchar *fmt, va_list args);
};
/** ::strlen wrapper specialization for char */
template <> /*static*/ inline size_t CStrApiBaseT<char>::StrLen(const char *s)
{
return ::strlen(s);
}
/** ::vsprintf wrapper specialization for char */
template <> /*static*/ inline int CStrApiBaseT<char>::SPrintFL(char *buf, size_t count, const char *fmt, va_list args)
{
#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(WINCE) // VC 8.0 and above
return ::vsnprintf_s(buf, count, count - 1, fmt, args);
#else /* ! VC 8.0 and above */
return ::vsnprintf(buf, count, fmt, args);
#endif
}
#if defined(HAS_WCHAR)
/** ::strlen wrapper specialization for wchar_t */
template <> /*static*/ inline size_t CStrApiBaseT<wchar_t>::StrLen(const wchar_t *s)
{
return ::wcslen(s);
}
/** ::vsprintf wrapper specialization for wchar_t */
template <> /*static*/ inline int CStrApiBaseT<wchar_t>::SPrintFL(wchar_t *buf, size_t count, const wchar_t *fmt, va_list args)
{
#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(WINCE) // VC 8.0 and above
return ::_vsnwprintf_s(buf, count, count - 1, fmt, args);
#else /* ! VC 8.0 and above */
# if defined(_WIN32)
return ::_vsnwprintf(buf, count, fmt, args);
# else /* !_WIN32 */
return ::vswprintf(buf, count, fmt, args);
# endif /* !_WIN32 */
#endif
}
#endif /* HAS_WCHAR */
template <typename Tchar, bool TcaseInsensitive>
class CStrApiT : public CStrApiBaseT<Tchar>
{
public:
static int StrCmp(const Tchar *s1, const Tchar *s2);
};
template <> /*static*/ inline int CStrApiT<char, false>::StrCmp(const char *s1, const char *s2)
{
return ::strcmp(s1, s2);
}
template <> /*static*/ inline int CStrApiT<char, true>::StrCmp(const char *s1, const char *s2)
{
return ::_stricmp(s1, s2);
}
#if defined(HAS_WCHAR)
template <> /*static*/ inline int CStrApiT<wchar_t, false>::StrCmp(const wchar_t *s1, const wchar_t *s2)
{
return ::wcscmp(s1, s2);
}
template <> /*static*/ inline int CStrApiT<wchar_t, true>::StrCmp(const wchar_t *s1, const wchar_t *s2)
{
return ::_wcsicmp(s1, s2);
}
#endif /* HAS_WCHAR */
#endif /* STRAPI_HPP */
|