Ignore:
Timestamp:
Jun 20, 2023, 2:14:11 PM (13 months ago)
Author:
caparsons <caparson@…>
Branches:
master
Children:
d10e391
Parents:
1e538fb
Message:

refactored actors to not need base pointers in envelopes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/actor.hfa

    r1e538fb rb065dbb  
    4646enum allocation { Nodelete, Delete, Destroy, Finished }; // allocation status
    4747
    48 typedef allocation (*__receive_fn)(actor &, message &);
     48typedef allocation (*__receive_fn)(actor &, message &, actor **, message **);
    4949struct request {
    50     actor * base_receiver;
    5150    actor * receiver;
    52     message * base_msg;
    5351    message * msg;
    5452    __receive_fn fn;
     
    5957};
    6058static inline void ?{}( request & this ) {}
    61 static inline void ?{}( request & this, actor * base_receiver, actor * receiver, message * base_msg, message * msg, __receive_fn fn ) {
    62     this.base_receiver = base_receiver;
     59static inline void ?{}( request & this, actor * receiver, message * msg, __receive_fn fn ) {
    6360    this.receiver = receiver;
    64     this.base_msg = base_msg;
    6561    this.msg = msg;
    6662    this.fn = fn;
     
    460456static inline void deliver_request( request & this ) {
    461457    DEBUG_ABORT( this.receiver->ticket == (unsigned long int)MAX, "Attempted to send message to deleted/dead actor\n" );
    462     this.base_receiver->allocation_ = this.fn( *this.receiver, *this.msg );
    463     check_message( *this.base_msg );
    464     check_actor( *this.base_receiver );
     458    actor * base_actor;
     459    message * base_msg;
     460    allocation temp = this.fn( *this.receiver, *this.msg, &base_actor, &base_msg );
     461    base_actor->allocation_ = temp;
     462    check_message( *base_msg );
     463    check_actor( *base_actor );
    465464}
    466465
Note: See TracChangeset for help on using the changeset viewer.