int main() { using string_view = std::experimental::string_view; using u16string_view = std::experimental::u16string_view; using u32string_view = std::experimental::u32string_view; using wstring_view = std::experimental::wstring_view; test(string_view {}); test(string_view { "123"}); test(u16string_view{}); test(u16string_view{u"123"}); test(u32string_view{}); test(u32string_view{U"123"}); test(wstring_view {}); test(wstring_view {L"123"}); { constexpr string_view sv { "123", 3 }; constexpr u16string_view u16sv {u"123", 3 }; constexpr u32string_view u32sv {U"123", 3 }; constexpr wstring_view wsv {L"123", 3 }; static_assert ( sv.begin() != sv.end(), "" ); static_assert ( u16sv.begin() != u16sv.end(), "" ); static_assert ( u32sv.begin() != u32sv.end(), "" ); static_assert ( wsv.begin() != wsv.end(), "" ); static_assert ( sv.begin() != sv.cend(), "" ); static_assert ( u16sv.begin() != u16sv.cend(), "" ); static_assert ( u32sv.begin() != u32sv.cend(), "" ); static_assert ( wsv.begin() != wsv.cend(), "" ); } }
std::string wchar_utf8(wstring_view wide, error_code& ec) { // allocate space for worst-case std::string utf8; utf8.resize(wide.size() * 6); if (wide.empty()) return {}; wchar_t const* src_start = wide.data(); utf8_errors::error_code_enum const ret = convert_from_wide<sizeof(wchar_t)>::convert( &src_start, src_start + wide.size(), utf8); if (ret != utf8_errors::error_code_enum::conversion_ok) ec = make_error_code(ret); return utf8; }
void CHistoryCollector::ClearHistoryLine(wstring_view errStr) { if (errStr.empty()) // in case of error let the display stay as it is { if (nullptr != m_pCalcDisplay) { m_pCalcDisplay->SetExpressionDisplay(std::make_shared<CalculatorVector<std::pair<std::wstring, int>>>(), std::make_shared<CalculatorVector<std::shared_ptr<IExpressionCommand>>>()); } m_iCurLineHistStart = -1; // It will get recomputed at the first Opnd ReinitHistory(); } }
void CHistoryCollector::AddOpndToHistory(wstring_view numStr, Rational const& rat, bool fRepetition) { std::shared_ptr<CalculatorVector<int>> commands = std::make_shared<CalculatorVector<int>>(); // Check for negate bool fNegative = (numStr[0] == L'-'); bool fSciFmt = false; bool fDecimal = false; for (size_t i = (fNegative ? 1 : 0); i < numStr.length(); i++) { if (numStr[i] == m_decimalSymbol) { IFT(commands->Append(IDC_PNT)); if (!fSciFmt) { fDecimal = true; } } else if (numStr[i] == L'e') { IFT(commands->Append(IDC_EXP)); fSciFmt = true; } else if (numStr[i] == L'-') { IFT(commands->Append(IDC_SIGN)); } else if (numStr[i] == L'+') { // Ignore. } // Number else { int num = static_cast<int>(numStr[i]) - ASCII_0; num += IDC_0; IFT(commands->Append(num)); } } auto operandCommand = std::make_shared<COpndCommand>(commands, fNegative, fDecimal, fSciFmt); operandCommand->Initialize(rat); int iCommandEnd = AddCommand(operandCommand); m_lastOpStartIndex = IchAddSzToEquationSz(numStr, iCommandEnd); if (fRepetition) { SetExpressionDisplay(); } m_bLastOpndBrace = false; m_lastBinOpStartIndex = -1; }
int main() { typedef std::experimental::string_view string_view; typedef std::experimental::u16string_view u16string_view; typedef std::experimental::u32string_view u32string_view; typedef std::experimental::wstring_view wstring_view; test(string_view ()); test(u16string_view()); test(u32string_view()); test(wstring_view ()); test(string_view ( "123")); test(wstring_view (L"123")); #if __cplusplus >= 201103L test(u16string_view{u"123"}); test(u32string_view{U"123"}); #endif #if _LIBCPP_STD_VER > 11 { constexpr string_view sv { "123", 3 }; constexpr u16string_view u16sv {u"123", 3 }; constexpr u32string_view u32sv {U"123", 3 }; constexpr wstring_view wsv {L"123", 3 }; static_assert ( *sv.begin() == sv[0], "" ); static_assert ( *u16sv.begin() == u16sv[0], "" ); static_assert ( *u32sv.begin() == u32sv[0], "" ); static_assert ( *wsv.begin() == wsv[0], "" ); static_assert ( *sv.cbegin() == sv[0], "" ); static_assert ( *u16sv.cbegin() == u16sv[0], "" ); static_assert ( *u32sv.cbegin() == u32sv[0], "" ); static_assert ( *wsv.cbegin() == wsv[0], "" ); } #endif }
int main() { typedef std::string_view string_view; typedef std::u16string_view u16string_view; typedef std::u32string_view u32string_view; typedef std::wstring_view wstring_view; test(string_view ()); test(u16string_view()); test(u32string_view()); test(wstring_view ()); test(string_view ( "123")); test(wstring_view (L"123")); #if TEST_STD_VER >= 11 test(u16string_view{u"123"}); test(u32string_view{U"123"}); #endif #if TEST_STD_VER > 11 { constexpr string_view sv { "123", 3 }; constexpr u16string_view u16sv {u"123", 3 }; constexpr u32string_view u32sv {U"123", 3 }; constexpr wstring_view wsv {L"123", 3 }; static_assert ( sv.begin() != sv.end(), "" ); static_assert ( u16sv.begin() != u16sv.end(), "" ); static_assert ( u32sv.begin() != u32sv.end(), "" ); static_assert ( wsv.begin() != wsv.end(), "" ); static_assert ( sv.begin() != sv.cend(), "" ); static_assert ( u16sv.begin() != u16sv.cend(), "" ); static_assert ( u32sv.begin() != u32sv.cend(), "" ); static_assert ( wsv.begin() != wsv.cend(), "" ); } #endif }
//Update the commands corresponding to the passed string Number std::shared_ptr<CalculatorVector<int>> CHistoryCollector::GetOperandCommandsFromString(wstring_view numStr) { std::shared_ptr<CalculatorVector<int>> commands = std::make_shared<CalculatorVector<int>>(); // Check for negate bool fNegative = (numStr[0] == L'-'); for (size_t i = (fNegative ? 1 : 0); i < numStr.length(); i++) { if (numStr[i] == m_decimalSymbol) { IFT(commands->Append(IDC_PNT)); } else if (numStr[i] == L'e') { IFT(commands->Append(IDC_EXP)); } else if (numStr[i] == L'-') { IFT(commands->Append(IDC_SIGN)); } else if (numStr[i] == L'+') { // Ignore. } // Number else { int num = static_cast<int>(numStr[i]) - ASCII_0; num += IDC_0; IFT(commands->Append(num)); } } // If the number is negative, append a sign command at the end. if (fNegative) { IFT(commands->Append(IDC_SIGN)); } return commands; }
string::string(const wstring_view& view) : _base(_Convert<wchar_t>::toUTF8(view.data(), 0, view.size())) { }
string WCSToMBCS(wstring_view sv, unsigned cp) { return sv.length() != 0 ? WCSToMBCS(CheckNonnegativeScalar<int>( sv.length()), sv.data(), cp) : string(); }