diff --git a/nautilus/include/nautilus/std/string.hpp b/nautilus/include/nautilus/std/string.hpp index 07b1ef33..459d8da0 100644 --- a/nautilus/include/nautilus/std/string.hpp +++ b/nautilus/include/nautilus/std/string.hpp @@ -1,6 +1,7 @@ #pragma once #include "nautilus/val_ptr.hpp" +#include "nautilus/std/string_view.hpp" #include namespace nautilus { @@ -55,7 +56,7 @@ class val> { * is valid and the values in it correspond to the values stored in the string with an additional null * character after the last position. */ - val c_str() { + val c_str() const { return invoke(+[](base_type* ptr) -> const CharT* { return ptr->c_str(); }, data_ptr); } diff --git a/nautilus/include/nautilus/std/string_view.hpp b/nautilus/include/nautilus/std/string_view.hpp index dcb09f8b..e696c2ec 100644 --- a/nautilus/include/nautilus/std/string_view.hpp +++ b/nautilus/include/nautilus/std/string_view.hpp @@ -57,17 +57,17 @@ class val> { return invoke(+[](std::basic_string_view* ptr) { return ptr->cend(); }, data_ptr); } - val operator[](val pos) const { + val operator[](val pos) const { return invoke( - +[](std::basic_string_view* ptr, size_type pos) -> const_reference { + +[](std::basic_string_view* ptr, size_type pos) -> value_type { return ptr->operator[](pos); }, data_ptr, pos); } - const val at(val index) const { + const val at(val index) const { return invoke( - +[](std::basic_string_view* ptr, size_type index) -> const_reference { + +[](std::basic_string_view* ptr, size_type index) -> value_type { return ptr->at(index); }, data_ptr, index); @@ -89,14 +89,14 @@ class val> { return invoke(+[](std::basic_string_view* ptr) { return ptr->empty(); }, data_ptr); } - val front() const { + val front() const { return invoke( - +[](std::basic_string_view* ptr) -> const_reference { return ptr->front(); }, data_ptr); + +[](std::basic_string_view* ptr) -> value_type { return ptr->front(); }, data_ptr); } - val back() const { + val back() const { return invoke( - +[](std::basic_string_view* ptr) -> const_reference { return ptr->back(); }, data_ptr); + +[](std::basic_string_view* ptr) -> value_type { return ptr->back(); }, data_ptr); } val data() const { diff --git a/nautilus/src/nautilus/api/std/CMakeLists.txt b/nautilus/src/nautilus/api/std/CMakeLists.txt index c8d0ef97..1be56dbd 100644 --- a/nautilus/src/nautilus/api/std/CMakeLists.txt +++ b/nautilus/src/nautilus/api/std/CMakeLists.txt @@ -3,4 +3,6 @@ add_source_files(nautilus cstring.cpp cmath.cpp cstdlib.cpp - iostream.cpp) + iostream.cpp + string.cpp + string_view.cpp) diff --git a/nautilus/src/nautilus/api/std/string.cpp b/nautilus/src/nautilus/api/std/string.cpp new file mode 100644 index 00000000..4c3d27a3 --- /dev/null +++ b/nautilus/src/nautilus/api/std/string.cpp @@ -0,0 +1,9 @@ +#include "nautilus/std/string.hpp" +#include "nautilus/function.hpp" + +namespace nautilus { +template class val>>; +template class val>>; +template class val>>; +template class val>>; +} // namespace nautilus