Add string substring operation
This commit is contained in:
parent
f930dde989
commit
2ea8c617f0
@ -295,6 +295,10 @@ namespace rexy{
|
|||||||
void append(const_pointer data)
|
void append(const_pointer data)
|
||||||
noexcept(noexcept(this->allocate(0)) &&
|
noexcept(noexcept(this->allocate(0)) &&
|
||||||
noexcept(this->deallocate(nullptr,0)));
|
noexcept(this->deallocate(nullptr,0)));
|
||||||
|
|
||||||
|
template<class Alloc = allocator_type>
|
||||||
|
basic_string<value_type,Alloc> substring(size_type start, size_type end)const;
|
||||||
|
|
||||||
pointer release(void)noexcept(noexcept(this->allocate(0)));
|
pointer release(void)noexcept(noexcept(this->allocate(0)));
|
||||||
using detail::hasallocator<Allocator>::allocator;
|
using detail::hasallocator<Allocator>::allocator;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -211,6 +211,16 @@ namespace rexy{
|
|||||||
append(data, cx::strlen(data));
|
append(data, cx::strlen(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class Char, class Allocator>
|
||||||
|
template<class Alloc>
|
||||||
|
auto basic_string<Char,Allocator>::substring(size_type start, size_type end)const -> basic_string<value_type,Alloc>{
|
||||||
|
if(start > end || end > this->length())
|
||||||
|
return {};
|
||||||
|
const size_type newlen = end - start;
|
||||||
|
basic_string<value_type,Alloc> tmp(newlen);
|
||||||
|
tmp.append(this->get() + start, newlen);
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
template<class Char, class Allocator>
|
template<class Char, class Allocator>
|
||||||
auto basic_string<Char,Allocator>::release(void)noexcept(noexcept(this->allocate(0))) -> pointer{
|
auto basic_string<Char,Allocator>::release(void)noexcept(noexcept(this->allocate(0))) -> pointer{
|
||||||
if(this->islong()){
|
if(this->islong()){
|
||||||
|
|||||||
@ -235,7 +235,13 @@ void check_long_append(){
|
|||||||
test_str str1(startdata1);
|
test_str str1(startdata1);
|
||||||
str1.append("stuff");
|
str1.append("stuff");
|
||||||
if(strcmp(str1.get(), appendeddata))
|
if(strcmp(str1.get(), appendeddata))
|
||||||
error("long append should have resulted in this is another really long string that should ensure that it makes some sort of dyn alloc for big bufstuff");
|
error("long append should have resulted in this is another really long string that should ensure that it makes some sort of dyn alloc for big bufstuff\n");
|
||||||
|
}
|
||||||
|
void check_substring(){
|
||||||
|
rexy::string test = "this is a test string";
|
||||||
|
rexy::string test2 = test.substring(5, 7);
|
||||||
|
if(strcmp(test2.get(), "is") || test2.length() != 2)
|
||||||
|
error("substring operation should have resulted in 'is'\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(){
|
int main(){
|
||||||
@ -246,4 +252,5 @@ int main(){
|
|||||||
check_long_assignment();
|
check_long_assignment();
|
||||||
check_short_append();
|
check_short_append();
|
||||||
check_long_append();
|
check_long_append();
|
||||||
|
check_substring();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user