30 #ifndef DEF_GRAPHCHI_DEGREE_DATA
31 #define DEF_GRAPHCHI_DEGREE_DATA
38 #include "graphchi_types.hpp"
64 virtual void open_file(std::string base_filename) {
65 filename = filename_degree_data(base_filename);
67 filedesc = iomgr->open_session(filename.c_str(),
false);
77 vertex_st = vertex_en = 0;
78 open_file(base_filename);
82 if (loaded_chunk != NULL) {
83 iomgr->managed_release(filedesc, &loaded_chunk);
85 iomgr->close_session(filedesc);
93 virtual void load(vid_t _vertex_st, vid_t _vertex_en) {
94 assert(_vertex_en >= _vertex_st);
95 vertex_st = _vertex_st;
96 vertex_en = _vertex_en;
98 size_t datasize = (vertex_en - vertex_st + 1) *
sizeof(
degree);
99 size_t datastart = vertex_st *
sizeof(
degree);
101 if (loaded_chunk != NULL) {
102 iomgr->managed_release(filedesc, &loaded_chunk);
105 iomgr->managed_malloc(filedesc, &loaded_chunk, datasize, datastart);
106 iomgr->managed_preada_now(filedesc, &loaded_chunk, datasize, datastart);
113 assert(loaded_chunk != NULL);
117 virtual void set_degree(vid_t vertexid,
int indegree,
int outdegree) {
118 assert(vertexid >= vertex_st && vertexid <= vertex_en);
119 loaded_chunk[vertexid - vertex_st].indegree = indegree;
120 loaded_chunk[vertexid - vertex_st].outdegree = outdegree;
123 virtual void set_degree(vid_t vertexid, degree d) {
124 assert(vertexid >= vertex_st && vertexid <= vertex_en);
125 loaded_chunk[vertexid - vertex_st] = d;
128 inline degree get_degree(vid_t vertexid) {
129 assert(vertexid >= vertex_st && vertexid <= vertex_en);
130 return loaded_chunk[vertexid - vertex_st];
134 size_t datasize = (vertex_en - vertex_st + 1) *
sizeof(degree);
135 size_t datastart = vertex_st *
sizeof(degree);
137 iomgr->managed_pwritea_now(filedesc, &loaded_chunk, datasize, datastart);
140 void ensure_size(vid_t maxid) {
141 iomgr->truncate(filedesc, (1 + maxid) *
sizeof(degree));