namespace str{
enum {
SURROGATE_MIN = 0xD800,
SURROGATE_MAX = 0xDFFF,
SURROGATE_LO_MIN = SURROGATE_MIN,
SURROGATE_HI_MIN = 0xDC00,
SURROGATE_LO_MAX = SURROGATE_HI_MIN - 1,
SURROGATE_HI_MAX = SURROGATE_MAX,
UNICODE_MAX = 0x10FFFF,
U8_1BYTE_MAX = 0x7F,
U8_2BYTE_MIN = 0x80,
U8_2BYTE_MAX = 0x7FF,
U8_3BYTE_MIN = 0x800,
U8_3BYTE_MAX = 0xFFFF,
U8_4BYTE_MIN = 0x10000,
U8_4BYTE_MAX = UNICODE_MAX,
U16_1WORD_MAX = 0xFFFF,
U16_2WORD_MIN = 0x10000,
U16_2WORD_MAX = UNICODE_MAX,
};
template <int Len>
void putCpNeT (wchar_t*& p, unsigned long aCp);
/// Puts a code-point in wchar_t encoding, w/o error-checking
/// @param [in,out] p position to put to
/// @param [in] aCp code-point, surely valid
inline void putCpNe (wchar_t*& p, unsigned long aCp)
{ putCpNeT<sizeof(wchar_t)>(p, aCp); }
} // namespace str
template <>
void str::putCpNeT<2> (wchar_t*& p, unsigned long aCp)
{
if (aCp < U16_2WORD_MIN) { // 1 word
*(p++) = static_cast<wchar_t>(aCp);
} else if (aCp <= U16_2WORD_MAX) { // 2 words
aCp -= U16_2WORD_MIN;
// Hi word
const wchar_t lo10 = aCp & 0x3FF;
const wchar_t hi10 = aCp >> 10;
*(p++) = static_cast<wchar_t>(0xD800 | hi10);
*(p++) = static_cast<wchar_t>(0xDC00 | lo10);
}
}
void str::appendCp(std::wstring& s, unsigned long aCp)
{
wchar_t c[5];
wchar_t* end = c;
putCpNe(end, aCp);
s.append(c, end);
}
template<>
.template class std::vector<int>
.AsynchronousReader::init
было бы ошибкой держать inline’ом. По-хорошему, его надо в CPP. Но это довольно небольшая часть кода.// H
template <int x>
void foo () { std::cout << x << std::endl; }
extern template void foo<2>();
// CPP
template void foo<2>();
for(size_t z = 0; z < b.length(); z++){
if(a.find(b[z]) != std::string::npos){
#include <iostream>
#define CHECK(a,b) \
if ((a) == (b)) \
std::cout << "Equal" << std::endl; \
else std::cout << "Inequal" << std::endl;
int main()
{
for (int i = 0; i < 5; ++i) {
CHECK (i, 2)
}
return 0;
}
int main()
{
for (int i = 0; i < 5; ++i) {
if ((i) == (2))
std::cout << "Equal" << std::endl;
else std::cout << "Inequal" << std::endl;
}
return 0;
}
Inequal
Inequal
Equal
Inequal
Inequal
зачем нужно было вообще вводить intptr_t если есть uintptr_t, в который адрес точно влезет?
И, более того, как в ЗНАКОВУЮ переменную типа intptr_t можно поместить 32-битный адрес памяти, если в этом числе 1 бит уходит на знак, а для данных остаётся 31 бит?
как может БЕЗЗНАКОВОЕ число равняться числу СО ЗНАКОМ?
enum {
BT_LEFT = 1,
BT_RIGHT = 2,
BT_ROTATE = 4,
BT_SOFTDROP = 8,
BT_HARDDROP = 16,
BT_PAUSE = 32,
BT_CONNECTED = 32768, // бит, указывающий, что контроллер подключён
};
class Controller { // интерфейс
public:
virtual unsigned poll() const = 0; // сочетание битов BT_XXX
virtual ~Controller = default;
};