Clean up `iterable.h`:

* Remove public `IteratorT<Iterable>`. It is used only internally.

* Remove support for `Dependency` from `HasMovableElements` and
  `MaybeMakeMoveIterator`. The iterable is only a value type, possibly const,
  or a reference, without interpreting pointers, `std::unique_ptr` etc.

  This is rarely needed, and this makes the traits conceptually simpler,
  more similar to lower level traits.

  (The only usage of a type providing an iterable through `Dependency`,
  as opposed to an iterable itself, is in some pending code. That code can
  resolve `Dependency` itself.)

* Let `ElementType` reflect the semantics of `MaybeMakeMoveIterator()`,
  returning the right kind of reference or value.

  This propagates to `IsIterableOf`. In particular if the element type is
  movable but not copyable, the iterable must support moving elements out.

* Add `IsIterableOfPairs`. It is the more basic version of
  `IsIterableOfPairsWithAssignableValues`, where values are read rather than
  being assigned to.

* Add `IterableHasSize`.

PiperOrigin-RevId: 882968287
5 files changed
tree: 1a138a52819cc85fcffd29e35dbfc7ebefda4dad
  1. doc/
  2. python/
  3. riegeli/
  4. tf_dependency/
  5. .bazelrc
  6. configure
  7. CONTRIBUTING.md
  8. LICENSE
  9. MANIFEST.in
  10. MODULE.bazel
  11. README.md
README.md

Riegeli

Riegeli/records is a file format for storing a sequence of string records, typically serialized protocol buffers. It supports dense compression, fast decoding, seeking, detection and optional skipping of data corruption, filtering of proto message fields for even faster decoding, and parallel encoding.

See documentation.

Status

Riegeli file format will only change in a backward compatible way (i.e. future readers will understand current files, but current readers might not understand files using future features).

Riegeli C++ API might change in incompatible ways.