@@ -32,6 +32,25 @@ void typeContainer::move_back(simpleArrayBase& a){
3232 sorting_.push_back ({isint,iarrs_.size ()-1 });
3333 }
3434}
35+ bool typeContainer::operator ==(const typeContainer& rhs)const {
36+ if (size () != rhs.size ())
37+ return false ;
38+ if (farrs_.size () != rhs.farrs_ .size ())
39+ return false ;
40+
41+ if (sorting_ != rhs.sorting_ )
42+ return false ;
43+
44+ for (size_t i=0 ;i<farrs_.size ();i++){
45+ if (farrs_.at (i) != rhs.farrs_ .at (i))
46+ return false ;
47+ }
48+ for (size_t i=0 ;i<iarrs_.size ();i++){
49+ if (iarrs_.at (i) != rhs.iarrs_ .at (i))
50+ return false ;
51+ }
52+ return true ;
53+ }
3554simpleArrayBase& typeContainer::at (size_t idx){
3655 if (idx>=sorting_.size ())
3756 throw std::out_of_range (" typeContainer::at: requested " +std::to_string (idx)+" of " +std::to_string (sorting_.size ()));
@@ -119,6 +138,22 @@ void typeContainer::readFromFile_priv(FILE *& ifile, bool justmetadata){
119138
120139// //////////////// trainData //////////////////////
121140
141+ bool trainData::operator ==(const trainData& rhs)const {
142+
143+ if (feature_arrays_ != rhs.feature_arrays_ )
144+ return false ;
145+ if (truth_arrays_ != rhs.truth_arrays_ )
146+ return false ;
147+ if (weight_arrays_ != rhs.weight_arrays_ )
148+ return false ;
149+ if (feature_shapes_ != rhs.feature_shapes_ )
150+ return false ;
151+ if (truth_shapes_ != rhs.truth_shapes_ )
152+ return false ;
153+ if (weight_shapes_ != rhs. weight_shapes_)
154+ return false ;
155+ return true ;
156+ }
122157
123158
124159int trainData::storeFeatureArray (simpleArrayBase & a){
@@ -267,6 +302,19 @@ bool trainData::validSlice(size_t splitindex_begin, size_t splitindex_end)const{
267302void trainData::writeToFile (std::string filename)const {
268303
269304 FILE *ofile = fopen (filename.data (), " wb" );
305+ addToFileP (ofile);
306+ fclose (ofile);
307+
308+ }
309+
310+ void trainData::addToFile (std::string filename)const {
311+
312+ FILE *ofile = fopen (filename.data (), " ab" );
313+ addToFileP (ofile);
314+ fclose (ofile);
315+ }
316+
317+ void trainData::addToFileP (FILE *& ofile)const {
270318 float version = DJCDATAVERSION;
271319 io::writeToFile (&version, ofile);
272320
@@ -279,15 +327,13 @@ void trainData::writeToFile(std::string filename)const{
279327 feature_arrays_.writeToFile (ofile);
280328 truth_arrays_.writeToFile (ofile);
281329 weight_arrays_.writeToFile (ofile);
282- fclose (ofile);
283-
284330}
285331
286332void trainData::priv_readFromFile (std::string filename, bool memcp){
287333 clear ();
288334 FILE *ifile = fopen (filename.data (), " rb" );
289335 char *buf = 0 ;
290- if (memcp){
336+ if (false && memcp){
291337 FILE *diskfile = ifile;
292338 // check if exists before trying to memcp.
293339 checkFile (ifile, filename); // not set at start but won't be used
@@ -307,6 +353,37 @@ void trainData::priv_readFromFile(std::string filename, bool memcp){
307353 ifile = fmemopen (buf,fsize," r" );
308354 }
309355
356+ priv_readSelfFromFileP (ifile,filename);
357+ // check for eof and add until done. the append step can be heavily optimized! FIXME
358+ // read one more byte
359+ int ch = getc (ifile);
360+ while (! feof (ifile)){
361+ fseek (ifile,-1 ,SEEK_CUR);
362+ append (priv_readFromFileP (ifile,filename));
363+ ch = getc (ifile);
364+ }
365+
366+ fclose (ifile);
367+ if (buf){
368+ delete buf;
369+ }
370+ }
371+
372+ trainData trainData::priv_readFromFileP (FILE *& ifile, const std::string& filename)const {
373+ // include file version check
374+ trainData out;
375+ out.checkFile (ifile, filename);
376+ out.readNested (out.feature_shapes_ , ifile);
377+ out.readNested (out.truth_shapes_ , ifile);
378+ out.readNested (out.weight_shapes_ , ifile);
379+
380+ out.feature_arrays_ .readFromFile (ifile);
381+ out.truth_arrays_ .readFromFile (ifile);
382+ out.weight_arrays_ .readFromFile (ifile);
383+ return out;
384+ }
385+
386+ void trainData::priv_readSelfFromFileP (FILE *& ifile, const std::string& filename){
310387 checkFile (ifile, filename);
311388 readNested (feature_shapes_, ifile);
312389 readNested (truth_shapes_, ifile);
@@ -315,12 +392,6 @@ void trainData::priv_readFromFile(std::string filename, bool memcp){
315392 feature_arrays_ .readFromFile (ifile);
316393 truth_arrays_.readFromFile (ifile);
317394 weight_arrays_.readFromFile (ifile);
318-
319- fclose (ifile);
320- if (buf){
321- delete buf;
322- }
323-
324395}
325396
326397void trainData::readMetaDataFromFile (const std::string& filename){
0 commit comments