use std::collections::{HashMap, HashSet};
use crate::csr::dense_array::DenseArray;
pub use nodedb_types::graph::Direction;
pub struct CsrIndex {
pub(crate) node_to_id: HashMap<String, u32>,
pub(crate) id_to_node: Vec<String>,
pub(crate) label_to_id: HashMap<String, u32>,
pub(crate) id_to_label: Vec<String>,
pub(crate) out_offsets: Vec<u32>,
pub(crate) out_targets: DenseArray<u32>,
pub(crate) out_labels: DenseArray<u32>,
pub(crate) out_weights: Option<DenseArray<f64>>,
pub(crate) in_offsets: Vec<u32>,
pub(crate) in_targets: DenseArray<u32>,
pub(crate) in_labels: DenseArray<u32>,
pub(crate) in_weights: Option<DenseArray<f64>>,
pub(crate) buffer_out: Vec<Vec<(u32, u32)>>,
pub(crate) buffer_in: Vec<Vec<(u32, u32)>>,
pub(crate) buffer_out_weights: Vec<Vec<f64>>,
pub(crate) buffer_in_weights: Vec<Vec<f64>>,
pub(crate) deleted_edges: HashSet<(u32, u32, u32)>,
pub(crate) has_weights: bool,
pub(crate) node_label_bits: Vec<u64>,
pub(crate) node_label_to_id: HashMap<String, u8>,
pub(crate) node_label_names: Vec<String>,
pub(crate) access_counts: Vec<std::cell::Cell<u32>>,
pub(crate) query_epoch: u64,
}
impl Default for CsrIndex {
fn default() -> Self {
Self::new()
}
}
impl CsrIndex {
pub fn new() -> Self {
Self {
node_to_id: HashMap::new(),
id_to_node: Vec::new(),
label_to_id: HashMap::new(),
id_to_label: Vec::new(),
out_offsets: vec![0],
out_targets: DenseArray::default(),
out_labels: DenseArray::default(),
out_weights: None,
in_offsets: vec![0],
in_targets: DenseArray::default(),
in_labels: DenseArray::default(),
in_weights: None,
buffer_out: Vec::new(),
buffer_in: Vec::new(),
buffer_out_weights: Vec::new(),
buffer_in_weights: Vec::new(),
deleted_edges: HashSet::new(),
has_weights: false,
node_label_bits: Vec::new(),
node_label_to_id: HashMap::new(),
node_label_names: Vec::new(),
access_counts: Vec::new(),
query_epoch: 0,
}
}
}