aboutsummaryrefslogtreecommitdiff
path: root/xsde/cxx/hybrid/tree-inline.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2009-03-11 17:32:01 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2009-03-11 17:32:01 +0200
commit0bfda486167432a9da8eec62b4578a22592a9275 (patch)
tree968d622d3918c9ac969de8b9c1e97e67b6cbee8b /xsde/cxx/hybrid/tree-inline.cxx
parentf8bb2faef4b272ed150eb3ca4cedaa79da410694 (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.cxx128
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;"
+ << "}";
+ }
}
}
};