Advertisement
Guest User

Untitled

a guest
Aug 20th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.36 KB | None | 0 0
  1. use std::collections::BTreeMap;
  2. use std::collections::HashMap;
  3.  
  4. pub type Timestamp = u64;
  5. pub type Data = Vec<f64>;
  6.  
  7. pub struct DatapointView<'a> {
  8. pub timestamp: u64,
  9. pub data: &'a [f64],
  10. }
  11.  
  12. impl<'a> DatapointView<'a> {
  13. pub fn new(time: Timestamp, data: &'a [f64]) -> DatapointView<'a> {
  14. DatapointView {
  15. timestamp: time,
  16. data: data,
  17. }
  18. }
  19. }
  20.  
  21. struct DatasetManagerItem {
  22. description: String,
  23. data: BTreeMap<Timestamp, Vec<f64>>,
  24. }
  25.  
  26. impl DatasetManagerItem {
  27. fn new() -> DatasetManagerItem {
  28. DatasetManagerItem {
  29. description: "".to_owned(),
  30. data: BTreeMap::new(),
  31. }
  32. }
  33.  
  34. fn insert_new_point(&mut self, time: Timestamp, data: Vec<f64>) -> DatapointView {
  35. self.data.insert(time, data);
  36. let value = self.data.get(&time).unwrap();
  37. DatapointView::new(time, value)
  38. }
  39. }
  40. pub struct DatasetWriter <'a>{
  41. pub todo: HashMap<&'a str, Vec<DatapointView<'a>>>,
  42. base_path: String,
  43. }
  44.  
  45. impl <'a> DatasetWriter<'a> {
  46. pub fn new(path: &str) -> DatasetWriter {
  47. DatasetWriter {
  48. todo: HashMap::new(),
  49. base_path: path.to_string(),
  50. }
  51. }
  52.  
  53. pub fn enqueue_work(&mut self, dataset: &'a str, data: DatapointView<'a>) {
  54. match self.todo.get_mut(dataset) {
  55. Some(data_vec) => {
  56. data_vec.push(data);
  57. }
  58. _ => {
  59. self.todo.insert(dataset, vec![data]);
  60. }
  61. }
  62. }
  63. }
  64.  
  65.  
  66. pub struct DatasetManager<'a> {
  67. writer: DatasetWriter<'a>,
  68. datasets: HashMap<String, DatasetManagerItem>,
  69. }
  70. impl<'a> DatasetManager<'a> {
  71. pub fn new(writer: DatasetWriter) -> DatasetManager {
  72. DatasetManager {
  73. writer: writer,
  74. datasets: HashMap::new(),
  75. }
  76. }
  77.  
  78. fn insert_new_dataset(&mut self, dataset_name: &str) {
  79. if !self.datasets.contains_key(dataset_name) {
  80. self.datasets
  81. .insert(dataset_name.to_owned(), DatasetManagerItem::new());
  82. }
  83. }
  84.  
  85. pub fn insert_datapoint(&mut self, time: Timestamp, data: Data, dataset_name: &str) {
  86. self.insert_new_dataset(dataset_name);
  87.  
  88. let dataset_ref = self.datasets.get_mut(dataset_name).unwrap();
  89. let datapoint_view = dataset_ref.insert_new_point(time, data);
  90.  
  91. self.writer.enqueue_work(dataset_name, datapoint_view);
  92. }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement