Flex  0.17.9
csr_base.h
Go to the documentation of this file.
1 
16 #ifndef STORAGES_RT_MUTABLE_GRAPH_CSR_CSR_BASE_H_
17 #define STORAGES_RT_MUTABLE_GRAPH_CSR_CSR_BASE_H_
18 
19 #include <string>
20 #include <vector>
21 
24 
25 namespace gs {
26 
28  public:
29  CsrConstEdgeIterBase() = default;
30  virtual ~CsrConstEdgeIterBase() = default;
31 
32  virtual vid_t get_neighbor() const = 0;
33  virtual Any get_data() const = 0;
34  virtual timestamp_t get_timestamp() const = 0;
35  virtual size_t size() const = 0;
36 
37  virtual CsrConstEdgeIterBase& operator+=(size_t offset) = 0;
38 
39  virtual void next() = 0;
40  virtual bool is_valid() const = 0;
41 };
42 
44  public:
45  CsrEdgeIterBase() = default;
46  virtual ~CsrEdgeIterBase() = default;
47 
48  virtual vid_t get_neighbor() const = 0;
49  virtual Any get_data() const = 0;
50  virtual timestamp_t get_timestamp() const = 0;
51  virtual size_t size() const = 0;
52 
53  virtual CsrEdgeIterBase& operator+=(size_t offset) = 0;
54 
55  virtual void next() = 0;
56  virtual bool is_valid() const = 0;
57 
58  virtual void set_data(const Any& value, timestamp_t ts) = 0;
59 };
60 
61 class CsrBase {
62  public:
63  CsrBase() = default;
64  virtual ~CsrBase() = default;
65  virtual size_t batch_init(const std::string& name,
66  const std::string& work_dir,
67  const std::vector<int>& degree,
68  double reserve_ratio = 1.2) = 0;
69 
70  virtual size_t batch_init_in_memory(const std::vector<int>& degree,
71  double reserve_ratio = 1.2) = 0;
72 
74  LOG(FATAL) << "not supported...";
75  }
76  virtual timestamp_t unsorted_since() const { return 0; }
77 
78  virtual void open(const std::string& name, const std::string& snapshot_dir,
79  const std::string& work_dir) = 0;
80 
81  virtual void open_in_memory(const std::string& prefix, size_t v_cap) = 0;
82 
83  virtual void open_with_hugepages(const std::string& prefix,
84  size_t v_cap = 0) {
85  LOG(FATAL) << "not supported...";
86  }
87 
88  virtual void dump(const std::string& name,
89  const std::string& new_snapshot_dir) = 0;
90 
91  virtual void warmup(int thread_num) const = 0;
92 
93  virtual void resize(vid_t vnum) = 0;
94  virtual size_t size() const = 0;
95 
96  // Returns the number of edges in the graph. Note that the returned value is
97  // exactly the number of edges in this csr. Even if there may be some reserved
98  // space, the reserved space will count as 0.
99  virtual size_t edge_num() const = 0;
100 
101  virtual void close() = 0;
102 
103  virtual std::shared_ptr<CsrConstEdgeIterBase> edge_iter(vid_t v) const = 0;
104  virtual CsrConstEdgeIterBase* edge_iter_raw(vid_t v) const = 0;
105  virtual std::shared_ptr<CsrEdgeIterBase> edge_iter_mut(vid_t v) = 0;
106 };
107 
108 template <typename EDATA_T>
109 class TypedCsrBase : public CsrBase {
110  public:
111  virtual void batch_put_edge(vid_t src, vid_t dst, const EDATA_T& data,
112  timestamp_t ts = 0) = 0;
113  virtual void put_edge(vid_t src, vid_t dst, const EDATA_T& data,
114  timestamp_t ts, Allocator& alloc) = 0;
115 };
116 
117 template <>
118 class TypedCsrBase<std::string_view> : public CsrBase {
119  public:
120  virtual void batch_put_edge_with_index(vid_t src, vid_t dst, size_t index,
121  timestamp_t ts = 0) = 0;
122  virtual void put_edge_with_index(vid_t src, vid_t dst, size_t index,
123  timestamp_t ts, Allocator& alloc) = 0;
124 };
125 
126 template <typename EDATA_T>
127 class TypedImmutableCsrBase : public TypedCsrBase<EDATA_T> {
128  public:
130 
131  virtual slice_t get_edges(vid_t v) const = 0;
132 };
133 
134 template <typename EDATA_T>
135 class TypedMutableCsrBase : public TypedCsrBase<EDATA_T> {
136  public:
138 
139  virtual slice_t get_edges(vid_t v) const = 0;
140 };
141 
142 template <>
143 class TypedCsrBase<RecordView> : public CsrBase {
144  public:
146 
147  virtual void batch_put_edge_with_index(vid_t src, vid_t dst, size_t index,
148  timestamp_t ts = 0) = 0;
149  virtual void put_edge_with_index(vid_t src, vid_t dst, size_t index,
150  timestamp_t ts, Allocator& alloc) = 0;
151  virtual slice_t get_edges(vid_t v) const = 0;
152 };
153 
154 } // namespace gs
155 
156 #endif // STORAGES_RT_MUTABLE_GRAPH_CSR_CSR_BASE_H_
gs::CsrConstEdgeIterBase::operator+=
virtual CsrConstEdgeIterBase & operator+=(size_t offset)=0
gs::ImmutableNbrSlice< std::string_view >
Definition: nbr.h:130
gs::CsrConstEdgeIterBase::~CsrConstEdgeIterBase
virtual ~CsrConstEdgeIterBase()=default
gs::CsrEdgeIterBase::get_data
virtual Any get_data() const =0
gs::CsrBase::batch_sort_by_edge_data
virtual void batch_sort_by_edge_data(timestamp_t ts)
Definition: csr_base.h:73
gs::Any
Definition: types.h:383
gs::TypedMutableCsrBase::get_edges
virtual slice_t get_edges(vid_t v) const =0
gs::timestamp_t
uint32_t timestamp_t
Definition: types.h:30
gs::CsrBase
Definition: csr_base.h:61
gs::CsrBase::unsorted_since
virtual timestamp_t unsorted_since() const
Definition: csr_base.h:76
gs::CsrEdgeIterBase::set_data
virtual void set_data(const Any &value, timestamp_t ts)=0
gs::CsrEdgeIterBase::get_neighbor
virtual vid_t get_neighbor() const =0
gs::CsrConstEdgeIterBase::size
virtual size_t size() const =0
nbr.h
gs::ImmutableNbrSlice
Definition: nbr.h:100
gs::CsrBase::close
virtual void close()=0
gs::vid_t
uint32_t vid_t
Definition: types.h:31
gs::CsrBase::open_with_hugepages
virtual void open_with_hugepages(const std::string &prefix, size_t v_cap=0)
Definition: csr_base.h:83
gs::CsrEdgeIterBase
Definition: csr_base.h:43
gs::CsrBase::batch_init_in_memory
virtual size_t batch_init_in_memory(const std::vector< int > &degree, double reserve_ratio=1.2)=0
gs
Definition: adj_list.h:23
gs::MutableNbrSlice< std::string_view >
Definition: nbr.h:356
gs::CsrConstEdgeIterBase::next
virtual void next()=0
gs::CsrEdgeIterBase::next
virtual void next()=0
gs::CsrConstEdgeIterBase::get_data
virtual Any get_data() const =0
gs::TypedImmutableCsrBase::get_edges
virtual slice_t get_edges(vid_t v) const =0
gs::ArenaAllocator
Definition: allocators.h:29
gs::TypedCsrBase::batch_put_edge
virtual void batch_put_edge(vid_t src, vid_t dst, const EDATA_T &data, timestamp_t ts=0)=0
gs::CsrConstEdgeIterBase::get_timestamp
virtual timestamp_t get_timestamp() const =0
gs::CsrEdgeIterBase::is_valid
virtual bool is_valid() const =0
gs::CsrConstEdgeIterBase::CsrConstEdgeIterBase
CsrConstEdgeIterBase()=default
gs::CsrBase::resize
virtual void resize(vid_t vnum)=0
gs::CsrConstEdgeIterBase
Definition: csr_base.h:27
gs::MutableNbrSlice< RecordView >
Definition: nbr.h:283
gs::CsrBase::edge_num
virtual size_t edge_num() const =0
gs::CsrEdgeIterBase::get_timestamp
virtual timestamp_t get_timestamp() const =0
gs::TypedImmutableCsrBase
Definition: csr_base.h:127
gs::CsrBase::edge_iter_mut
virtual std::shared_ptr< CsrEdgeIterBase > edge_iter_mut(vid_t v)=0
gs::TypedCsrBase::put_edge
virtual void put_edge(vid_t src, vid_t dst, const EDATA_T &data, timestamp_t ts, Allocator &alloc)=0
gs::CsrEdgeIterBase::~CsrEdgeIterBase
virtual ~CsrEdgeIterBase()=default
gs::CsrBase::~CsrBase
virtual ~CsrBase()=default
gs::CsrBase::edge_iter_raw
virtual CsrConstEdgeIterBase * edge_iter_raw(vid_t v) const =0
gs::TypedCsrBase
Definition: csr_base.h:109
gs::TypedMutableCsrBase
Definition: csr_base.h:135
gs::CsrBase::open
virtual void open(const std::string &name, const std::string &snapshot_dir, const std::string &work_dir)=0
gs::CsrBase::open_in_memory
virtual void open_in_memory(const std::string &prefix, size_t v_cap)=0
gs::CsrEdgeIterBase::operator+=
virtual CsrEdgeIterBase & operator+=(size_t offset)=0
gs::CsrEdgeIterBase::CsrEdgeIterBase
CsrEdgeIterBase()=default
types.h
gs::CsrBase::size
virtual size_t size() const =0
gs::CsrEdgeIterBase::size
virtual size_t size() const =0
gs::CsrBase::edge_iter
virtual std::shared_ptr< CsrConstEdgeIterBase > edge_iter(vid_t v) const =0
gs::snapshot_dir
std::string snapshot_dir(const std::string &work_dir, uint32_t version)
Definition: file_names.h:192
std
Definition: loading_config.h:232
gs::CsrConstEdgeIterBase::get_neighbor
virtual vid_t get_neighbor() const =0
gs::CsrBase::CsrBase
CsrBase()=default
gs::CsrBase::batch_init
virtual size_t batch_init(const std::string &name, const std::string &work_dir, const std::vector< int > &degree, double reserve_ratio=1.2)=0
gs::CsrConstEdgeIterBase::is_valid
virtual bool is_valid() const =0
gs::CsrBase::dump
virtual void dump(const std::string &name, const std::string &new_snapshot_dir)=0
gs::RecordView
Definition: types.h:285
gs::MutableNbrSlice
Definition: nbr.h:253
gs::CsrBase::warmup
virtual void warmup(int thread_num) const =0