Add support for optional fields in FixedLengthDeltaEncoder
Optional fields are those which only occur sometimes. For example, the sequence number field in an RTP packet always occurs, but fields in optional RTP extensions only occur sometimes. Bug: webrtc:8111 Change-Id: Iff2c35b73530c0a1db68e547b4caf34434aa4ace Reviewed-on: https://webrtc-review.googlesource.com/c/103362 Commit-Queue: Elad Alon <eladalon@webrtc.org> Reviewed-by: Björn Terelius <terelius@webrtc.org> Cr-Commit-Position: refs/heads/master@{#25336}
This commit is contained in:
@ -14,6 +14,8 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "absl/types/optional.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
// Encode |values| as a sequence of deltas following on |base| and return it.
|
||||
@ -22,7 +24,9 @@ namespace webrtc {
|
||||
// |base| is not guaranteed to be written into |output|, and must therefore
|
||||
// be provided separately to the decoder.
|
||||
// This function never fails.
|
||||
std::string EncodeDeltas(uint64_t base, const std::vector<uint64_t>& values);
|
||||
// TODO(eladalon): Split into optional and non-optional variants (efficiency).
|
||||
std::string EncodeDeltas(absl::optional<uint64_t> base,
|
||||
const std::vector<absl::optional<uint64_t>>& values);
|
||||
|
||||
// EncodeDeltas() and DecodeDeltas() are inverse operations;
|
||||
// invoking DecodeDeltas() over the output of EncodeDeltas(), will return
|
||||
@ -30,9 +34,11 @@ std::string EncodeDeltas(uint64_t base, const std::vector<uint64_t>& values);
|
||||
// |num_of_deltas| must be greater than zero. If input is not a valid encoding
|
||||
// of |num_of_deltas| elements based on |base|, the function returns an empty
|
||||
// vector, which signals an error.
|
||||
std::vector<uint64_t> DecodeDeltas(const std::string& input,
|
||||
uint64_t base,
|
||||
size_t num_of_deltas);
|
||||
// TODO(eladalon): Split into optional and non-optional variants (efficiency).
|
||||
std::vector<absl::optional<uint64_t>> DecodeDeltas(
|
||||
const std::string& input,
|
||||
absl::optional<uint64_t> base,
|
||||
size_t num_of_deltas);
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
|
||||
Reference in New Issue
Block a user