17#include "yahal_String.h"
21String::String(
const char * ptr)
22 : _len(strlen(ptr)), _cap(_len), _ptr(new char[_cap+1]) {
26String::String(
const String & s)
27 : _len(s._len), _cap(_len), _ptr(new char[_cap+1]) {
31String::String(
char c, uint16_t n)
32 : _len(n), _cap(n), _ptr(new char[n+1]) {
34 for (; i < n; ++i) _ptr[i] = c;
43String & String::operator = (
const char * ptr) {
44 uint16_t temp = strlen(ptr);
58String & String::operator = (
char c) {
66String::String(
String && s) {
82const char & String::operator [] (uint16_t pos)
const {
87char & String::operator [] (uint16_t pos) {
92bool String::operator == (
const String & r)
const
94 if (_len != r._len)
return false;
95 for (uint16_t pos = 0; pos < _len; ++pos) {
96 if (_ptr[pos] != r._ptr[pos])
102bool String::operator != (
const String & r)
const
104 return !((*this) == r);
107void String::reserve(uint16_t size) {
109 char *temp =
new char[size+1];
117void String::shrink_to_fit() {
119 char * temp =
new char[_len+1];
127void String::clear() {
133 uint16_t temp = s._len;
134 reserve(_len + temp);
135 strcat(_ptr, s._ptr);
140String String::substr(uint16_t pos, uint16_t n)
const
143 if (pos >= _len)
return s;
144 for (; pos < _len; ++pos) {
145 if (!n)
break;
else --n;
151uint16_t String::find (
char c, uint16_t pos)
const
153 for (; pos < _len; ++pos) {
154 if (c == _ptr[pos])
return pos;
159String String::fill_left (uint16_t width,
const char c) {
161 return String(c, width-_len) + *
this;
167String String::fill_right(uint16_t width,
const char c) {
169 return *
this +
String(c, width-_len);
179void String::reserve_only(uint16_t size) {
181 char * temp =
new char[size+1];
188String to_String(
int num,
int base) {
191 bool isNegative =
false;
203 if (num < 0 && base == 10)
211 int rem = num % base;
212 buf[--i] = (rem > 9) ? (rem-10) +
'a' : rem +
'0';