| 3856 | */ |
| 3857 | |
| 3858 | String String::SubString(std::intmax_t startPos, std::intmax_t endPos) const |
| 3859 | { |
| 3860 | if (startPos < 0) |
| 3861 | startPos = std::max<std::size_t>(m_sharedString->size + startPos, 0); |
| 3862 | |
| 3863 | std::size_t start = static_cast<std::size_t>(startPos); |
| 3864 | |
| 3865 | if (endPos < 0) |
| 3866 | { |
| 3867 | endPos = m_sharedString->size+endPos; |
| 3868 | if (endPos < 0) |
| 3869 | return String(); |
| 3870 | } |
| 3871 | |
| 3872 | std::size_t minEnd = std::min(static_cast<std::size_t>(endPos), m_sharedString->size - 1); |
| 3873 | if (start > minEnd || start >= m_sharedString->size) |
| 3874 | return String(); |
| 3875 | |
| 3876 | std::size_t size = minEnd - start + 1; |
| 3877 | |
| 3878 | auto str = std::make_shared<SharedString>(size); |
| 3879 | std::memcpy(str->string.get(), &m_sharedString->string[start], size); |
| 3880 | |
| 3881 | return String(std::move(str)); |
| 3882 | } |
| 3883 | |
| 3884 | /*! |
| 3885 | * \brief Returns a sub string of the string from a character |
no test coverage detected