keep encode_full pure virtual