@@ -89,6 +89,57 @@ class AdjListView {
8989 timestamp_t timestamp_;
9090};
9191
92+ template <typename EDATA_T>
93+ class ImmutableAdjListView {
94+ class nbr_iterator {
95+ using const_nbr_t = typename ImmutableNbrSlice<EDATA_T>::const_nbr_t ;
96+ using const_nbr_ptr_t =
97+ typename ImmutableNbrSlice<EDATA_T>::const_nbr_ptr_t ;
98+
99+ public:
100+ nbr_iterator (const_nbr_ptr_t ptr, const_nbr_ptr_t end)
101+ : ptr_(ptr), end_(end) {}
102+
103+ inline const_nbr_t & operator *() const { return *ptr_; }
104+
105+ inline const_nbr_ptr_t operator ->() const { return ptr_; }
106+
107+ inline nbr_iterator& operator ++() {
108+ ++ptr_;
109+ return *this ;
110+ }
111+
112+ inline bool operator ==(const nbr_iterator& rhs) const {
113+ return (ptr_ == rhs.ptr_ );
114+ }
115+
116+ inline bool operator !=(const nbr_iterator& rhs) const {
117+ return (ptr_ != rhs.ptr_ );
118+ }
119+
120+ private:
121+ const_nbr_ptr_t ptr_;
122+ const_nbr_ptr_t end_;
123+ };
124+
125+ public:
126+ using slice_t = ImmutableNbrSlice<EDATA_T>;
127+
128+ ImmutableAdjListView (const slice_t & slice) : edges_(slice) {}
129+
130+ inline nbr_iterator begin () const {
131+ return nbr_iterator (edges_.begin (), edges_.end ());
132+ }
133+ inline nbr_iterator end () const {
134+ return nbr_iterator (edges_.end (), edges_.end ());
135+ }
136+
137+ inline int estimated_degree () const { return edges_.size (); }
138+
139+ private:
140+ slice_t edges_;
141+ };
142+
92143template <typename EDATA_T>
93144class GraphView {
94145 public:
@@ -233,6 +284,19 @@ class GraphView {
233284 timestamp_t unsorted_since_;
234285};
235286
287+ template <typename EDATA_T>
288+ class ImmutableGraphView {
289+ public:
290+ ImmutableGraphView (const ImmutableCsr<EDATA_T>& csr) : csr_(csr) {}
291+
292+ inline ImmutableAdjListView<EDATA_T> get_edges (vid_t v) const {
293+ return ImmutableAdjListView<EDATA_T>(csr_.get_edges (v));
294+ }
295+
296+ private:
297+ const ImmutableCsr<EDATA_T>& csr_;
298+ };
299+
236300template <typename EDATA_T>
237301class SingleGraphView {
238302 public:
@@ -497,6 +561,22 @@ class ReadTransaction {
497561 return SingleImmutableGraphView<EDATA_T>(*csr);
498562 }
499563
564+ template <typename EDATA_T>
565+ ImmutableGraphView<EDATA_T> GetOutgoingImmutableGraphView (
566+ label_t v_label, label_t neighbor_label, label_t edge_label) const {
567+ auto csr = dynamic_cast <const ImmutableCsr<EDATA_T>*>(
568+ graph_.get_oe_csr (v_label, neighbor_label, edge_label));
569+ return ImmutableGraphView<EDATA_T>(*csr);
570+ }
571+
572+ template <typename EDATA_T>
573+ ImmutableGraphView<EDATA_T> GetIncomingImmutableGraphView (
574+ label_t v_label, label_t neighbor_label, label_t edge_label) const {
575+ auto csr = dynamic_cast <const ImmutableCsr<EDATA_T>*>(
576+ graph_.get_ie_csr (v_label, neighbor_label, edge_label));
577+ return ImmutableGraphView<EDATA_T>(*csr);
578+ }
579+
500580 const GraphDBSession& GetSession () const ;
501581
502582 private:
0 commit comments