use num::{Bounded, FromPrimitive, Num, ToPrimitive};
use std;
use std::fmt;
use std::ops::AddAssign;
use std::string::String;
use malloc_size_of::MallocSizeOf;
pub type NodeID = u64;
#[derive(
Serialize,
Deserialize,
Default,
Eq,
PartialEq,
PartialOrd,
Ord,
Clone,
Debug,
MallocSizeOf,
Hash,
)]
pub struct AnnoKey {
pub name: String,
pub ns: String,
}
#[derive(Serialize, Deserialize, Default, Eq, PartialEq, PartialOrd, Ord, Clone, Debug, Hash)]
pub struct Annotation {
pub key: AnnoKey,
pub val: String,
}
pub type AnnoKeyID = usize;
#[derive(Debug, Default, Clone)]
#[repr(C)]
pub struct CountExtra {
pub match_count: u64,
pub document_count: u64,
}
#[derive(
Serialize,
Deserialize,
Eq,
PartialEq,
PartialOrd,
Ord,
Clone,
Debug,
Hash,
MallocSizeOf,
Default,
)]
#[repr(C)]
pub struct Edge {
pub source: NodeID,
pub target: NodeID,
}
impl Edge {
pub fn inverse(&self) -> Edge {
Edge {
source: self.target,
target: self.source,
}
}
}
#[derive(
Serialize,
Deserialize,
Eq,
PartialEq,
PartialOrd,
Ord,
Hash,
Clone,
Debug,
EnumIter,
EnumString,
MallocSizeOf,
)]
#[repr(C)]
pub enum ComponentType {
Coverage,
InverseCoverage,
Dominance,
Pointing,
Ordering,
LeftToken,
RightToken,
PartOfSubcorpus,
}
impl fmt::Display for ComponentType {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
fmt::Debug::fmt(self, f)
}
}
#[derive(
Serialize, Deserialize, Eq, PartialEq, PartialOrd, Ord, Hash, Clone, Debug, MallocSizeOf,
)]
pub struct Component {
pub ctype: ComponentType,
pub name: String,
pub layer: String,
}
impl std::fmt::Display for Component {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{:?}/{}/{}", self.ctype, self.layer, self.name)
}
}
pub trait NumValue:
Send
+ Sync
+ Ord
+ Num
+ AddAssign
+ Clone
+ Bounded
+ FromPrimitive
+ ToPrimitive
+ MallocSizeOf
{
}
impl NumValue for u64 {}
impl NumValue for u32 {}
impl NumValue for u16 {}
impl NumValue for u8 {}
pub type FrequencyTable<T> = Vec<(Vec<T>, usize)>;
pub struct QueryAttributeDescription {
pub alternative: usize,
pub query_fragment: String,
pub variable: String,
pub anno_name: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct LineColumn {
pub line: usize,
pub column: usize,
}
impl std::fmt::Display for LineColumn {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}:{}", self.line, self.column)
}
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct LineColumnRange {
pub start: LineColumn,
pub end: Option<LineColumn>,
}
impl std::fmt::Display for LineColumnRange {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
if let Some(end) = self.end.clone() {
if self.start == end {
write!(f, "{}", self.start)
} else {
write!(f, "{}-{}", self.start, end)
}
} else {
write!(f, "{}", self.start)
}
}
}