33 #ifndef DEF_GRAPHCHI_VERTEXDATA
34 #define DEF_GRAPHCHI_VERTEXDATA
40 #include "graphchi_types.hpp"
47 template <
typename VertexDataType>
64 virtual void open_file(std::string base_filename) {
65 filedesc = iomgr->open_session(filename.c_str(),
false);
71 vertex_st = vertex_en = 0;
72 filename = filename_vertex_data<VertexDataType>(base_filename);
73 check_size(nvertices);
79 iomgr->close_session(filedesc);
80 iomgr->wait_for_writes();
81 if (loaded_chunk != NULL) {
82 iomgr->managed_release(filedesc, &loaded_chunk);
86 void check_size(
size_t nvertices) {
87 checkarray_filesize<VertexDataType>(filename, nvertices);
90 void clear(
size_t nvertices) {
92 check_size(nvertices);
100 virtual void load(vid_t _vertex_st, vid_t _vertex_en) {
101 assert(_vertex_en >= _vertex_st);
102 vertex_st = _vertex_st;
103 vertex_en = _vertex_en;
105 size_t datasize = (vertex_en - vertex_st + 1)*
sizeof(
VertexDataType);
108 if (loaded_chunk != NULL) {
109 iomgr->managed_release(filedesc, &loaded_chunk);
112 iomgr->managed_malloc(filedesc, &loaded_chunk, datasize, datastart);
113 iomgr->managed_preada_now(filedesc, &loaded_chunk, datasize, datastart);
119 virtual void save(
bool async=
false) {
120 assert(loaded_chunk != NULL);
121 size_t datasize = (vertex_en - vertex_st + 1) *
sizeof(
VertexDataType);
126 iomgr->managed_pwritea_now(filedesc, &loaded_chunk, datasize, datastart);
135 assert(loaded_chunk != NULL);
141 assert(vertexid >= vertex_st && vertexid <= vertex_en);
142 return &loaded_chunk[vertexid - vertex_st];