use std::fmt;
#[derive(Clone, Copy, Hash, PartialEq, Eq, Ord, PartialOrd)]
pub(crate) struct AtomSignature {
is_positive: bool,
rhs_id: usize,
}
impl AtomSignature {
#[inline]
pub(crate) fn new(is_positive: bool, rhs_id: usize) -> Self {
Self {
is_positive,
rhs_id,
}
}
#[inline]
pub(crate) fn is_positive(&self) -> bool {
self.is_positive
}
#[inline]
pub(crate) fn rhs_id(&self) -> usize {
self.rhs_id
}
}
impl fmt::Display for AtomSignature {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"{}{}",
if self.is_positive { "" } else { "!" },
self.rhs_id
)
}
}
impl fmt::Debug for AtomSignature {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::Display::fmt(self, f)
}
}
#[derive(Clone, Copy, Hash, PartialEq, Eq)]
pub(crate) struct AtomArgumentSignature {
atom_signature: AtomSignature,
argument_id: usize,
}
impl AtomArgumentSignature {
#[inline]
pub(crate) fn new(atom_signature: AtomSignature, argument_id: usize) -> Self {
Self {
atom_signature,
argument_id,
}
}
#[inline]
pub(crate) fn is_positive(&self) -> bool {
self.atom_signature.is_positive()
}
#[inline]
pub(crate) fn atom_signature(&self) -> &AtomSignature {
&self.atom_signature
}
#[inline]
pub(crate) fn argument_id(&self) -> usize {
self.argument_id
}
}
impl fmt::Display for AtomArgumentSignature {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}.{}", self.atom_signature, self.argument_id)
}
}
impl fmt::Debug for AtomArgumentSignature {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::Display::fmt(self, f)
}
}