Rework conditional disabling of copy/move constructor/assignment:

* Replace `ConditionallyCopyable` with separate `ConditionallyConstructible`
  and `ConditionallyAssignable`, which can separately disable copying and
  moving (moving = copying by default).

* Extend `ConditionallyAssignable` so that it can separately disable copying and
  moving.

* Remove `CopyableLike`. It can be expressed using `ConditionallyConstructible`
  and `ConditionallyAssignable`.

This is more verbose but also more explicit. This encourages more careful
thinking which operations are actually depended on, e.g. copy assignment of
an object holding a `T` might be implemented using copy construction of `T`,
while move assignment might be present unconditionally.

Document some purposes of `ConditionallyCopyable` and `ConditionallyAssignable`.

Prefer deriving from them privately. Defaulted special member functions already
depend on private members, this is an extension of that.

PiperOrigin-RevId: 884551257
5 files changed
tree: 354476fbc29fafb2301fdec58f7518249897bdab
  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.