summaryrefslogtreecommitdiff
path: root/buffer.cpp
blob: ff5ae601c786468d957dbf7361a20ee21a3f08d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
struct Buffer {
	const char *name;
	Page *storage;

	Buffer(const char *name) : name(name), storage(new Page()) {}

	void read_file(const char *pathname) {
		int file = open(pathname, O_RDONLY);
		Page *iter = storage;
		int bytes_read = read(file, iter->elements, PAGE_SIZE);
		iter->gap_start = bytes_read;
		iter->element_count = bytes_read;
		while (bytes_read == PAGE_SIZE) {
			iter->next = new Page();
			iter = iter->next;
			bytes_read = read(file, iter->elements, PAGE_SIZE);
			iter->gap_start = bytes_read;
			iter->element_count = bytes_read;
		}
		close(file);
	}

	void write_file(const char *file) {
		FILE *f = fopen(file, "w+");
		for (Point p(storage, 0); !p.at_end(); p++) {
			fputc(p.element(), f);
		}
		fclose(f);
	}
};