Commit 33d7d3cf66f23847f92d85a149293c11cfaf49e5

Authored by David Mayerich
1 parent cb455f98

documentation for binary.h

Showing 1 changed file with 31 additions and 11 deletions   Show diff stats
@@ -10,7 +10,13 @@ @@ -10,7 +10,13 @@
10 10
11 namespace stim{ 11 namespace stim{
12 12
13 -//This class contains a bunch of functions useful for multidimensional binary file access 13 +/** This class manages the streaming of large multidimensional binary files.
  14 + * Generally these are hyperspectral files with 2 spatial and 1 spectral dimension. However, this class supports
  15 + * other dimensions via the template parameter D.
  16 + *
  17 + * @param T is the data type used to store data to disk (generally float or double)
  18 + * @param D is the dimension of the data (default 3)
  19 + */
14 template< typename T, unsigned int D = 3 > 20 template< typename T, unsigned int D = 3 >
15 class binary{ 21 class binary{
16 22
@@ -25,15 +31,14 @@ protected: @@ -25,15 +31,14 @@ protected:
25 31
26 32
27 33
28 - //basic initialization 34 + /// Private initialization function used to set default parameters in the data structure.
29 void init(){ 35 void init(){
30 memset(R, 0, sizeof(unsigned int) * D); //initialize the resolution to zero 36 memset(R, 0, sizeof(unsigned int) * D); //initialize the resolution to zero
31 header = 0; //initialize the header size to zero 37 header = 0; //initialize the header size to zero
32 mask = NULL; 38 mask = NULL;
33 } 39 }
34 40
35 - //returns the file size  
36 - // reads the file size from disk and returns it (in bytes) 41 + /// Private helper function that returns the size of the file on disk using system functions.
37 long long int get_file_size(){ 42 long long int get_file_size(){
38 #ifdef _WIN32 43 #ifdef _WIN32
39 struct _stat64 results; 44 struct _stat64 results;
@@ -47,8 +52,7 @@ protected: @@ -47,8 +52,7 @@ protected:
47 else return 0; 52 else return 0;
48 } 53 }
49 54
50 - //make sure that the specified file size matches the file size on disk  
51 - // returns true/false 55 + /// Private helper function that tests to make sure that the calculated data size specified by the structure is the same as the data size on disk.
52 bool test_file_size(){ 56 bool test_file_size(){
53 long long int npts = 1; //initialize the number of data points to 1 57 long long int npts = 1; //initialize the number of data points to 1
54 for(unsigned int i = 0; i<D; i++) //iterate over each dimension 58 for(unsigned int i = 0; i<D; i++) //iterate over each dimension
@@ -60,7 +64,9 @@ protected: @@ -60,7 +64,9 @@ protected:
60 64
61 } 65 }
62 66
63 - //open the file specified in "name" for binary reading and writing 67 + /// Private helper file that opens a specified binary file.
  68 +
  69 + /// @param filename is the name of the binary file to stream
64 bool open_file(std::string filename){ 70 bool open_file(std::string filename){
65 //open the file as binary for reading and writing 71 //open the file as binary for reading and writing
66 file.open(filename.c_str(), std::ios::in | std::ios::out | std::ios::binary); 72 file.open(filename.c_str(), std::ios::in | std::ios::out | std::ios::binary);
@@ -77,7 +83,11 @@ protected: @@ -77,7 +83,11 @@ protected:
77 83
78 public: 84 public:
79 85
80 - //open a file, given the file name, resolution (as a vector) and header size 86 + /// Open a binary file for streaming.
  87 +
  88 + /// @param filename is the name of the binary file
  89 + /// @param r is a STIM vector specifying the size of the binary file along each dimension
  90 + /// @param h is the length (in bytes) of any header file (default zero)
81 bool open(std::string filename, vec<unsigned int, D> r, unsigned int h = 0){ 91 bool open(std::string filename, vec<unsigned int, D> r, unsigned int h = 0){
82 92
83 for(unsigned int i = 0; i < D; i++) //set the dimensions of the binary file object 93 for(unsigned int i = 0; i < D; i++) //set the dimensions of the binary file object
@@ -90,7 +100,11 @@ public: @@ -90,7 +100,11 @@ public:
90 return test_file_size(); 100 return test_file_size();
91 } 101 }
92 102
93 - //crete a new binary file 103 + /// Creates a new binary file for streaming
  104 +
  105 + /// @param filename is the name of the binary file to be created
  106 + /// @param r is a STIM vector specifying the size of the file along each dimension
  107 + /// @offset specifies how many bytes to offset the file (used to leave room for a header)
94 bool create(std::string filename, vec<unsigned int, D> r, unsigned int offset = 0){ 108 bool create(std::string filename, vec<unsigned int, D> r, unsigned int offset = 0){
95 109
96 std::ofstream target(filename.c_str(), std::ios::binary); 110 std::ofstream target(filename.c_str(), std::ios::binary);
@@ -111,7 +125,10 @@ public: @@ -111,7 +125,10 @@ public:
111 return test_file_size(); 125 return test_file_size();
112 } 126 }
113 127
114 - //save one band from the memory to the file 128 + /// Writes a single page of data to disk. A page consists of a sequence of data of size R[0] * R[1] * ... * R[D-1].
  129 +
  130 + /// @param p is a pointer to the data to be written
  131 + /// @param page is the page number (index of the highest-numbered dimension)
115 bool write_page( T * p, unsigned int page){ 132 bool write_page( T * p, unsigned int page){
116 133
117 if(p == NULL){ 134 if(p == NULL){
@@ -125,7 +142,10 @@ public: @@ -125,7 +142,10 @@ public:
125 return true; 142 return true;
126 } 143 }
127 144
128 - //save one band of the file into the memory, and return the pointer 145 + /// Reads a page from disk. A page consists of a sequence of data of size R[0] * R[1] * ... * R[D-1].
  146 +
  147 + /// @param p is a pointer to pre-allocated memory equal to the page size
  148 + /// @param page is the index of the page
129 bool read_page( T * p, unsigned int page){ 149 bool read_page( T * p, unsigned int page){
130 150
131 if (page >= R[2]){ //make sure the bank number is right 151 if (page >= R[2]){ //make sure the bank number is right