fn take_virtual_oracle(&mut self, round: MsgRoundRef) -> (VirtualOracleVarWithInfo<F>, Self) {
        assert!(round.is_virtual);

        // move a virtual oracle, and make it temporarily available when querying to
        // prevent circular dependency
        let virtual_round = ark_std::mem::take(
            self.virtual_oracles
                .get_mut(round.index)
                .expect("round out of range"),
        )
        .expect("Virtual oracle contains circular query: For example, A -> B -> C -> A");

        // construct a shadow MessageCollection to query the virtual oracle.
        let shadow_self = Self {
            bookkeeper: self.bookkeeper.clone(),
            real_oracles: ark_std::mem::take(&mut self.real_oracles),
            virtual_oracles: ark_std::mem::take(&mut self.virtual_oracles),
            verifier_messages: ark_std::mem::take(&mut self.verifier_messages),
        };

        (virtual_round, shadow_self)
    }
/// Take a virtual oracle and return a shadow `self` that can be used by
/// virtual oracle. Current `self` will be temporarily unavailable when
/// querying to prevent circular dependency.
Take a virtual oracle and return a shadow `self` that can be used by
virtual oracle. Current `self` will be temporarily unavailable when
querying to prevent circular dependency.
Take a virtual oracle and return a shadow ` self ` that can be used by virtual oracle . Current ` self ` will be temporarily unavailable when querying to prevent circular dependency .
fn take_virtual_oracle(&mut self, round: MsgRoundRef) -> (VirtualOracleVarWithInfo<F>, Self) {
        assert!(round.is_virtual);
        // move a virtual oracle, and make it temporarily available when querying to
        // prevent circular dependency
        let virtual_round = ark_std::mem::take(
            self.virtual_oracles
                .get_mut(round.index)
                .expect("round out of range"),
        )
        .expect("Virtual oracle contains circular query: For example, A -> B -> C -> A");
        // construct a shadow MessageCollection to query the virtual oracle.
        let shadow_self = Self {
            bookkeeper: self.bookkeeper.clone(),
            real_oracles: ark_std::mem::take(&mut self.real_oracles),
            virtual_oracles: ark_std::mem::take(&mut self.virtual_oracles),
            verifier_messages: ark_std::mem::take(&mut self.verifier_messages),
        };
        (virtual_round, shadow_self)
    }
fn take_virtual_oracle ( & mut self , round : MsgRoundRef ) -> ( VirtualOracleVarWithInfo < F > , Self ) { assert ! ( round is_virtual ) ; // move a virtual oracle, and make it temporarily available when querying to // prevent circular dependency let virtual_round = ark_std :: mem :: take ( self . virtual_oracles . get_mut ( round . index ) . expect ( " " ) , ) . expect ( " " ) ; // construct a shadow MessageCollection to query the virtual oracle. let shadow_self = Self { bookkeeper : self . bookkeeper . clone ( ) , real_oracles : ark_std :: mem :: take ( & mut self . real_oracles ) , virtual_oracles : ark_std :: mem :: take ( & mut self . virtual_oracles ) , verifier_messages : ark_std :: mem :: take ( & mut self . verifier_messages ) , } ; ( virtual_round , shadow_self ) }
Take a virtual oracle and return a shadow `self` that can be used by
virtual oracle.
Take a virtual oracle and return a shadow ` self ` that can be used by virtual oracle .
&mut self
round
MsgRoundRef
&mut self
round
MsgRoundRef