diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-05-12 15:59:20 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-05-25 06:57:22 +0000 |
commit | f7eaed5286974984ba5f9e3189d8f49d03e99f81 (patch) | |
tree | caed19b2af2024f35449fb0b781d0a25e09d4f8f /chromium/third_party/nearby/src/connections/payload.h | |
parent | 9729c4479fe23554eae6e6dd1f30ff488f470c84 (diff) | |
download | qtwebengine-chromium-f7eaed5286974984ba5f9e3189d8f49d03e99f81.tar.gz |
BASELINE: Update Chromium to 100.0.4896.167
Change-Id: I98cbeb5d7543d966ffe04d8cefded0c493a11333
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/third_party/nearby/src/connections/payload.h')
-rw-r--r-- | chromium/third_party/nearby/src/connections/payload.h | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/chromium/third_party/nearby/src/connections/payload.h b/chromium/third_party/nearby/src/connections/payload.h new file mode 100644 index 00000000000..e82505a0fdc --- /dev/null +++ b/chromium/third_party/nearby/src/connections/payload.h @@ -0,0 +1,104 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef CORE_PAYLOAD_H_ +#define CORE_PAYLOAD_H_ + +#include <cstdint> +#include <functional> +#include <memory> +#include <utility> + +#include "absl/types/variant.h" +#include "internal/platform/byte_array.h" +#include "internal/platform/input_stream.h" +#include "internal/platform/payload_id.h" +#include "internal/platform/prng.h" +#include "internal/platform/core_config.h" +#include "internal/platform/file.h" +#include "internal/platform/logging.h" + +namespace location { +namespace nearby { +namespace connections { + +// Payload is default-constructible, and moveable, but not copyable container +// that holds at most one instance of one of: +// ByteArray, InputStream, or InputFile. +class DLL_API Payload { + public: + using Id = PayloadId; + // Order of types in variant, and values in Type enum is important. + // Enum values must match respective variant types. + using Content = absl::variant<absl::monostate, ByteArray, + std::function<InputStream&()>, InputFile>; + enum class Type { kUnknown = 0, kBytes = 1, kStream = 2, kFile = 3 }; + + Payload(Payload&& other) noexcept; + ~Payload(); + Payload& operator=(Payload&& other) noexcept; + + // Default (invalid) payload. + Payload(); + + // Constructors for outgoing payloads. + explicit Payload(ByteArray&& bytes); + + explicit Payload(const ByteArray& bytes); + explicit Payload(InputFile file); + explicit Payload(std::function<InputStream&()> stream); + + // Constructors for incoming payloads. + Payload(Id id, ByteArray&& bytes); + Payload(Id id, const ByteArray& bytes); + Payload(Id id, InputFile file); + Payload(Id id, std::function<InputStream&()> stream); + + + // Returns ByteArray payload, if it has been defined, or empty ByteArray. + const ByteArray& AsBytes() const&; + ByteArray&& AsBytes() &&; + // Returns InputStream* payload, if it has been defined, or nullptr. + InputStream* AsStream(); + // Returns InputFile* payload, if it has been defined, or nullptr. + InputFile* AsFile(); + + // Returns Payload unique ID. + Id GetId() const; + + // Returns Payload type. + Type GetType() const; + + // Sets the payload offset in bytes + void SetOffset(size_t offset); + + size_t GetOffset(); + + // Generate Payload Id; to be passed to outgoing file constructor. + static Id GenerateId(); + + private: + Type FindType() const; + + Content content_; + Id id_{GenerateId()}; + Type type_{FindType()}; + size_t offset_{0}; +}; + +} // namespace connections +} // namespace nearby +} // namespace location + +#endif // CORE_PAYLOAD_H_ |