Browse Source

Merge pull request #8558 from garonsky/add_move_2

HPCC-15451 - Add c++11 move semantics

Reviewed-by: Gavin Halliday <ghalliday@hpccsystems.com>
Gavin Halliday 9 năm trước cách đây
mục cha
commit
b8c8fb31ad
2 tập tin đã thay đổi với 31 bổ sung0 xóa
  1. 26 0
      system/jlib/jstring.cpp
  2. 5 0
      system/jlib/jstring.hpp

+ 26 - 0
system/jlib/jstring.cpp

@@ -93,6 +93,12 @@ StringBuffer::StringBuffer(const StringBuffer & value)
     append(value);
 }
 
+StringBuffer::StringBuffer(StringBuffer && value)
+{
+    init();
+    swapWith(value);
+}
+
 StringBuffer::StringBuffer(bool useInternal)
 {
     if (useInternal)
@@ -1281,6 +1287,20 @@ StringAttr::StringAttr(const StringAttr & src)
     set(src.get());
 }
 
+StringAttr::StringAttr(StringAttr && src)
+{
+    text = src.text;
+    src.text = nullptr;
+}
+
+StringAttr& StringAttr::operator = (StringAttr && from)
+{
+    char *temp = text;
+    text = from.text;
+    from.text = temp;
+    return *this;
+}
+
 void StringAttr::set(const char * _text)
 {
     free(text);
@@ -2482,3 +2502,9 @@ const char * nullText(const char * text)
     if (text) return text;
     return "(null)";
 }
+
+StringBuffer& StringBuffer::operator=(StringBuffer&& value)
+{
+    swapWith(value);
+    return *this;
+}

+ 5 - 0
system/jlib/jstring.hpp

@@ -38,6 +38,7 @@ public:
     StringBuffer();
     StringBuffer(String & value);
     StringBuffer(const char *value);
+    StringBuffer(StringBuffer && value);
     StringBuffer(unsigned len, const char *value);
     StringBuffer(const StringBuffer & value);
     StringBuffer(bool useInternal);
@@ -131,6 +132,7 @@ public:
     {
         return clear().append(value.str());
     }
+    StringBuffer& operator=(StringBuffer&& value);
 
     StringBuffer &  appendlong(long value);
     StringBuffer &  appendulong(unsigned long value);
@@ -180,6 +182,7 @@ public:
 
     virtual const char * str() const { return s.str(); };
     virtual void set(const char *val) { s.clear().append(val); };
+    virtual void set(StringBuffer &&str) { s.swapWith(str); }
     virtual void clear() { s.clear(); };
     virtual void setLen(const char *val, unsigned length) { s.clear().append(length, val); };
     virtual unsigned length() const { return s.length(); };
@@ -249,6 +252,8 @@ public:
     StringAttr(const char * _text, unsigned _len);
     StringAttr(const char * _text);
     StringAttr(const StringAttr & src);
+    StringAttr(StringAttr && src);
+    StringAttr& operator = (StringAttr && from);
     inline ~StringAttr(void) { free(text); }
     
     inline operator const char * () const       { return text; }