pub struct RemappedNodes { /* private fields */ }
Expand description

Apply some other Pattern over a set of nodes whose indices have been remapped according to a Pattern-given permutation. A source x chooses as destination map(pattern(invmap(x))), where map is the given permutation, invmap its inverse and pattern is the underlying pattern to apply. In other words, if pattern(a)=b, then destination of map(a) is set to map(b). It can be seen as a Composition that manages building the inverse map.

Remapped nodes requires source and destination to be of the same size. The pattern creating the map is called once and must result in a permutation, as to be able to make its inverse.

For a similar operation on other types see RemappedServersTopology.

Example building a cycle in random order.

RemappedNodes{
	/// The underlying pattern to be used.
	pattern: Circulant{generators:[1]},
	/// The pattern defining the relabelling.
	map: RandomPermutation,
}

Trait Implementations§

source§

impl Debug for RemappedNodes

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Pattern for RemappedNodes

source§

fn initialize( &mut self, source_size: usize, target_size: usize, topology: &dyn Topology, rng: &mut StdRng )

Fix the input and output size, providing the topology and random number generator. Careful with using topology in sub-patterns. For example, it may be misleading to use the dragonfly topology when building a pattern among groups or a pattern among the routers of a single group. Even just a pattern of routers instead of a pattern of servers can lead to mistakes. Read the documentation of the traffic or meta-pattern using the pattern to know what its their input and output.
source§

fn get_destination( &self, origin: usize, topology: &dyn Topology, rng: &mut StdRng ) -> usize

Obtain a destination of a source. This will be called repeatedly as the traffic requires destination for its messages.
source§

impl Quantifiable for RemappedNodes

source§

fn total_memory(&self) -> usize

Get the total memory currently being employed by the implementing type. Both stack and heap.
source§

fn print_memory_breakdown(&self)

Prints by stdout how much memory is used per component.
source§

fn forecast_total_memory(&self) -> usize

Get an estimation on how much memory the type could reach during the simulation.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V