Add license and remove unneeded pragma.
Clean up and move includes.
Add documentation and stream operator.
Documentation.
Clearer variable names.