...well, it was removed from mainline CNTK code. My old DBN.exe reader code inside still needs it, so it has just been moved under the rug (HTKMLFReader project). Unused code was deleted from the basetypes.h under the rug;
DataReader.h no longer includes lattice-related header files (keeping MS-propietary stuff out from inclusion in mainline CNTK code);
fileutil.h is no longer included by mainline CNTK code. Instead #include "File.h". Some day we will merge the two;
removed a 'using namespace std;' from fileutil.h, and dealt with the fallout
now separates the question of the MB being sequential or not from the matrix memory allocation. There are now explicit variables for time steps, parallel sequences, and whether it is sequential. Meanwhile, memory allocation of the matrix/vector happen lazily once the first non-zero bit is set;
when an MBLayout is created or reset with Init(), the caller must say whether the minibatch is sequential (requires sentence handling) or not (specifically HTKMLFReader, as it supports both kinds);
MBLayout::GetSize() is gone (it was redundant)
renamed ...NbrSlicesEachRecurrentIter to ...NumParallelSequences;
also MBLayout::GetNumStreams() to GetNumTimeSteps() and GetNumFrames() to GetNumTimeSteps()
Added flag to indicate the condition of no feature (with assumption that there is also no label) to support efficient bi-directional model training.
Updated the windows version of HTKMLFReader, LM and LU Sequence readers.
Caution: this change will not allow for using past and future label information in the recurrent networks. The ultimate solution is to have a flag for each feature read-in. However, this will require huge change and we will do this after reader refactorization to reduce effort.
This bug will be exposed when sentence length > 1024 frames. In that case,
after 1024 frames, the EvalReader only fetches values in the first 1024
frames, and the writer will not write to the values after 1024 frames.
unified Error() and ERROR() functions to RuntimeError() defined in basetypes.h, and eliminated message.h altogether (it was only used for ERROR);
new method LogicError()--note: some RuntimeError() calls really should be LogicError()s, need to fix as we notice them