Start moving away from the Java-like containers.
Some checks failed
CI / ubuntu-latest-html-tests (push) Has been cancelled
CI / alpine-mbedtls-3_6_0 (push) Has been cancelled
CI / ubuntu-latest-no-tls (push) Has been cancelled
CI / ubuntu-latest-mbedtls2 (push) Has been cancelled
CI / ubuntu-latest-openssl-3 (push) Has been cancelled
CI / ubuntu-latest-with-old-std (push) Has been cancelled
CI / ubuntu-20-04-openssl-1-1 (push) Has been cancelled
CI / macOS-13-openssl-1-1 (push) Has been cancelled
CI / macOS-13-openssl-3 (push) Has been cancelled
CI / freebsd-14-openssl-3 (push) Has been cancelled
CI / windows-mbedtls (push) Has been cancelled

This commit is contained in:
2025-08-06 03:16:31 -04:00
parent af0c428934
commit 23f82a705c
3 changed files with 45 additions and 26 deletions

View File

@ -30,30 +30,27 @@ using namespace container::typed;
// Emitter
// ------------
Emitter::Emitter ()
{
receivers = new List <Receiver> (false);
}
Emitter::Emitter()= default;
Emitter::~Emitter ()
{
for (Iterator<Receiver> it = receivers->iterator (); it.hasNext (); ) {
Receiver *receiver = it.getNext ();
receiver->unconnectFrom (this);
// TODO: RAII this?
for( Receiver *receiver: receivers )
{
receiver->unconnectFrom( this );
}
delete receivers;
}
void Emitter::intoStringBuffer(misc::StringBuffer *sb)
{
sb->append ("<emitter: ");
receivers->intoStringBuffer (sb);
container::intoStringBuffer( receivers, sb );
sb->append (">");
}
void Emitter::unconnect (Receiver *receiver)
{
receivers->removeRef (receiver);
receivers.remove( receiver );
}
/**
@ -64,7 +61,7 @@ void Emitter::unconnect (Receiver *receiver)
*/
void Emitter::connect (Receiver *receiver)
{
receivers->append (receiver);
receivers.push_back( receiver );
receiver->connectTo (this);
}
@ -76,8 +73,8 @@ void Emitter::connect (Receiver *receiver)
*/
void Emitter::emitVoid (int signalNo, int argc, Object **argv)
{
for (Iterator <Receiver> it = receivers->iterator (); it.hasNext (); ) {
Receiver *receiver = it.getNext();
for( Receiver *receiver: receivers )
{
emitToReceiver (receiver, signalNo, argc, argv);
}
}
@ -92,8 +89,8 @@ bool Emitter::emitBool (int signalNo, int argc, Object **argv)
{
bool b = false, bt;
for (Iterator <Receiver> it = receivers->iterator (); it.hasNext (); ) {
Receiver *receiver = it.getNext();
for( Receiver *receiver: receivers )
{
// Note: All receivers are called, even if one returns true.
// Therefore, something like
// b = b || emitToReceiver (receiver, signalNo, argc, argv);
@ -110,18 +107,14 @@ bool Emitter::emitBool (int signalNo, int argc, Object **argv)
// Receiver
// --------------
Receiver::Receiver()
{
emitters = new List <Emitter> (false);
}
Receiver::Receiver()= default;
Receiver::~Receiver()
{
for (Iterator<Emitter> it = emitters->iterator(); it.hasNext(); ) {
Emitter *emitter = it.getNext();
for( Emitter *emitter: emitters )
{
emitter->unconnect (this);
}
delete emitters;
}
void Receiver::intoStringBuffer(misc::StringBuffer *sb)
@ -132,12 +125,12 @@ void Receiver::intoStringBuffer(misc::StringBuffer *sb)
void Receiver::connectTo(Emitter *emitter)
{
emitters->append (emitter);
emitters.push_back( emitter );
}
void Receiver::unconnectFrom(Emitter *emitter)
{
emitters->removeRef (emitter);
emitters.remove( emitter);
}
// ------------------------