#include "sys.hpp" // for libcwd #include "debug.hpp" // for libcwd #include "stimulussequence.hpp" #include using namespace std; StimulusSequence::StimulusSequence(): SeqPointer(0), Length(0) { } StimulusSequence::StimulusSequence( const char* _SequenceFileName): SequenceFileName(_SequenceFileName), SeqPointer(0), Length(0) { Load(SequenceFileName.c_str()); } bool StimulusSequence::Load(const char* _SequenceFileName) { int StrLen; Dout(dc::input, "open sequence file: " << _SequenceFileName << ""); fflush(stdout); //! \todo check if file exists, check length of header FILE* fw = fopen(_SequenceFileName, "r"); fread(&StrLen, sizeof(StrLen), 1, fw); char FileTypeString[StrLen]; fread(&FileTypeString, StrLen, 1, fw); fread(&StrLen, sizeof(StrLen), 1, fw); char VersionString[StrLen]; fread(&VersionString, StrLen, 1, fw); Dout(dc::input, "finfo=" << FileTypeString << ""); Dout(dc::input, "Version=" << VersionString << ""); fflush(stdout); char StimBytes; //! \todo check if file size is consistant with Length and StimBytes fread(&StimBytes, sizeof(StimBytes), 1, fw); int MinStim, MaxStim; fread(&Length, sizeof(Length), 1, fw); fread(&MinStim, sizeof(MinStim), 1, fw); fread(&MaxStim, sizeof(MaxStim),1,fw); switch (StimBytes) { case 1: { char* sequence = new char [Length]; fread(sequence, sizeof(*sequence), Length, fw); CurStimSequence = vector(Length); for (int i=0; i(sequence, sequence+Length); delete [] sequence; // for (int i=0; i(Length); int CurNr=0; // create sorted list for (int i=0; i 0) { ++SeqPointer; if (SeqPointer>=Length) SeqPointer=0; return int(CurStimSequence[SeqPointer]); } else { cerr << "ERROR: Stimulus sequence has zero length.\n"; return 0; } } int StimulusSequence::GetNextRandomElement(const gsl_rng* gslr) { if (Length > 0) { SeqPointer = gsl_rng_uniform_int(gslr, Length); return int(CurStimSequence[SeqPointer]); } else return 0; }