Skip to content

Commit 2b0f5bb

Browse files
committed
Add wrappers.
1 parent f369cd1 commit 2b0f5bb

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

chalk-ir/src/lib.rs

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1490,6 +1490,107 @@ impl<I: Interner> ProgramClauses<I> {
14901490
}
14911491
}
14921492

1493+
#[derive(Clone, PartialEq, Eq, Hash, PartialOrd, Ord, HasInterner)]
1494+
pub struct ParameterKinds<I: Interner> {
1495+
interned: I::InternedParameterKinds,
1496+
}
1497+
1498+
impl<I: Interner> ParameterKinds<I> {
1499+
pub fn new(interner: &I) -> Self {
1500+
Self::from(interner, None::<ParameterKind<()>>)
1501+
}
1502+
1503+
pub fn interned(&self) -> &I::InternedParameterKinds {
1504+
&self.interned
1505+
}
1506+
1507+
pub fn from(
1508+
interner: &I,
1509+
parameter_kinds: impl IntoIterator<Item = ParameterKind<()>>,
1510+
) -> Self {
1511+
ParameterKinds {
1512+
interned: I::intern_parameter_kinds(interner, parameter_kinds.into_iter()),
1513+
}
1514+
}
1515+
1516+
pub fn from_fallible<E>(
1517+
interner: &I,
1518+
parameter_kinds: impl IntoIterator<Item = Result<ParameterKind<()>, E>>,
1519+
) -> Result<Self, E> {
1520+
let parameter_kinds = parameter_kinds
1521+
.into_iter()
1522+
.collect::<Result<Vec<ParameterKind<()>>, _>>()?;
1523+
Ok(Self::from(interner, parameter_kinds))
1524+
}
1525+
1526+
pub fn iter(&self, interner: &I) -> std::slice::Iter<'_, ParameterKind<()>> {
1527+
self.as_slice(interner).iter()
1528+
}
1529+
1530+
pub fn is_empty(&self, interner: &I) -> bool {
1531+
self.as_slice(interner).is_empty()
1532+
}
1533+
1534+
pub fn len(&self, interner: &I) -> usize {
1535+
self.as_slice(interner).len()
1536+
}
1537+
1538+
pub fn as_slice(&self, interner: &I) -> &[ParameterKind<()>] {
1539+
interner.parameter_kinds_data(&self.interned)
1540+
}
1541+
}
1542+
1543+
#[derive(Clone, PartialEq, Eq, Hash, PartialOrd, Ord, HasInterner)]
1544+
pub struct ParameterKindsWithUniverseIndex<I: Interner> {
1545+
interned: I::InternedParameterKindsWithUniverseIndex,
1546+
}
1547+
1548+
impl<I: Interner> ParameterKindsWithUniverseIndex<I> {
1549+
pub fn new(interner: &I) -> Self {
1550+
Self::from(interner, None::<ParameterKind<UniverseIndex>>)
1551+
}
1552+
1553+
pub fn interned(&self) -> &I::InternedParameterKindsWithUniverseIndex {
1554+
&self.interned
1555+
}
1556+
1557+
pub fn from(
1558+
interner: &I,
1559+
parameter_kinds: impl IntoIterator<Item = ParameterKind<UniverseIndex>>,
1560+
) -> Self {
1561+
ParameterKindsWithUniverseIndex {
1562+
interned: I::intern_parameter_kinds_with_universe_index(interner, parameter_kinds.into_iter()),
1563+
}
1564+
}
1565+
1566+
pub fn from_fallible<E>(
1567+
interner: &I,
1568+
parameter_kinds: impl IntoIterator<Item = Result<ParameterKind<UniverseIndex>, E>>,
1569+
) -> Result<Self, E> {
1570+
let parameter_kinds = parameter_kinds
1571+
.into_iter()
1572+
.collect::<Result<Vec<ParameterKind<UniverseIndex>>, _>>()?;
1573+
Ok(Self::from(interner, parameter_kinds))
1574+
}
1575+
1576+
pub fn iter(&self, interner: &I) -> std::slice::Iter<'_, ParameterKind<UniverseIndex>> {
1577+
self.as_slice(interner).iter()
1578+
}
1579+
1580+
pub fn is_empty(&self, interner: &I) -> bool {
1581+
self.as_slice(interner).is_empty()
1582+
}
1583+
1584+
pub fn len(&self, interner: &I) -> usize {
1585+
self.as_slice(interner).len()
1586+
}
1587+
1588+
pub fn as_slice(&self, interner: &I) -> &[ParameterKind<UniverseIndex>] {
1589+
interner.parameter_kinds_with_universe_index_data(&self.interned)
1590+
}
1591+
}
1592+
1593+
14931594
/// Wraps a "canonicalized item". Items are canonicalized as follows:
14941595
///
14951596
/// All unresolved existential variables are "renumbered" according to their

0 commit comments

Comments
 (0)