2019-10-03 11:49:13 +02:00
|
|
|
use std::io::{Read, Write};
|
|
|
|
|
|
|
|
use hashbrown::HashMap;
|
2020-01-10 18:20:30 +01:00
|
|
|
use meilisearch_schema::FieldId;
|
2019-10-18 13:05:28 +02:00
|
|
|
use serde::{Deserialize, Serialize};
|
2019-10-03 11:49:13 +02:00
|
|
|
|
|
|
|
use crate::{DocumentId, Number};
|
|
|
|
|
2019-10-18 13:05:28 +02:00
|
|
|
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
2019-10-16 17:05:24 +02:00
|
|
|
#[serde(transparent)]
|
2020-01-10 18:20:30 +01:00
|
|
|
pub struct RankedMap(HashMap<(DocumentId, FieldId), Number>);
|
2019-10-03 11:49:13 +02:00
|
|
|
|
|
|
|
impl RankedMap {
|
|
|
|
pub fn len(&self) -> usize {
|
|
|
|
self.0.len()
|
|
|
|
}
|
|
|
|
|
2019-10-18 13:21:41 +02:00
|
|
|
pub fn is_empty(&self) -> bool {
|
|
|
|
self.0.is_empty()
|
|
|
|
}
|
|
|
|
|
2020-01-29 18:30:21 +01:00
|
|
|
pub fn insert(&mut self, document: DocumentId, field: FieldId, number: Number) {
|
|
|
|
self.0.insert((document, field), number);
|
2019-10-03 11:49:13 +02:00
|
|
|
}
|
|
|
|
|
2020-01-29 18:30:21 +01:00
|
|
|
pub fn remove(&mut self, document: DocumentId, field: FieldId) {
|
|
|
|
self.0.remove(&(document, field));
|
2019-10-03 11:49:13 +02:00
|
|
|
}
|
|
|
|
|
2020-01-29 18:30:21 +01:00
|
|
|
pub fn get(&self, document: DocumentId, field: FieldId) -> Option<Number> {
|
|
|
|
self.0.get(&(document, field)).cloned()
|
2019-10-03 11:49:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn read_from_bin<R: Read>(reader: R) -> bincode::Result<RankedMap> {
|
|
|
|
bincode::deserialize_from(reader).map(RankedMap)
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn write_to_bin<W: Write>(&self, writer: W) -> bincode::Result<()> {
|
|
|
|
bincode::serialize_into(writer, &self.0)
|
|
|
|
}
|
|
|
|
}
|