Merge two commits from movable-types-inputs

Performance optimisation for parameters passed by value that are C++11 movable.
  Test copy constructor and assignment operator calls for movable types

Conflicts:
	CHANGES.current
This commit is contained in:
William S Fulton 2022-07-12 09:48:17 +01:00
commit ea193a98f3
6 changed files with 53 additions and 3 deletions

View file

@ -27,6 +27,8 @@ struct MoveOnly {
static MoveOnly create() { return MoveOnly(111); }
// static const MoveOnly createConst() { return MoveOnly(111); } // not supported by default
// static void take(MoveOnly mo) { if (debug) cout << "take(MoveOnly)" << " " << &mo << endl; }
};
%}
@ -48,5 +50,7 @@ struct MovableCopyable {
static MovableCopyable create() { return MovableCopyable(111); }
static const MovableCopyable createConst() { return MovableCopyable(111); }
static void take(MovableCopyable mc) { if (debug) cout << "take(MovableCopyable)" << " " << &mc << endl; }
};
%}

View file

@ -4,6 +4,8 @@ using cpp11_move_onlyNamespace;
public class cpp11_move_only_runme {
public static void Main() {
// Output
Counter.reset_counts();
using (MoveOnly mo = MoveOnly.create()) {
}
@ -19,5 +21,14 @@ public class cpp11_move_only_runme {
using (MovableCopyable mo = MovableCopyable.createConst()) {
}
Counter.check_counts(2, 1, 1, 0, 0, 3);
// Input
Counter.reset_counts();
using (MovableCopyable mo = new MovableCopyable(222)) {
Counter.check_counts(1, 0, 0, 0, 0, 0);
MovableCopyable.take(mo);
Counter.check_counts(2, 0, 1, 1, 0, 2);
}
Counter.check_counts(2, 0, 1, 1, 0, 3);
}
}

View file

@ -14,6 +14,7 @@ public class cpp11_move_only_runme {
public static void main(String argv[]) {
// Output
{
Counter.reset_counts();
MoveOnly mo = MoveOnly.create();
@ -35,5 +36,16 @@ public class cpp11_move_only_runme {
mo.delete();
Counter.check_counts(2, 1, 1, 0, 0, 3);
}
// Input
{
Counter.reset_counts();
MovableCopyable mo = new MovableCopyable(222);
Counter.check_counts(1, 0, 0, 0, 0, 0);
MovableCopyable.take(mo);
Counter.check_counts(2, 0, 1, 1, 0, 2);
mo.delete();
Counter.check_counts(2, 0, 1, 1, 0, 3);
}
}
}

View file

@ -1,5 +1,6 @@
from cpp11_move_only import *
# Output
Counter.reset_counts()
mo = MoveOnly.create()
del mo
@ -15,3 +16,12 @@ Counter.reset_counts()
mo = MovableCopyable.createConst()
del mo
Counter.check_counts(2, 1, 1, 0, 0, 3)
# Input
Counter.reset_counts()
mo = MovableCopyable(222)
Counter.check_counts(1, 0, 0, 0, 0, 0)
MovableCopyable.take(mo)
Counter.check_counts(2, 0, 1, 1, 0, 2)
del mo
Counter.check_counts(2, 0, 1, 1, 0, 3)