diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2009-03-11 17:32:01 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2009-03-11 17:32:01 +0200 |
commit | 0bfda486167432a9da8eec62b4578a22592a9275 (patch) | |
tree | 968d622d3918c9ac969de8b9c1e97e67b6cbee8b /xsde/cxx/hybrid/tree-inline.cxx | |
parent | f8bb2faef4b272ed150eb3ca4cedaa79da410694 (diff) |
Add generation of detach functions
New option: --generate-detach. Also added detach/attach functionality
to var_seq, non-STL str_seq, and string_base.
Diffstat (limited to 'xsde/cxx/hybrid/tree-inline.cxx')
-rw-r--r-- | xsde/cxx/hybrid/tree-inline.cxx | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/xsde/cxx/hybrid/tree-inline.cxx b/xsde/cxx/hybrid/tree-inline.cxx index 72d2d8f..34d0cc3 100644 --- a/xsde/cxx/hybrid/tree-inline.cxx +++ b/xsde/cxx/hybrid/tree-inline.cxx @@ -177,6 +177,21 @@ namespace CXX << "delete[] this->" << member << ";" << "this->" << member << " = x;" << "}"; + + // char* + // detach () + // + if (detach) + { + os << inl + << "char* " << name << "::" << endl + << uc.get<String> ("value-detach") << " ()" + << "{" + << "char* r = this->" << member << ";" + << "this->" << member << " = 0;" + << "return r;" + << "}"; + } } // Custom data. @@ -326,6 +341,24 @@ namespace CXX os << "this->" << epresent_member (a) << " = true;"; os << "}"; + + + // type* + // detach () + // + if (detach && !fl) + { + os << inl; + arg_.dispatch (t); + os << " " << scope << "::" << endl + << edetach (a) << " ()" + << "{"; + arg_.dispatch (t); + os << " r = this->" << member << ";" + << "this->" << member << " = 0;" + << "return r;" + << "}"; + } } private: @@ -475,6 +508,23 @@ namespace CXX os << "this->" << epresent_member (e) << " = true;"; os << "}"; + + // type* + // detach () + // + if (detach && !fl) + { + os << inl; + arg_.dispatch (t); + os << " " << scope << "::" << endl + << edetach (e) << " ()" + << "{"; + arg_.dispatch (t); + os << " r = this->" << member << ";" + << "this->" << member << " = 0;" + << "return r;" + << "}"; + } } } @@ -691,6 +741,23 @@ namespace CXX } os << "}"; + + // type* + // detach () + // + if (detach && !fl) + { + os << inl; + arg_.dispatch (t); + os << " " << scope << "::" << endl + << edetach (e) << " ()" + << "{"; + arg_.dispatch (t); + os << " r = this->" << umember << "." << member << ";" + << "this->" << umember << "." << member << " = 0;" + << "return r;" + << "}"; + } } } @@ -822,6 +889,21 @@ namespace CXX os << "this->" << epresent_member (a) << " = true;"; os << "}"; + + // type* + // detach () + // + if (detach && !fl) + { + os << inl + << type << "* " << scope << "::" << endl + << edetach (a) << " ()" + << "{" + << type << "* r = this->" << member << ";" + << "this->" << member << " = 0;" + << "return r;" + << "}"; + } } else All::contains (a); @@ -989,6 +1071,21 @@ namespace CXX os << "this->" << epresent_member (c) << " = true;"; os << "}"; + + // type* + // detach () + // + if (detach && !fl) + { + os << inl + << type << "* " << scope << "::" << endl + << edetach (c) << " ()" + << "{" + << type << "* r = this->" << member << ";" + << "this->" << member << " = 0;" + << "return r;" + << "}"; + } } } }; @@ -1142,6 +1239,21 @@ namespace CXX os << "this->" << epresent_member (s) << " = true;"; os << "}"; + + // type* + // detach () + // + if (detach && !fl) + { + os << inl + << type << "* " << scope << "::" << endl + << edetach (s) << " ()" + << "{" + << type << "* r = this->" << member << ";" + << "this->" << member << " = 0;" + << "return r;" + << "}"; + } } } }; @@ -1331,6 +1443,22 @@ namespace CXX } os << "}"; + + + // type* + // detach () + // + if (detach && !fl) + { + os << inl + << type << "* " << scope << "::" << endl + << edetach (c) << " ()" + << "{" + << type << "* r = this->" << umember << "." << member << ";" + << "this->" << umember << "." << member << " = 0;" + << "return r;" + << "}"; + } } } }; |