Merge branch 'develop', remote-tracking branch 'origin'
support unordered_map if possible
support std::tr1::unordered_map
use xor_ instead of xor
support reset