pub struct ExecutionRecord {Show 52 fields
pub program: Arc<Program>,
pub cpu_event_count: u32,
pub add_events: Vec<(AluEvent, RTypeRecord)>,
pub addw_events: Vec<(AluEvent, ALUTypeRecord)>,
pub addi_events: Vec<(AluEvent, ITypeRecord)>,
pub mul_events: Vec<(AluEvent, RTypeRecord)>,
pub sub_events: Vec<(AluEvent, RTypeRecord)>,
pub subw_events: Vec<(AluEvent, RTypeRecord)>,
pub bitwise_events: Vec<(AluEvent, ALUTypeRecord)>,
pub shift_left_events: Vec<(AluEvent, ALUTypeRecord)>,
pub shift_right_events: Vec<(AluEvent, ALUTypeRecord)>,
pub divrem_events: Vec<(AluEvent, RTypeRecord)>,
pub lt_events: Vec<(AluEvent, ALUTypeRecord)>,
pub memory_load_byte_events: Vec<(MemInstrEvent, ITypeRecord)>,
pub memory_load_half_events: Vec<(MemInstrEvent, ITypeRecord)>,
pub memory_load_word_events: Vec<(MemInstrEvent, ITypeRecord)>,
pub memory_load_x0_events: Vec<(MemInstrEvent, ITypeRecord)>,
pub memory_load_double_events: Vec<(MemInstrEvent, ITypeRecord)>,
pub memory_store_byte_events: Vec<(MemInstrEvent, ITypeRecord)>,
pub memory_store_half_events: Vec<(MemInstrEvent, ITypeRecord)>,
pub memory_store_word_events: Vec<(MemInstrEvent, ITypeRecord)>,
pub memory_store_double_events: Vec<(MemInstrEvent, ITypeRecord)>,
pub utype_events: Vec<(UTypeEvent, JTypeRecord)>,
pub branch_events: Vec<(BranchEvent, ITypeRecord)>,
pub jal_events: Vec<(JumpEvent, JTypeRecord)>,
pub jalr_events: Vec<(JumpEvent, ITypeRecord)>,
pub byte_lookups: HashMap<ByteLookupEvent, usize>,
pub precompile_events: PrecompileEvents,
pub global_memory_initialize_events: Vec<MemoryInitializeFinalizeEvent>,
pub global_memory_finalize_events: Vec<MemoryInitializeFinalizeEvent>,
pub global_page_prot_initialize_events: Vec<PageProtInitializeFinalizeEvent>,
pub global_page_prot_finalize_events: Vec<PageProtInitializeFinalizeEvent>,
pub cpu_local_memory_access: Vec<MemoryLocalEvent>,
pub cpu_local_page_prot_access: Vec<PageProtLocalEvent>,
pub syscall_events: Vec<(SyscallEvent, RTypeRecord)>,
pub global_interaction_events: Vec<GlobalInteractionEvent>,
pub instruction_fetch_events: Vec<(InstructionFetchEvent, MemoryAccessRecord)>,
pub instruction_decode_events: Vec<InstructionDecodeEvent>,
pub global_cumulative_sum: Arc<Mutex<SepticDigest<u32>>>,
pub global_interaction_event_count: u32,
pub bump_memory_events: Vec<(MemoryRecordEnum, u64, bool)>,
pub bump_state_events: Vec<(u64, u64, bool, u64)>,
pub public_values: PublicValues<u32, u64, u64, u32>,
pub next_nonce: u64,
pub shape: Option<Shape<RiscvAirId>>,
pub estimated_trace_area: u64,
pub initial_timestamp: u64,
pub last_timestamp: u64,
pub pc_start: Option<u64>,
pub next_pc: u64,
pub exit_code: u32,
pub global_dependencies_opt: bool,
}Expand description
A record of the execution of a program.
The trace of the execution is represented as a list of “events” that occur every cycle.
Fields§
§program: Arc<Program>The program.
cpu_event_count: u32The number of CPU related events.
add_events: Vec<(AluEvent, RTypeRecord)>A trace of the ADD, and ADDI events.
addw_events: Vec<(AluEvent, ALUTypeRecord)>A trace of the ADDW events.
addi_events: Vec<(AluEvent, ITypeRecord)>A trace of the ADDI events.
mul_events: Vec<(AluEvent, RTypeRecord)>A trace of the MUL events.
sub_events: Vec<(AluEvent, RTypeRecord)>A trace of the SUB events.
subw_events: Vec<(AluEvent, RTypeRecord)>A trace of the SUBW events.
bitwise_events: Vec<(AluEvent, ALUTypeRecord)>A trace of the XOR, XORI, OR, ORI, AND, and ANDI events.
shift_left_events: Vec<(AluEvent, ALUTypeRecord)>A trace of the SLL and SLLI events.
shift_right_events: Vec<(AluEvent, ALUTypeRecord)>A trace of the SRL, SRLI, SRA, and SRAI events.
divrem_events: Vec<(AluEvent, RTypeRecord)>A trace of the DIV, DIVU, REM, and REMU events.
lt_events: Vec<(AluEvent, ALUTypeRecord)>A trace of the SLT, SLTI, SLTU, and SLTIU events.
memory_load_byte_events: Vec<(MemInstrEvent, ITypeRecord)>A trace of load byte instructions.
memory_load_half_events: Vec<(MemInstrEvent, ITypeRecord)>A trace of load half instructions.
memory_load_word_events: Vec<(MemInstrEvent, ITypeRecord)>A trace of load word instructions.
memory_load_x0_events: Vec<(MemInstrEvent, ITypeRecord)>A trace of load instructions with op_a = x0.
memory_load_double_events: Vec<(MemInstrEvent, ITypeRecord)>A trace of load double instructions.
memory_store_byte_events: Vec<(MemInstrEvent, ITypeRecord)>A trace of store byte instructions.
memory_store_half_events: Vec<(MemInstrEvent, ITypeRecord)>A trace of store half instructions.
memory_store_word_events: Vec<(MemInstrEvent, ITypeRecord)>A trace of store word instructions.
memory_store_double_events: Vec<(MemInstrEvent, ITypeRecord)>A trace of store double instructions.
utype_events: Vec<(UTypeEvent, JTypeRecord)>A trace of the AUIPC and LUI events.
branch_events: Vec<(BranchEvent, ITypeRecord)>A trace of the branch events.
jal_events: Vec<(JumpEvent, JTypeRecord)>A trace of the JAL events.
jalr_events: Vec<(JumpEvent, ITypeRecord)>A trace of the JALR events.
byte_lookups: HashMap<ByteLookupEvent, usize>A trace of the byte lookups that are needed.
precompile_events: PrecompileEventsA trace of the precompile events.
global_memory_initialize_events: Vec<MemoryInitializeFinalizeEvent>A trace of the global memory initialize events.
global_memory_finalize_events: Vec<MemoryInitializeFinalizeEvent>A trace of the global memory finalize events.
global_page_prot_initialize_events: Vec<PageProtInitializeFinalizeEvent>A trace of the global page prot initialize events.
global_page_prot_finalize_events: Vec<PageProtInitializeFinalizeEvent>A trace of the global page prot finalize events.
cpu_local_memory_access: Vec<MemoryLocalEvent>A trace of all the shard’s local memory events.
cpu_local_page_prot_access: Vec<PageProtLocalEvent>A trace of all the local page prot events.
syscall_events: Vec<(SyscallEvent, RTypeRecord)>A trace of all the syscall events.
global_interaction_events: Vec<GlobalInteractionEvent>A trace of all the global interaction events.
instruction_fetch_events: Vec<(InstructionFetchEvent, MemoryAccessRecord)>A trace of all instruction fetch events.
instruction_decode_events: Vec<InstructionDecodeEvent>A trace of all instruction decode events.
global_cumulative_sum: Arc<Mutex<SepticDigest<u32>>>The global culmulative sum.
global_interaction_event_count: u32The global interaction event count.
bump_memory_events: Vec<(MemoryRecordEnum, u64, bool)>Memory records used to bump the timestamp of the register memory access.
bump_state_events: Vec<(u64, u64, bool, u64)>Record where the clk >> 24 or pc >> 16 has incremented.
public_values: PublicValues<u32, u64, u64, u32>The public values.
next_nonce: u64The next nonce to use for a new lookup.
shape: Option<Shape<RiscvAirId>>The shape of the proof.
estimated_trace_area: u64The estimated total trace area of the proof.
initial_timestamp: u64The initial timestamp of the shard.
last_timestamp: u64The final timestamp of the shard.
pc_start: Option<u64>The start program counter.
next_pc: u64The final program counter.
exit_code: u32The exit code.
global_dependencies_opt: boolUse optimized generate_dependencies for global chip.
Implementations§
Source§impl ExecutionRecord
impl ExecutionRecord
Sourcepub fn new(
program: Arc<Program>,
proof_nonce: [u32; 4],
global_dependencies_opt: bool,
) -> Self
pub fn new( program: Arc<Program>, proof_nonce: [u32; 4], global_dependencies_opt: bool, ) -> Self
Create a new ExecutionRecord.
Sourcepub fn new_preallocated(
program: Arc<Program>,
proof_nonce: [u32; 4],
global_dependencies_opt: bool,
reservation_size: usize,
) -> Self
pub fn new_preallocated( program: Arc<Program>, proof_nonce: [u32; 4], global_dependencies_opt: bool, reservation_size: usize, ) -> Self
Create a new ExecutionRecord with preallocated event vecs.
Sourcepub fn defer<'a>(
&mut self,
retain_presets: impl IntoIterator<Item = &'a RetainedEventsPreset>,
) -> ExecutionRecord
pub fn defer<'a>( &mut self, retain_presets: impl IntoIterator<Item = &'a RetainedEventsPreset>, ) -> ExecutionRecord
Take out events from the ExecutionRecord that should be deferred to a separate shard.
Note: we usually defer events that would increase the recursion cost significantly if included in every shard.
Sourcepub fn split(
&mut self,
done: bool,
last_record: &mut ExecutionRecord,
can_pack_global_memory: bool,
opts: &SplitOpts,
) -> Vec<ExecutionRecord>
pub fn split( &mut self, done: bool, last_record: &mut ExecutionRecord, can_pack_global_memory: bool, opts: &SplitOpts, ) -> Vec<ExecutionRecord>
Splits the deferred ExecutionRecord into multiple ExecutionRecords, each which
contain a “reasonable” number of deferred events.
Sourcepub fn fixed_log2_rows<F: PrimeField, A: MachineAir<F>>(
&self,
_air: &A,
) -> Option<usize>
pub fn fixed_log2_rows<F: PrimeField, A: MachineAir<F>>( &self, _air: &A, ) -> Option<usize>
Return the number of rows needed for a chip, according to the proof shape specified in the struct.
deprecated: TODO: remove this method.
Sourcepub fn contains_cpu(&self) -> bool
pub fn contains_cpu(&self) -> bool
Determines whether the execution record contains CPU events.
Sourcepub fn add_precompile_event(
&mut self,
syscall_code: SyscallCode,
syscall_event: SyscallEvent,
event: PrecompileEvent,
)
pub fn add_precompile_event( &mut self, syscall_code: SyscallCode, syscall_event: SyscallEvent, event: PrecompileEvent, )
Add a precompile event to the execution record.
Sourcepub fn get_precompile_events(
&self,
syscall_code: SyscallCode,
) -> &Vec<(SyscallEvent, PrecompileEvent)>
pub fn get_precompile_events( &self, syscall_code: SyscallCode, ) -> &Vec<(SyscallEvent, PrecompileEvent)>
Get all the precompile events for a syscall code.
Sourcepub fn get_local_mem_events(&self) -> impl Iterator<Item = &MemoryLocalEvent>
pub fn get_local_mem_events(&self) -> impl Iterator<Item = &MemoryLocalEvent>
Get all the local memory events.
Sourcepub fn get_local_page_prot_events(
&self,
) -> impl Iterator<Item = &PageProtLocalEvent>
pub fn get_local_page_prot_events( &self, ) -> impl Iterator<Item = &PageProtLocalEvent>
Get all the local page prot events.
Source§impl ExecutionRecord
impl ExecutionRecord
Sourcepub fn finalize_public_values<F: PrimeField32>(
&mut self,
is_execution_shard: bool,
)
pub fn finalize_public_values<F: PrimeField32>( &mut self, is_execution_shard: bool, )
Finalize the public values.
Trait Implementations§
Source§impl ByteRecord for ExecutionRecord
impl ByteRecord for ExecutionRecord
Source§fn add_byte_lookup_event(&mut self, blu_event: ByteLookupEvent)
fn add_byte_lookup_event(&mut self, blu_event: ByteLookupEvent)
ByteLookupEvent to the record.Source§fn add_byte_lookup_events_from_maps(
&mut self,
new_events: Vec<&HashMap<ByteLookupEvent, usize>>,
)
fn add_byte_lookup_events_from_maps( &mut self, new_events: Vec<&HashMap<ByteLookupEvent, usize>>, )
ByteLookupEvent maps to the record.Source§fn add_byte_lookup_events(&mut self, blu_events: Vec<ByteLookupEvent>)
fn add_byte_lookup_events(&mut self, blu_events: Vec<ByteLookupEvent>)
ByteLookupEvents to the record.Source§fn add_u8_range_check(&mut self, a: u8, b: u8)
fn add_u8_range_check(&mut self, a: u8, b: u8)
ByteLookupEvent to verify a and b are indeed bytes to the shard.Source§fn add_u16_range_check(&mut self, a: u16)
fn add_u16_range_check(&mut self, a: u16)
ByteLookupEvent to verify a is indeed u16.Source§fn add_bit_range_check(&mut self, a: u16, b: u8)
fn add_bit_range_check(&mut self, a: u16, b: u8)
ByteLookupEvent to verify a is less than 2^b.Source§fn add_u8_range_checks(&mut self, bytes: &[u8])
fn add_u8_range_checks(&mut self, bytes: &[u8])
ByteLookupEvents to verify that all the bytes in the input slice are indeed bytes.Source§fn add_u8_range_checks_field<F: PrimeField32>(&mut self, field_values: &[F])
fn add_u8_range_checks_field<F: PrimeField32>(&mut self, field_values: &[F])
ByteLookupEvents to verify that all the field elements in the input slice are indeed
bytes.Source§fn add_u16_range_checks(&mut self, ls: &[u16])
fn add_u16_range_checks(&mut self, ls: &[u16])
ByteLookupEvents to verify that all the bytes in the input slice are indeed u16s.Source§fn add_u16_range_checks_field<F: PrimeField32>(&mut self, field_values: &[F])
fn add_u16_range_checks_field<F: PrimeField32>(&mut self, field_values: &[F])
ByteLookupEvents to verify that all the field elements in the input slice are indeed
u16 values.Source§impl Clone for ExecutionRecord
impl Clone for ExecutionRecord
Source§fn clone(&self) -> ExecutionRecord
fn clone(&self) -> ExecutionRecord
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ExecutionRecord
impl Debug for ExecutionRecord
Source§impl DeepSizeOf for ExecutionRecord
impl DeepSizeOf for ExecutionRecord
Source§fn deep_size_of_children(&self, context: &mut Context) -> usize
fn deep_size_of_children(&self, context: &mut Context) -> usize
Source§fn deep_size_of(&self) -> usize
fn deep_size_of(&self) -> usize
Source§impl Default for ExecutionRecord
impl Default for ExecutionRecord
Source§fn default() -> ExecutionRecord
fn default() -> ExecutionRecord
Source§impl<'de> Deserialize<'de> for ExecutionRecord
impl<'de> Deserialize<'de> for ExecutionRecord
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl MachineRecord for ExecutionRecord
impl MachineRecord for ExecutionRecord
Source§fn public_values<F: AbstractField>(&self) -> Vec<F>
fn public_values<F: AbstractField>(&self) -> Vec<F>
Retrieves the public values. This method is needed for the MachineRecord trait, since
Source§fn eval_public_values<AB: SP1AirBuilder>(builder: &mut AB)
fn eval_public_values<AB: SP1AirBuilder>(builder: &mut AB)
Constrains the public values.
Source§fn append(&mut self, other: &mut ExecutionRecord)
fn append(&mut self, other: &mut ExecutionRecord)
Source§fn interactions_in_public_values() -> Vec<InteractionKind>
fn interactions_in_public_values() -> Vec<InteractionKind>
eval_public_values. Needed so that the shard verifier
knows how much randomness to allocate for the LogUpGkr beta_seed challenge.Auto Trait Implementations§
impl Freeze for ExecutionRecord
impl RefUnwindSafe for ExecutionRecord
impl Send for ExecutionRecord
impl Sync for ExecutionRecord
impl Unpin for ExecutionRecord
impl UnwindSafe for ExecutionRecord
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<Challenger, A> FromChallenger<Challenger, A> for Challengerwhere
Challenger: Clone,
impl<Challenger, A> FromChallenger<Challenger, A> for Challengerwhere
Challenger: Clone,
fn from_challenger(challenger: &Challenger, _backend: &A) -> Challenger
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.