diff options
Diffstat (limited to 'lib/mystring/assign.cc')
-rw-r--r-- | lib/mystring/assign.cc | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/mystring/assign.cc b/lib/mystring/assign.cc new file mode 100644 index 0000000..5a7b6a7 --- /dev/null +++ b/lib/mystring/assign.cc @@ -0,0 +1,55 @@ +#include "mystring.h" +#include "trace.h" +#include <ctype.h> +#include <string.h> + +void mystring::dupnil() +{ + trace(""); + rep = &nil; + rep->attach(); +} + +void mystring::assign(const char* in) +{ + if(in) + assign(in, strlen(in)); + else { + mystringrep* tmp = rep; + dupnil(); + tmp->detach(); + } +} + +void mystring::assign(const char* in, size_t len) +{ + trace("in='" << in << "'"); + if(in != rep->buf) { + mystringrep* tmp = rep; + dup(in, len); + tmp->detach(); + } +} + +void mystring::dup(const char* in, size_t len) +{ + trace("in='" << in << "'"); + rep = mystringrep::dup(in, len); + rep->attach(); +} + +void mystring::dup(const char* in) +{ + if(in) + dup(in, strlen(in)); + else + dupnil(); +} + +void mystring::operator=(const mystringjoin& in) +{ + mystringrep* tmp = rep; + rep = in.traverse(); + rep->attach(); + tmp->detach(); +} |