diff --git a/pub/lib/mem.cpp b/pub/lib/mem.cpp index fc3beb975d239140d7d32721eeb3ff605035c739..6c8a0b6a36d0cd70a2e74f45aeb8c6b35a193875 100644 --- a/pub/lib/mem.cpp +++ b/pub/lib/mem.cpp @@ -77,6 +77,7 @@ namespace NOlm { //! Store file f in online memory. If overwrite and k!=-1, overwrite file k. void mem_store( POlo f, int k ) { + f->check_integrity(); if( overwrite && k!=-1 ){ // replace file k if( k>=MOM.size() ) diff --git a/pub/lib/olf.cpp b/pub/lib/olf.cpp index 77e910f0e5805234545a92f6e940408cefa333d4..5b5e037d94a0c646b1bb06aab01950de4bb1ae20 100644 --- a/pub/lib/olf.cpp +++ b/pub/lib/olf.cpp @@ -59,6 +59,17 @@ string COlo::info_line( int j ) const } +//! Check integrity, to be called before accepting a new file into online memory. + +void COlo::check_integrity() const +{ + if( nJ()<1 ) + throw S("BUG: File has no slices"); + if( nJ()>1 && nZ()<1 ) + throw S("BUG: File has several slices but no z coordinate"); +} + + //! Return value of iz-th z-variable for slice j. RObj COlo::z( int j, int iz ) const diff --git a/pub/lib/olf.hpp b/pub/lib/olf.hpp index 0dfe3612f7169663168f0226a27f90d65ff035d3..b03ba567ac7beafa18cee26da198a7cf37c77498 100644 --- a/pub/lib/olf.hpp +++ b/pub/lib/olf.hpp @@ -32,6 +32,7 @@ class COlo { void remove_z( int iz ); string info_line( int j ) const; + void check_integrity() const; virtual void copy_mainvec( ROlo fin ) =0;