add __cmp__