use crate::{db::ClauseKey, types::err};
use super::{db_clause::dbClause, ClauseDB};
impl ClauseDB {
pub fn get(&self, key: &ClauseKey) -> Result<&dbClause, err::ClauseDBError> {
match key {
ClauseKey::OriginalUnit(_) => Err(err::ClauseDBError::GetOriginalUnitKey),
ClauseKey::AdditionUnit(_) => {
match self.unit_addition.get(key) {
Some(clause) => Ok(clause),
None => Err(err::ClauseDBError::Missing),
}
}
ClauseKey::Original(index) => {
match self.original.get(*index as usize) {
Some(clause) => Ok(clause),
None => Err(err::ClauseDBError::Missing),
}
}
ClauseKey::OriginalBinary(index) => {
match self.binary_original.get(*index as usize) {
Some(clause) => Ok(clause),
None => Err(err::ClauseDBError::Missing),
}
}
ClauseKey::AdditionBinary(index) => {
match self.binary_addition.get(*index as usize) {
Some(clause) => Ok(clause),
None => Err(err::ClauseDBError::Missing),
}
}
ClauseKey::Addition(index, token) => {
match self.addition.get(*index as usize) {
Some(Some(clause)) => match clause.key() {
ClauseKey::Addition(_, clause_token) if clause_token == token => Ok(clause),
_ => Err(err::ClauseDBError::InvalidKeyToken),
},
Some(None) => Err(err::ClauseDBError::InvalidKeyIndex),
None => Err(err::ClauseDBError::InvalidKeyIndex),
}
}
}
}
pub fn get_mut(&mut self, key: &ClauseKey) -> Result<&mut dbClause, err::ClauseDBError> {
match key {
ClauseKey::OriginalUnit(_) => Err(err::ClauseDBError::GetOriginalUnitKey),
ClauseKey::AdditionUnit(_) => {
match self.unit_addition.get_mut(key) {
Some(clause) => Ok(clause),
None => Err(err::ClauseDBError::Missing),
}
}
ClauseKey::Original(index) => {
match self.original.get_mut(*index as usize) {
Some(clause) => Ok(clause),
None => Err(err::ClauseDBError::Missing),
}
}
ClauseKey::OriginalBinary(index) => {
match self.binary_original.get_mut(*index as usize) {
Some(clause) => Ok(clause),
None => Err(err::ClauseDBError::Missing),
}
}
ClauseKey::AdditionBinary(index) => {
match self.binary_addition.get_mut(*index as usize) {
Some(clause) => Ok(clause),
None => Err(err::ClauseDBError::Missing),
}
}
ClauseKey::Addition(index, token) => {
match self.addition.get_mut(*index as usize) {
Some(Some(clause)) => match clause.key() {
ClauseKey::Addition(_, clause_token) if clause_token == token => Ok(clause),
_ => Err(err::ClauseDBError::InvalidKeyToken),
},
Some(None) => Err(err::ClauseDBError::InvalidKeyIndex),
None => Err(err::ClauseDBError::InvalidKeyIndex),
}
}
}
}
pub unsafe fn get_unchecked(&self, key: &ClauseKey) -> Result<&dbClause, err::ClauseDBError> {
match key {
ClauseKey::OriginalUnit(_) => Err(err::ClauseDBError::GetOriginalUnitKey),
ClauseKey::AdditionUnit(_) => {
match self.unit_addition.get(key) {
Some(clause) => Ok(clause),
None => Err(err::ClauseDBError::Missing),
}
}
ClauseKey::Original(index) => Ok(self.original.get_unchecked(*index as usize)),
ClauseKey::OriginalBinary(index) => {
Ok(self.binary_original.get_unchecked(*index as usize))
}
ClauseKey::AdditionBinary(index) => {
Ok(self.binary_addition.get_unchecked(*index as usize))
}
ClauseKey::Addition(index, token) => {
match self.addition.get_unchecked(*index as usize) {
Some(clause) => match clause.key() {
ClauseKey::Addition(_, clause_token) if clause_token == token => Ok(clause),
_ => Err(err::ClauseDBError::InvalidKeyToken),
},
None => Err(err::ClauseDBError::InvalidKeyIndex),
}
}
}
}
pub unsafe fn get_unchecked_mut(
&mut self,
key: &ClauseKey,
) -> Result<&mut dbClause, err::ClauseDBError> {
match key {
ClauseKey::OriginalUnit(_) => Err(err::ClauseDBError::GetOriginalUnitKey),
ClauseKey::AdditionUnit(_) => {
match self.unit_addition.get_mut(key) {
Some(clause) => Ok(clause),
None => Err(err::ClauseDBError::Missing),
}
}
ClauseKey::Original(index) => Ok(self.original.get_unchecked_mut(*index as usize)),
ClauseKey::OriginalBinary(index) => {
Ok(self.binary_original.get_unchecked_mut(*index as usize))
}
ClauseKey::AdditionBinary(index) => {
Ok(self.binary_addition.get_unchecked_mut(*index as usize))
}
ClauseKey::Addition(index, _) => {
match self.addition.get_unchecked_mut(*index as usize) {
Some(clause) => Ok(clause),
None => Err(err::ClauseDBError::InvalidKeyIndex),
}
}
}
}
}