changed NULL to nullptr to avoid ambiguous coding
changed termination conditions and add option for assigning step
updated README.md, TODO.md, documentations