int64 KeyedSparseTensorColumn<int64>::Feature(int64 batch, int64 n,
                                              bool strong_hash) const {
  const int64 start = feature_start_indices_[batch];
  if (strong_hash) {
    if (DT_STRING == values_.dtype()) {
      return StrongKeyedHash(key_, values_.vec<tstring>()(start + n));
    }
    return StrongKeyedHash(
        key_, {reinterpret_cast<const char*>(&values_.vec<int64>()(start + n)),
               sizeof(values_.dtype())});
  }
  if (DT_STRING == values_.dtype())
    return Fingerprint64(values_.vec<tstring>()(start + n));
  return Fingerprint64(
      {reinterpret_cast<const char*>(&values_.vec<int64>()(start + n)),
       sizeof(values_.dtype())});
}
int64 KeyedSparseTensorColumn<int64>::Feature(int64 batch, int64 n,
                                              bool strong_hash) const {
  const int64 start = feature_start_indices_[batch];
  if (strong_hash) {
    if (DT_STRING == values_.dtype()) {
      return StrongKeyedHash(key_, values_.vec<tstring>()(start + n));
    }
    return StrongKeyedHash(
        key_, {reinterpret_cast<const char*>(&values_.vec<int64>()(start + n)),
               sizeof(values_.dtype())});
  }
  if (DT_STRING == values_.dtype())
    return Fingerprint64(values_.vec<tstring>()(start + n));
  return Fingerprint64(
      {reinterpret_cast<const char*>(&values_.vec<int64>()(start + n)),
       sizeof(values_.dtype())});
}