template void mergesort( Array-Type values, size_t size, size_t depth ); struct Msg : public uActor::SenderMsg { // derived message ... }; _Actor A { A * parent; uActor::Allocation receive( uActor::Message & msg ) { iftype( Msg, msg ) { parent = dynamic_cast(msg_d.sender()); // message sender, maybe nullptr ... } ... } 8 25 6 8 -5 99 100 101 7 3 1 -3 5 0 10 9 8 7 6 5 4 3 2 1 0 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 size_t times = sqrt( size ); for ( size_t counter = 0; counter < times; counter += 1 ) { swap( values[0], values[prng( size ) ] ); } // for uProcessor p[ (1 << depth) - 1 ] __attribute__(( unused )); // 2^depth-1 kernel threads uTime start = uClock::currTime(); mergesort( ... ); cout << "Sort time " << uClock::currTime() - start << " sec." << endl;