pub struct Pool<VS: VersionSet, N: PackageName = String> { /* private fields */ }Expand description
A pool stores and internalizes data related to the available packages.
A pool never releases its memory until it is dropped. References returned by
the pool will remain valid for the lifetime of the pool. This allows
inserting into the pool without requiring a mutable reference to the pool.
This is what we refer to as Frozen data can be added but old data can
never be removed or mutated.
Implementations§
Source§impl<VS: VersionSet, N: PackageName> Pool<VS, N>
impl<VS: VersionSet, N: PackageName> Pool<VS, N>
Sourcepub fn intern_string(&self, name: impl Into<String> + AsRef<str>) -> StringId
pub fn intern_string(&self, name: impl Into<String> + AsRef<str>) -> StringId
Interns a generic string into the Pool and returns its StringId.
Strings are deduplicated.
Sourcepub fn resolve_string(&self, string_id: StringId) -> &str
pub fn resolve_string(&self, string_id: StringId) -> &str
Returns the string associated with the provided StringId.
Panics if the string is not found in the pool.
Sourcepub fn intern_package_name<NValue>(&self, name: NValue) -> NameId
pub fn intern_package_name<NValue>(&self, name: NValue) -> NameId
Interns a package name into the Pool, returning its NameId. Names
are deduplicated. If the same name is inserted twice the same
NameId will be returned.
The original name can be resolved using the
Self::resolve_package_name function.
Sourcepub fn resolve_package_name(&self, name_id: NameId) -> &N
pub fn resolve_package_name(&self, name_id: NameId) -> &N
Returns the package name associated with the provided NameId.
Panics if the package name is not found in the pool.
Sourcepub fn lookup_package_name(&self, name: &N) -> Option<NameId>
pub fn lookup_package_name(&self, name: &N) -> Option<NameId>
Returns the NameId associated with the specified name or None if
the name has not previously been interned using
Self::intern_package_name.
Sourcepub fn intern_solvable(&self, name_id: NameId, record: VS::V) -> SolvableId
pub fn intern_solvable(&self, name_id: NameId, record: VS::V) -> SolvableId
Adds a solvable to a repo and returns it’s SolvableId.
Unlike some of the other interning functions this function does not deduplicate any of the inserted elements. A unique Id will be returned everytime this function is called.
Sourcepub fn resolve_solvable(&self, id: SolvableId) -> &Solvable<VS::V>
pub fn resolve_solvable(&self, id: SolvableId) -> &Solvable<VS::V>
Returns the solvable associated to the provided id
Panics if the solvable is not found in the pool
Sourcepub fn intern_version_set(
&self,
package_name: NameId,
version_set: VS,
) -> VersionSetId
pub fn intern_version_set( &self, package_name: NameId, version_set: VS, ) -> VersionSetId
Interns a version set into the Pool, returning its VersionSetId.
The returned VersionSetId can be used to retrieve a reference to
the original version set using [Self::resolve_version-set].
A version set is always associated with a specific package name to which
it applies. The passed in package name can be retrieved using
Self::resolve_version_set_package_name.
Version sets are deduplicated. This means that if the same version set
is inserted twice they will share the same VersionSetId.
Sourcepub fn resolve_version_set(&self, id: VersionSetId) -> &VS
pub fn resolve_version_set(&self, id: VersionSetId) -> &VS
Returns the version set associated with the provided id
Panics if the version set is not found in the pool
Sourcepub fn resolve_version_set_package_name(&self, id: VersionSetId) -> NameId
pub fn resolve_version_set_package_name(&self, id: VersionSetId) -> NameId
Returns the package name associated with the provide id.
Panics if the version set is not found in the pool
Sourcepub fn intern_version_set_union(
&self,
first: VersionSetId,
others: impl Iterator<Item = VersionSetId>,
) -> VersionSetUnionId
pub fn intern_version_set_union( &self, first: VersionSetId, others: impl Iterator<Item = VersionSetId>, ) -> VersionSetUnionId
Interns a union of two or more version sets and returns its
VersionSetUnionId.
Version set unions are not deduplicated, and a unique id is returned on every invocation.
Sourcepub fn resolve_version_set_union(
&self,
id: VersionSetUnionId,
) -> impl Iterator<Item = VersionSetId> + '_
pub fn resolve_version_set_union( &self, id: VersionSetUnionId, ) -> impl Iterator<Item = VersionSetId> + '_
Returns the version sets in the version set union with the given id.
Panics if there is no union with the given id.
Sourcepub fn resolve_condition(&self, id: ConditionId) -> &Condition
pub fn resolve_condition(&self, id: ConditionId) -> &Condition
Resolve the condition associated with the provided id.
Sourcepub fn intern_condition(&self, condition: Condition) -> ConditionId
pub fn intern_condition(&self, condition: Condition) -> ConditionId
Interns a condition into the pool and returns its ConditionId.
Conditions are deduplicated, so if the same condition is inserted
twice the same ConditionId will be returned.
Trait Implementations§
Source§impl<VS: VersionSet, N: PackageName> Default for Pool<VS, N>
impl<VS: VersionSet, N: PackageName> Default for Pool<VS, N>
Auto Trait Implementations§
impl<VS, N = String> !Freeze for Pool<VS, N>
impl<VS, N = String> !RefUnwindSafe for Pool<VS, N>
impl<VS, N> Send for Pool<VS, N>
impl<VS, N = String> !Sync for Pool<VS, N>
impl<VS, N> Unpin for Pool<VS, N>
impl<VS, N> UnwindSafe for Pool<VS, N>
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> 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<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> 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.