Following directions in perlguts (http://perldoc.perl.org/perlguts.html#How-do-I-use-all-this-in-extensions%3f) update AM.xs to properly pass around the interpreter context on multi-threaded Perls. This is required because of the addition of `#define PERL_NO_GET_CONTEXT` in 5313ef8. AM.xs now compiles without error now.
Work on #27. This diff is mostly whitespace. Add brackets to lines 785 and 1028, and indent the code in between. Add the headers at the top for slightly better efficiency. NO_XSLOCKS seems to fix problems on ActiveState Perl/Windows with memory freeing problems. For one example see: https://rt.cpan.org/Public/Bug/Display.html?id=62150. PERL_NO_GET_CONTEXT will allow correctly written code to work better with multithreaded perls. If it's not a multithreaded per,l the macro does nothing. I generally include them as a result of some crazy cpan smoke test combination failure.
Add an explanation for the terms used in the software and what the more correct terms mean in AM. The `outcome` method does not yet exist, and needs to be implemented in a future commit. Generally update to make documentation clearer. Rename variables for clarity, as well.
The newest release of CT changed the behavior of `BUILD`, filtering unknown arguments from it and calling it after the constructor, and it changed the handling of unknownn arguments from failing to ignoring. Fix the tests which broke as a result of this change.
The usage of `linear_flag` confused me into thinking that it was a flag for linear counting, when it actually signalled quadratic counting. Change it so that it does signal linear counting, and update AM.pm to treat it this way. `true ? 1 : 0` is way less confusing than `true ? 0 : 1`.
Eliminate a massive amount of code duplication. The code for combining sublattices and for counting occurrences was completely duplicated by an if/else block check for the quadratic/linear setting. There are about 25 lines that are needed only for quadratic counting, but the rest are exactly the same for both blocks. Partitioning off 25 special lines and then combine the rest. About 120 lines eliminated, and the program is now much easier to follow.
Supracontext instersection is written out 4 times, and the finalizing intersection is written out twice. Make a separate function for each, reducing the size and confusion of the file. This will also make it easier to generalize to a variable number of sublattices. Add comments anywhere the opportunity presents itself.
`active_feats` is a bad name, since it implies that it contains a list of the features that are active. Change it to `lattice_sizes`, because it contains the size in features of each lattice. Change this variable so that it is passed into `_fillandcount`, instead of being saved in `$self` and needing to be edited in place instead of being assigned to.
The indenting of some very nested, very long loop structures was reduced by a significant amount, and in some places indent was not done, or done strangely. Reindent the entire file with 2 spaces. Note that the comment on line 341 must not be un-indented; leaving no indent prevents the file from compiling because of the XS pre-processor misinterpreting it as a function declaration.
`Data` was originally used throughout the code base to mean training items. Remove this usage entirely, (especially) including documentation. This required the change of one public facing method: `test_in_data`, was changed to `test_in_train`. Update `Changes`.