diff options
| author | Juan Manuel Tomás <jtomas1815@gmail.com> | 2020-07-14 22:19:51 -0300 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-14 22:19:51 -0300 | 
| commit | 2397212c306c63a5887ff67cc56ffae68d055d2f (patch) | |
| tree | 93931a7e0fb69bd2260deaf1b843545f0a80a28f | |
| parent | bae527345c58cda7447df767561e8512dc3a9c64 (diff) | |
| parent | 92ce439907a7892984267341aa0c68c2623b3ce0 (diff) | |
| download | jet-2397212c306c63a5887ff67cc56ffae68d055d2f.tar.gz jet-2397212c306c63a5887ff67cc56ffae68d055d2f.zip  | |
Merge pull request #13 from jmtomas/12
| -rw-r--r-- | buffer.cpp | 24 | 
1 files changed, 18 insertions, 6 deletions
@@ -4,18 +4,30 @@ struct Buffer {  	Buffer(const char *name) : name(name), storage(new Page()) {} +	void free_storage() { +		while (storage) { +			Page *iter = storage; +			storage = storage->next; +			delete iter; +		} +	} +  	void read_file(const char *pathname) { +		free_storage();  		int file = open(pathname, O_RDONLY); +		storage = new Page(); +		int bytes_read = read(file, storage->elements, PAGE_SIZE);  		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) { +		while (bytes_read > 0) { +			iter->gap_start = bytes_read; +			iter->element_count = bytes_read;  			iter->next = new Page(); +			iter->next->prev = iter;  			iter = iter->next;  			bytes_read = read(file, iter->elements, PAGE_SIZE); -			iter->gap_start = bytes_read; -			iter->element_count = bytes_read; +		} +		if (iter->element_count == 0) { +			delete iter;  		}  		close(file);  	}  | 
