You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by fg...@apache.org on 2023/07/11 13:37:29 UTC
[nifi-minifi-cpp] 02/04: MINIFICPP-1755 - Use std::span instead of gsl::span
This is an automated email from the ASF dual-hosted git repository.
fgerlits pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit 68991c705af21cc3f28de98a85295da36e3b15b3
Author: Adam Debreceni <ad...@apache.org>
AuthorDate: Fri Jun 2 10:50:21 2023 +0200
MINIFICPP-1755 - Use std::span instead of gsl::span
Signed-off-by: Ferenc Gerlits <fg...@gmail.com>
This closes #1584
---
extensions/aws/processors/PutS3Object.h | 2 +-
extensions/azure/storage/AzureBlobStorage.cpp | 2 +-
extensions/azure/storage/AzureBlobStorage.h | 2 +-
.../azure/storage/AzureBlobStorageClient.cpp | 7 ++--
extensions/azure/storage/AzureBlobStorageClient.h | 2 +-
extensions/azure/storage/AzureDataLakeStorage.cpp | 2 +-
extensions/azure/storage/AzureDataLakeStorage.h | 2 +-
.../azure/storage/AzureDataLakeStorageClient.cpp | 5 ++-
.../azure/storage/AzureDataLakeStorageClient.h | 7 ++--
extensions/azure/storage/BlobStorageClient.h | 2 +-
extensions/azure/storage/DataLakeStorageClient.h | 2 +-
extensions/coap/controllerservice/CoapResponse.h | 2 +-
extensions/coap/protocols/CoapC2Protocol.cpp | 3 +-
extensions/gcp/processors/PutGCSObject.cpp | 2 +-
extensions/http-curl/client/HTTPCallback.h | 2 +-
extensions/http-curl/client/HTTPStream.cpp | 2 +-
extensions/http-curl/client/HTTPStream.h | 2 +-
extensions/http-curl/protocols/RESTSender.cpp | 2 +-
extensions/http-curl/tests/C2CompressTest.cpp | 5 ++-
extensions/http-curl/tests/C2DebugBundleTest.cpp | 4 +-
extensions/http-curl/tests/CivetStream.h | 2 +-
extensions/jni/jvm/JniReferenceObjects.h | 2 +-
extensions/libarchive/ReadArchiveStream.cpp | 2 +-
extensions/libarchive/ReadArchiveStream.h | 4 +-
extensions/librdkafka/rdkafka_utils.cpp | 16 ++------
extensions/librdkafka/rdkafka_utils.h | 2 +-
extensions/lua/LuaInputStream.cpp | 2 +-
extensions/opencv/MotionDetector.cpp | 2 +-
extensions/rocksdb-repos/RocksDbRepository.cpp | 3 +-
extensions/rocksdb-repos/RocksDbStream.cpp | 16 ++------
extensions/rocksdb-repos/RocksDbStream.h | 2 +-
.../encryption/RocksDbEncryptionProvider.cpp | 4 +-
.../processors/ExecuteProcess.cpp | 2 +-
.../processors/ExecuteProcess.h | 2 +-
.../standard-processors/processors/ExtractText.cpp | 2 +-
.../standard-processors/processors/PutTCP.cpp | 5 ++-
extensions/systemd/ConsumeJournald.cpp | 4 +-
extensions/systemd/ConsumeJournald.h | 2 +-
libminifi/include/FlowFileRecord.h | 2 +-
libminifi/include/c2/C2Payload.h | 8 +++-
libminifi/include/c2/protocols/RESTProtocol.h | 2 +-
libminifi/include/core/ConfigurableComponent.h | 2 +-
libminifi/include/core/Connectable.h | 4 +-
libminifi/include/core/ProcessSession.h | 8 ++--
libminifi/include/core/flow/Node.h | 2 +-
.../include/core/repository/AtomicRepoEntries.h | 13 +++---
libminifi/include/io/AtomicEntryStream.h | 4 +-
libminifi/include/io/BufferStream.h | 6 +--
libminifi/include/io/CRCStream.h | 2 +-
libminifi/include/io/ClientSocket.h | 4 +-
libminifi/include/io/DescriptorStream.h | 2 +-
libminifi/include/io/FileStream.h | 2 +-
libminifi/include/io/InputStream.h | 2 +-
libminifi/include/io/OutputStream.h | 2 +-
libminifi/include/io/Stream.h | 3 +-
libminifi/include/io/StreamSlice.h | 4 +-
libminifi/include/io/tls/SecureDescriptorStream.h | 2 +-
libminifi/include/io/tls/TLSSocket.h | 4 +-
libminifi/include/sitetosite/Peer.h | 2 +-
libminifi/include/utils/ByteArrayCallback.h | 2 +-
libminifi/include/utils/JsonCallback.h | 2 +-
libminifi/include/utils/StringUtils.h | 17 ++++----
libminifi/include/utils/crypto/ciphers/Aes256Ecb.h | 4 +-
libminifi/include/utils/gsl.h | 18 +--------
libminifi/include/utils/{gsl.h => span.h} | 35 +++++++---------
libminifi/src/c2/C2Agent.cpp | 2 +-
libminifi/src/c2/C2Payload.cpp | 14 ++-----
libminifi/src/c2/protocols/RESTProtocol.cpp | 5 +--
libminifi/src/core/ConfigurableComponent.cpp | 2 +-
libminifi/src/core/Connectable.cpp | 4 +-
libminifi/src/core/ProcessSession.cpp | 12 +++---
libminifi/src/core/Repository.cpp | 2 +-
.../src/core/repository/VolatileRepository.cpp | 2 +-
libminifi/src/io/BufferStream.cpp | 14 ++-----
libminifi/src/io/ClientSocket.cpp | 2 +-
libminifi/src/io/DescriptorStream.cpp | 15 ++-----
libminifi/src/io/FileStream.cpp | 2 +-
libminifi/src/io/StreamSlice.cpp | 4 +-
libminifi/src/io/tls/SecureDescriptorStream.cpp | 2 +-
libminifi/src/io/tls/TLSSocket.cpp | 4 +-
libminifi/src/utils/BaseHTTPClient.cpp | 4 +-
.../utils/LineByLineInputOutputStreamCallback.cpp | 3 +-
libminifi/src/utils/StringUtils.cpp | 10 ++---
libminifi/src/utils/crypto/EncryptionUtils.cpp | 19 +++------
libminifi/src/utils/crypto/ciphers/Aes256Ecb.cpp | 26 ++++--------
libminifi/src/utils/file/FileUtils.cpp | 4 +-
libminifi/test/TestBase.cpp | 3 +-
libminifi/test/Utils.h | 4 +-
.../test/archive-tests/ArchiveStreamTests.cpp | 2 +-
.../test/archive-tests/CompressContentTests.cpp | 2 +-
libminifi/test/archive-tests/MergeFileTests.cpp | 7 ++--
libminifi/test/azure-tests/MockBlobStorage.h | 5 ++-
.../test/azure-tests/MockDataLakeStorageClient.h | 6 ++-
libminifi/test/rocksdb-tests/EncryptionTests.cpp | 3 +-
.../test/rocksdb-tests/RocksDBStreamTests.cpp | 4 +-
libminifi/test/rocksdb-tests/SwapTests.cpp | 2 +-
libminifi/test/unit/FileStreamTests.cpp | 2 +-
libminifi/test/unit/FileSystemRepositoryTests.cpp | 4 +-
libminifi/test/unit/FlowFileSerializationTests.cpp | 5 ++-
.../LineByLineInputOutputStreamCallbackTests.cpp | 5 ++-
libminifi/test/unit/LoggerTests.cpp | 3 +-
libminifi/test/unit/ProvenanceTestHelper.h | 3 +-
libminifi/test/unit/SiteToSiteHelper.h | 2 +-
libminifi/test/unit/{GslTest.cpp => SpanTests.cpp} | 14 +++++--
libminifi/test/unit/StreamTests.cpp | 5 ++-
libminifi/test/unit/StringUtilsTests.cpp | 46 +++++++++-------------
libminifi/test/unit/ZlibStreamTests.cpp | 5 ++-
nanofi/tests/CSite2SiteTests.cpp | 4 +-
108 files changed, 259 insertions(+), 320 deletions(-)
diff --git a/extensions/aws/processors/PutS3Object.h b/extensions/aws/processors/PutS3Object.h
index 4763c6e2f..81c0faa0d 100644
--- a/extensions/aws/processors/PutS3Object.h
+++ b/extensions/aws/processors/PutS3Object.h
@@ -116,7 +116,7 @@ class PutS3Object : public S3Processor {
read_size_ = 0;
while (read_size_ < flow_size_) {
const auto next_read_size = (std::min)(flow_size_ - read_size_, BUFFER_SIZE);
- const auto read_ret = stream->read(gsl::make_span(buffer).subspan(0, next_read_size));
+ const auto read_ret = stream->read(std::span(buffer).subspan(0, next_read_size));
if (io::isError(read_ret)) {
return -1;
}
diff --git a/extensions/azure/storage/AzureBlobStorage.cpp b/extensions/azure/storage/AzureBlobStorage.cpp
index a5d9ec5b7..a00f5481b 100644
--- a/extensions/azure/storage/AzureBlobStorage.cpp
+++ b/extensions/azure/storage/AzureBlobStorage.cpp
@@ -43,7 +43,7 @@ std::optional<bool> AzureBlobStorage::createContainerIfNotExists(const PutAzureB
}
}
-std::optional<UploadBlobResult> AzureBlobStorage::uploadBlob(const PutAzureBlobStorageParameters& params, gsl::span<const std::byte> buffer) {
+std::optional<UploadBlobResult> AzureBlobStorage::uploadBlob(const PutAzureBlobStorageParameters& params, std::span<const std::byte> buffer) {
try {
logger_->log_debug("Uploading Azure blob %s to container %s", params.blob_name, params.container_name);
auto response = blob_storage_client_->uploadBlob(params, buffer);
diff --git a/extensions/azure/storage/AzureBlobStorage.h b/extensions/azure/storage/AzureBlobStorage.h
index 8b7f9b16e..305da5451 100644
--- a/extensions/azure/storage/AzureBlobStorage.h
+++ b/extensions/azure/storage/AzureBlobStorage.h
@@ -64,7 +64,7 @@ class AzureBlobStorage {
public:
explicit AzureBlobStorage(std::unique_ptr<BlobStorageClient> blob_storage_client = nullptr);
std::optional<bool> createContainerIfNotExists(const PutAzureBlobStorageParameters& params);
- std::optional<UploadBlobResult> uploadBlob(const PutAzureBlobStorageParameters& params, gsl::span<const std::byte> buffer);
+ std::optional<UploadBlobResult> uploadBlob(const PutAzureBlobStorageParameters& params, std::span<const std::byte> buffer);
bool deleteBlob(const DeleteAzureBlobStorageParameters& params);
std::optional<uint64_t> fetchBlob(const FetchAzureBlobStorageParameters& params, io::OutputStream& stream);
std::optional<ListContainerResult> listContainer(const ListAzureBlobStorageParameters& params);
diff --git a/extensions/azure/storage/AzureBlobStorageClient.cpp b/extensions/azure/storage/AzureBlobStorageClient.cpp
index f83302ded..b64c1e367 100644
--- a/extensions/azure/storage/AzureBlobStorageClient.cpp
+++ b/extensions/azure/storage/AzureBlobStorageClient.cpp
@@ -26,6 +26,7 @@
#include "azure/storage/blobs/blob_options.hpp"
#include "utils/AzureSdkLogger.h"
+#include "utils/span.h"
namespace org::apache::nifi::minifi::azure::storage {
@@ -40,8 +41,8 @@ class AzureBlobStorageInputStream : public io::InputStream {
return result_.BodyStream->Length();
}
- size_t read(gsl::span<std::byte> buffer) override {
- const auto uint8_t_view = buffer.as_span<uint8_t>();
+ size_t read(std::span<std::byte> buffer) override {
+ const auto uint8_t_view = minifi::utils::as_span<uint8_t>(buffer);
return result_.BodyStream->Read(uint8_t_view.data(), uint8_t_view.size());
}
@@ -71,7 +72,7 @@ bool AzureBlobStorageClient::createContainerIfNotExists(const PutAzureBlobStorag
return container_client->CreateIfNotExists().Value.Created;
}
-Azure::Storage::Blobs::Models::UploadBlockBlobResult AzureBlobStorageClient::uploadBlob(const PutAzureBlobStorageParameters& params, gsl::span<const std::byte> buffer) {
+Azure::Storage::Blobs::Models::UploadBlockBlobResult AzureBlobStorageClient::uploadBlob(const PutAzureBlobStorageParameters& params, std::span<const std::byte> buffer) {
auto container_client = createClient(params.credentials, params.container_name);
auto blob_client = container_client->GetBlockBlobClient(params.blob_name);
return blob_client.UploadFrom(reinterpret_cast<const uint8_t*>(buffer.data()), buffer.size()).Value;
diff --git a/extensions/azure/storage/AzureBlobStorageClient.h b/extensions/azure/storage/AzureBlobStorageClient.h
index 325f4ef24..29455e888 100644
--- a/extensions/azure/storage/AzureBlobStorageClient.h
+++ b/extensions/azure/storage/AzureBlobStorageClient.h
@@ -36,7 +36,7 @@ class AzureBlobStorageClient : public BlobStorageClient {
public:
AzureBlobStorageClient();
bool createContainerIfNotExists(const PutAzureBlobStorageParameters& params) override;
- Azure::Storage::Blobs::Models::UploadBlockBlobResult uploadBlob(const PutAzureBlobStorageParameters& params, gsl::span<const std::byte> buffer) override;
+ Azure::Storage::Blobs::Models::UploadBlockBlobResult uploadBlob(const PutAzureBlobStorageParameters& params, std::span<const std::byte> buffer) override;
std::string getUrl(const AzureBlobStorageParameters& params) override;
bool deleteBlob(const DeleteAzureBlobStorageParameters& params) override;
std::unique_ptr<io::InputStream> fetchBlob(const FetchAzureBlobStorageParameters& params) override;
diff --git a/extensions/azure/storage/AzureDataLakeStorage.cpp b/extensions/azure/storage/AzureDataLakeStorage.cpp
index 9f575428c..dde6f8255 100644
--- a/extensions/azure/storage/AzureDataLakeStorage.cpp
+++ b/extensions/azure/storage/AzureDataLakeStorage.cpp
@@ -59,7 +59,7 @@ AzureDataLakeStorage::AzureDataLakeStorage(std::unique_ptr<DataLakeStorageClient
: data_lake_storage_client_(data_lake_storage_client ? std::move(data_lake_storage_client) : std::make_unique<AzureDataLakeStorageClient>()) {
}
-UploadDataLakeStorageResult AzureDataLakeStorage::uploadFile(const PutAzureDataLakeStorageParameters& params, gsl::span<const std::byte> buffer) {
+UploadDataLakeStorageResult AzureDataLakeStorage::uploadFile(const PutAzureDataLakeStorageParameters& params, std::span<const std::byte> buffer) {
UploadDataLakeStorageResult result;
logger_->log_debug("Uploading file '%s/%s' to Azure Data Lake Storage filesystem '%s'", params.directory_name, params.filename, params.file_system_name);
try {
diff --git a/extensions/azure/storage/AzureDataLakeStorage.h b/extensions/azure/storage/AzureDataLakeStorage.h
index 6e1756c0f..587ec5f0d 100644
--- a/extensions/azure/storage/AzureDataLakeStorage.h
+++ b/extensions/azure/storage/AzureDataLakeStorage.h
@@ -67,7 +67,7 @@ class AzureDataLakeStorage {
public:
explicit AzureDataLakeStorage(std::unique_ptr<DataLakeStorageClient> data_lake_storage_client = nullptr);
- storage::UploadDataLakeStorageResult uploadFile(const storage::PutAzureDataLakeStorageParameters& params, gsl::span<const std::byte> buffer);
+ storage::UploadDataLakeStorageResult uploadFile(const storage::PutAzureDataLakeStorageParameters& params, std::span<const std::byte> buffer);
bool deleteFile(const storage::DeleteAzureDataLakeStorageParameters& params);
std::optional<uint64_t> fetchFile(const FetchAzureDataLakeStorageParameters& params, io::OutputStream& stream);
std::optional<ListDataLakeStorageResult> listDirectory(const ListAzureDataLakeStorageParameters& params);
diff --git a/extensions/azure/storage/AzureDataLakeStorageClient.cpp b/extensions/azure/storage/AzureDataLakeStorageClient.cpp
index d64ba296b..0b5e97079 100644
--- a/extensions/azure/storage/AzureDataLakeStorageClient.cpp
+++ b/extensions/azure/storage/AzureDataLakeStorageClient.cpp
@@ -27,6 +27,7 @@
#include "azure/identity.hpp"
#include "utils/AzureSdkLogger.h"
+#include "utils/span.h"
namespace org::apache::nifi::minifi::azure::storage {
@@ -70,9 +71,9 @@ bool AzureDataLakeStorageClient::createFile(const PutAzureDataLakeStorageParamet
return response.Value.Created;
}
-std::string AzureDataLakeStorageClient::uploadFile(const PutAzureDataLakeStorageParameters& params, gsl::span<const std::byte> buffer) {
+std::string AzureDataLakeStorageClient::uploadFile(const PutAzureDataLakeStorageParameters& params, std::span<const std::byte> buffer) {
auto file_client = getFileClient(params);
- file_client.UploadFrom(buffer.as_span<const uint8_t>().data(), buffer.size());
+ file_client.UploadFrom(minifi::utils::as_span<const uint8_t>(buffer).data(), buffer.size());
return file_client.GetUrl();
}
diff --git a/extensions/azure/storage/AzureDataLakeStorageClient.h b/extensions/azure/storage/AzureDataLakeStorageClient.h
index 2e9fd98ac..c8eecf0a2 100644
--- a/extensions/azure/storage/AzureDataLakeStorageClient.h
+++ b/extensions/azure/storage/AzureDataLakeStorageClient.h
@@ -29,6 +29,7 @@
#include "DataLakeStorageClient.h"
#include "core/logging/Logger.h"
#include "core/logging/LoggerConfiguration.h"
+#include "utils/span.h"
namespace org::apache::nifi::minifi::azure::storage {
@@ -49,7 +50,7 @@ class AzureDataLakeStorageClient : public DataLakeStorageClient {
* @param buffer Buffer containing the data to be uploaded
* @return URI of the file uploaded
*/
- std::string uploadFile(const PutAzureDataLakeStorageParameters& params, gsl::span<const std::byte> buffer) override;
+ std::string uploadFile(const PutAzureDataLakeStorageParameters& params, std::span<const std::byte> buffer) override;
/**
* Deletes a file on the Azure Data Lake Storage
@@ -83,8 +84,8 @@ class AzureDataLakeStorageClient : public DataLakeStorageClient {
return result_.Body->Length();
}
- size_t read(gsl::span<std::byte> out_buffer) override {
- return result_.Body->Read(out_buffer.as_span<uint8_t>().data(), out_buffer.size());
+ size_t read(std::span<std::byte> out_buffer) override {
+ return result_.Body->Read(utils::as_span<uint8_t>(out_buffer).data(), out_buffer.size());
}
private:
diff --git a/extensions/azure/storage/BlobStorageClient.h b/extensions/azure/storage/BlobStorageClient.h
index efa2f8dfc..ddbc9bf33 100644
--- a/extensions/azure/storage/BlobStorageClient.h
+++ b/extensions/azure/storage/BlobStorageClient.h
@@ -66,7 +66,7 @@ struct ListAzureBlobStorageParameters : public AzureBlobStorageParameters {
class BlobStorageClient {
public:
virtual bool createContainerIfNotExists(const PutAzureBlobStorageParameters& params) = 0;
- virtual Azure::Storage::Blobs::Models::UploadBlockBlobResult uploadBlob(const PutAzureBlobStorageParameters& params, gsl::span<const std::byte> buffer) = 0;
+ virtual Azure::Storage::Blobs::Models::UploadBlockBlobResult uploadBlob(const PutAzureBlobStorageParameters& params, std::span<const std::byte> buffer) = 0;
virtual std::string getUrl(const AzureBlobStorageParameters& params) = 0;
virtual bool deleteBlob(const DeleteAzureBlobStorageParameters& params) = 0;
virtual std::unique_ptr<io::InputStream> fetchBlob(const FetchAzureBlobStorageParameters& params) = 0;
diff --git a/extensions/azure/storage/DataLakeStorageClient.h b/extensions/azure/storage/DataLakeStorageClient.h
index 17d43c0bb..4fd653daf 100644
--- a/extensions/azure/storage/DataLakeStorageClient.h
+++ b/extensions/azure/storage/DataLakeStorageClient.h
@@ -65,7 +65,7 @@ struct ListAzureDataLakeStorageParameters : public AzureDataLakeStorageParameter
class DataLakeStorageClient {
public:
virtual bool createFile(const PutAzureDataLakeStorageParameters& params) = 0;
- virtual std::string uploadFile(const PutAzureDataLakeStorageParameters& params, gsl::span<const std::byte> buffer) = 0;
+ virtual std::string uploadFile(const PutAzureDataLakeStorageParameters& params, std::span<const std::byte> buffer) = 0;
virtual bool deleteFile(const DeleteAzureDataLakeStorageParameters& params) = 0;
virtual std::unique_ptr<io::InputStream> fetchFile(const FetchAzureDataLakeStorageParameters& params) = 0;
virtual std::vector<Azure::Storage::Files::DataLake::Models::PathItem> listDirectory(const ListAzureDataLakeStorageParameters& params) = 0;
diff --git a/extensions/coap/controllerservice/CoapResponse.h b/extensions/coap/controllerservice/CoapResponse.h
index 53145c645..f7d3f0ba0 100644
--- a/extensions/coap/controllerservice/CoapResponse.h
+++ b/extensions/coap/controllerservice/CoapResponse.h
@@ -54,7 +54,7 @@ class CoapResponse {
CoapResponse(CoapResponse &&other) = default;
~CoapResponse() = default;
- [[nodiscard]] gsl::span<const std::byte> getData() const noexcept {
+ [[nodiscard]] std::span<const std::byte> getData() const noexcept {
return data_;
}
diff --git a/extensions/coap/protocols/CoapC2Protocol.cpp b/extensions/coap/protocols/CoapC2Protocol.cpp
index 7e7968ac1..733065533 100644
--- a/extensions/coap/protocols/CoapC2Protocol.cpp
+++ b/extensions/coap/protocols/CoapC2Protocol.cpp
@@ -22,6 +22,7 @@
#include "io/OutputStream.h"
#include "core/Resource.h"
#include "utils/gsl.h"
+#include "utils/span.h"
namespace org::apache::nifi::minifi::coap::c2 {
@@ -242,7 +243,7 @@ minifi::c2::C2Payload CoapProtocol::serialize(const minifi::c2::C2Payload &paylo
size_t bsize = stream.size();
CoapMessage msg;
- msg.data_ = const_cast<uint8_t *>(stream.getBuffer().as_span<const uint8_t>().data());
+ msg.data_ = const_cast<uint8_t *>(utils::as_span<const uint8_t>(stream.getBuffer()).data());
msg.size_ = bsize;
coap::controllers::CoapResponse message = coap_service_->sendPayload(COAP_REQUEST_POST, endpoint, &msg);
diff --git a/extensions/gcp/processors/PutGCSObject.cpp b/extensions/gcp/processors/PutGCSObject.cpp
index 52a3c433f..563661474 100644
--- a/extensions/gcp/processors/PutGCSObject.cpp
+++ b/extensions/gcp/processors/PutGCSObject.cpp
@@ -40,7 +40,7 @@ class UploadToGCSCallback {
int64_t operator()(const std::shared_ptr<io::InputStream>& stream) {
std::string content;
content.resize(stream->size());
- const auto read_ret = stream->read(gsl::make_span(content).as_span<std::byte>());
+ const auto read_ret = stream->read(as_writable_bytes(std::span(content)));
if (io::isError(read_ret)) {
return -1;
}
diff --git a/extensions/http-curl/client/HTTPCallback.h b/extensions/http-curl/client/HTTPCallback.h
index 1a9281727..55751e468 100644
--- a/extensions/http-curl/client/HTTPCallback.h
+++ b/extensions/http-curl/client/HTTPCallback.h
@@ -85,7 +85,7 @@ class HttpStreamingCallback final : public utils::HTTPUploadByteArrayInputCallba
}
void write(std::string content) override {
- (void) processInner(utils::span_to<std::vector>(gsl::make_span(content).as_span<std::byte>()));
+ (void) processInner(utils::span_to<std::vector>(as_bytes(std::span(content))));
}
std::byte* getBuffer(size_t pos) override {
diff --git a/extensions/http-curl/client/HTTPStream.cpp b/extensions/http-curl/client/HTTPStream.cpp
index 48ad3ad27..ca8b53b10 100644
--- a/extensions/http-curl/client/HTTPStream.cpp
+++ b/extensions/http-curl/client/HTTPStream.cpp
@@ -72,7 +72,7 @@ size_t HttpStream::write(const uint8_t* value, size_t size) {
return size;
}
-size_t HttpStream::read(gsl::span<std::byte> buf) {
+size_t HttpStream::read(std::span<std::byte> buf) {
if (buf.empty()) { return 0; }
if (!IsNullOrEmpty(buf)) {
if (!started_) {
diff --git a/extensions/http-curl/client/HTTPStream.h b/extensions/http-curl/client/HTTPStream.h
index ada04beae..ed910cdf8 100644
--- a/extensions/http-curl/client/HTTPStream.h
+++ b/extensions/http-curl/client/HTTPStream.h
@@ -89,7 +89,7 @@ class HttpStream : public io::BaseStream {
* @param buf buffer in which we extract data
* @param buflen
*/
- size_t read(gsl::span<std::byte> buf) override;
+ size_t read(std::span<std::byte> buf) override;
/**
* writes value to stream
diff --git a/extensions/http-curl/protocols/RESTSender.cpp b/extensions/http-curl/protocols/RESTSender.cpp
index 0d188af84..382d311f2 100644
--- a/extensions/http-curl/protocols/RESTSender.cpp
+++ b/extensions/http-curl/protocols/RESTSender.cpp
@@ -140,7 +140,7 @@ C2Payload RESTSender::sendPayload(const std::string& url, const Direction direct
io::BufferStream compressed_payload;
bool compression_success = [&] {
io::ZlibCompressStream compressor(gsl::make_not_null(&compressed_payload), io::ZlibCompressionFormat::GZIP, Z_BEST_COMPRESSION);
- auto ret = compressor.write(gsl::span<const char>(data.value()).as_span<const std::byte>());
+ auto ret = compressor.write(as_bytes(std::span(data.value())));
if (ret != data->length()) {
return false;
}
diff --git a/extensions/http-curl/tests/C2CompressTest.cpp b/extensions/http-curl/tests/C2CompressTest.cpp
index 673cdd55e..e0ea8974d 100644
--- a/extensions/http-curl/tests/C2CompressTest.cpp
+++ b/extensions/http-curl/tests/C2CompressTest.cpp
@@ -35,6 +35,7 @@
#include "range/v3/view/transform.hpp"
#include "utils/IntegrationTestUtils.h"
#include "utils/StringUtils.h"
+#include "utils/span.h"
#include "properties/Configuration.h"
#include "io/ZlibStream.h"
@@ -50,10 +51,10 @@ class CompressedHeartbeatHandler : public HeartbeatHandler {
minifi::io::BufferStream output;
{
minifi::io::ZlibDecompressStream decompressor(gsl::make_not_null(&output));
- auto ret = decompressor.write(gsl::span<const char>(payload).as_span<const std::byte>());
+ auto ret = decompressor.write(as_bytes(std::span(payload)));
assert(ret == payload.size());
}
- auto str_span = output.getBuffer().as_span<const char>();
+ auto str_span = utils::as_span<const char>(output.getBuffer());
return {str_span.data(), str_span.size()};
}
diff --git a/extensions/http-curl/tests/C2DebugBundleTest.cpp b/extensions/http-curl/tests/C2DebugBundleTest.cpp
index 6001b3f99..b4d531255 100644
--- a/extensions/http-curl/tests/C2DebugBundleTest.cpp
+++ b/extensions/http-curl/tests/C2DebugBundleTest.cpp
@@ -168,7 +168,7 @@ int main() {
while (auto info = decompressor->nextEntry()) {
std::string file_content;
file_content.resize(info->size);
- assert(decompressor->read(gsl::make_span(file_content).as_span<std::byte>()) ==
+ assert(decompressor->read(as_writable_bytes(std::span(file_content))) ==
file_content.length());
archive_content[info->filename] = std::move(file_content);
}
@@ -182,7 +182,7 @@ int main() {
}
std::string log_text;
log_text.resize(log_stream->size());
- log_stream->read(gsl::make_span(log_text).as_span<std::byte>());
+ log_stream->read(as_writable_bytes(std::span(log_text)));
assert(log_text.find("Tis but a scratch") != std::string::npos);
return true;
});
diff --git a/extensions/http-curl/tests/CivetStream.h b/extensions/http-curl/tests/CivetStream.h
index a963503ee..94acdd71a 100644
--- a/extensions/http-curl/tests/CivetStream.h
+++ b/extensions/http-curl/tests/CivetStream.h
@@ -43,7 +43,7 @@ class CivetStream : public io::InputStream {
* @param buf buffer in which we extract data
* @param buflen
*/
- size_t read(gsl::span<std::byte> buf) override {
+ size_t read(std::span<std::byte> buf) override {
const auto ret = mg_read(conn, buf.data(), buf.size());
if (ret < 0) return STREAM_ERROR;
return gsl::narrow<size_t>(ret);
diff --git a/extensions/jni/jvm/JniReferenceObjects.h b/extensions/jni/jvm/JniReferenceObjects.h
index 028089863..407555e7d 100644
--- a/extensions/jni/jvm/JniReferenceObjects.h
+++ b/extensions/jni/jvm/JniReferenceObjects.h
@@ -109,7 +109,7 @@ class JniByteInputStream {
int read = 0;
do {
// JNI takes size as int, there's not much we can do here to support 2GB+ sizes
- int actual = static_cast<int>(stream_->read(gsl::make_span(buffer_).subspan(0, std::min(remaining, buffer_.size()))));
+ int actual = static_cast<int>(stream_->read(std::span(buffer_).subspan(0, std::min(remaining, buffer_.size()))));
if (actual <= 0) {
if (read == 0) {
stream_ = nullptr;
diff --git a/extensions/libarchive/ReadArchiveStream.cpp b/extensions/libarchive/ReadArchiveStream.cpp
index 556658403..afd3ac01d 100644
--- a/extensions/libarchive/ReadArchiveStream.cpp
+++ b/extensions/libarchive/ReadArchiveStream.cpp
@@ -65,7 +65,7 @@ std::optional<EntryInfo> ReadArchiveStreamImpl::nextEntry() {
return EntryInfo{archive_entry_pathname(entry), entry_size_.value()};
}
-size_t ReadArchiveStreamImpl::read(const gsl::span<std::byte> out_buffer) {
+size_t ReadArchiveStreamImpl::read(const std::span<std::byte> out_buffer) {
if (!arch_ || !entry_size_) {
return STREAM_ERROR;
}
diff --git a/extensions/libarchive/ReadArchiveStream.h b/extensions/libarchive/ReadArchiveStream.h
index 566a4c862..155463c44 100644
--- a/extensions/libarchive/ReadArchiveStream.h
+++ b/extensions/libarchive/ReadArchiveStream.h
@@ -42,7 +42,7 @@ class ReadArchiveStreamImpl : public ReadArchiveStream {
public:
explicit BufferedReader(std::shared_ptr<InputStream> input) : input_(std::move(input)) {}
- std::optional<gsl::span<const std::byte>> readChunk() {
+ std::optional<std::span<const std::byte>> readChunk() {
size_t result = input_->read(buffer_);
if (io::isError(result)) {
return std::nullopt;
@@ -66,7 +66,7 @@ class ReadArchiveStreamImpl : public ReadArchiveStream {
using InputStream::read;
- size_t read(gsl::span<std::byte> out_buffer) override;
+ size_t read(std::span<std::byte> out_buffer) override;
private:
static la_ssize_t archive_read(struct archive* archive, void *context, const void **buff) {
diff --git a/extensions/librdkafka/rdkafka_utils.cpp b/extensions/librdkafka/rdkafka_utils.cpp
index 3532ab566..58b68ce58 100644
--- a/extensions/librdkafka/rdkafka_utils.cpp
+++ b/extensions/librdkafka/rdkafka_utils.cpp
@@ -22,11 +22,7 @@
#include "Exception.h"
#include "utils/StringUtils.h"
-namespace org {
-namespace apache {
-namespace nifi {
-namespace minifi {
-namespace utils {
+namespace org::apache::nifi::minifi::utils {
void setKafkaConfigurationField(rd_kafka_conf_t& configuration, const std::string& field_name, const std::string& value) {
static std::array<char, 512U> errstr{};
@@ -55,7 +51,7 @@ std::string get_human_readable_kafka_message_timestamp(const rd_kafka_message_t&
} else if (tstype == RD_KAFKA_TIMESTAMP_LOG_APPEND_TIME) {
tsname = "log append time";
}
- const int64_t seconds_since_timestamp = timestamp == -1 ? 0 : static_cast<int64_t>(time(NULL)) - static_cast<int64_t>(timestamp / 1000);
+ const int64_t seconds_since_timestamp = timestamp == -1 ? 0 : static_cast<int64_t>(time(nullptr)) - static_cast<int64_t>(timestamp / 1000);
return {"[Timestamp](" + std::string(tsname) + " " + std::to_string(timestamp) + " (" + std::to_string(seconds_since_timestamp) + " s ago)"};
}
@@ -64,7 +60,7 @@ std::string get_human_readable_kafka_message_headers(const rd_kafka_message_t& r
const rd_kafka_resp_err_t get_header_response = rd_kafka_message_headers(&rkmessage, &hdrs);
if (RD_KAFKA_RESP_ERR_NO_ERROR == get_header_response) {
std::vector<std::string> header_list;
- kafka_headers_for_each(*hdrs, [&] (const std::string& key, gsl::span<const char> val) { header_list.emplace_back(key + ": " + std::string{ val.data(), val.size() }); });
+ kafka_headers_for_each(*hdrs, [&] (const std::string& key, std::span<const char> val) { header_list.emplace_back(key + ": " + std::string{ val.data(), val.size() }); });
return StringUtils::join(", ", header_list);
}
if (RD_KAFKA_RESP_ERR__NOENT == get_header_response) {
@@ -114,8 +110,4 @@ std::optional<std::string> get_encoded_message_key(const rd_kafka_message_t& mes
return get_encoded_string({reinterpret_cast<const char*>(message.key), message.key_len}, encoding);
}
-} // namespace utils
-} // namespace minifi
-} // namespace nifi
-} // namespace apache
-} // namespace org
+} // namespace org::apache::nifi::minifi::utils
diff --git a/extensions/librdkafka/rdkafka_utils.h b/extensions/librdkafka/rdkafka_utils.h
index 7c2e1bfb6..8f89605ab 100644
--- a/extensions/librdkafka/rdkafka_utils.h
+++ b/extensions/librdkafka/rdkafka_utils.h
@@ -89,7 +89,7 @@ void kafka_headers_for_each(const rd_kafka_headers_t& headers, T key_value_handl
const void *value;
std::size_t size;
for (std::size_t i = 0; RD_KAFKA_RESP_ERR_NO_ERROR == rd_kafka_header_get_all(&headers, i, &key, &value, &size); ++i) {
- key_value_handle(std::string(key), gsl::span<const char>(static_cast<const char*>(value), size));
+ key_value_handle(std::string(key), std::span<const char>(static_cast<const char*>(value), size));
}
}
diff --git a/extensions/lua/LuaInputStream.cpp b/extensions/lua/LuaInputStream.cpp
index 050a7f355..9a6a9cb20 100644
--- a/extensions/lua/LuaInputStream.cpp
+++ b/extensions/lua/LuaInputStream.cpp
@@ -48,7 +48,7 @@ std::string LuaInputStream::read(size_t len) {
// 0 <= n < s.size()."
//
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf
- const auto read = stream_->read(gsl::make_span(buffer).as_span<std::byte>());
+ const auto read = stream_->read(as_writable_bytes(std::span(buffer)));
if (!io::isError(read) && read != len) {
buffer.resize(read);
}
diff --git a/extensions/opencv/MotionDetector.cpp b/extensions/opencv/MotionDetector.cpp
index 75c7cf5be..ee46840d8 100644
--- a/extensions/opencv/MotionDetector.cpp
+++ b/extensions/opencv/MotionDetector.cpp
@@ -155,7 +155,7 @@ void MotionDetector::onTrigger(const std::shared_ptr<core::ProcessContext> &cont
session->read(flow_file, [&frame](const std::shared_ptr<io::InputStream>& input_stream) -> int64_t {
std::vector<uchar> image_buf;
image_buf.resize(input_stream->size());
- const auto ret = input_stream->read(gsl::make_span(image_buf).as_span<std::byte>());
+ const auto ret = input_stream->read(as_writable_bytes(std::span(image_buf)));
if (io::isError(ret) || ret != input_stream->size()) {
throw std::runtime_error("ImageReadCallback failed to fully read flow file input stream");
}
diff --git a/extensions/rocksdb-repos/RocksDbRepository.cpp b/extensions/rocksdb-repos/RocksDbRepository.cpp
index 02a735395..7fda56f8e 100644
--- a/extensions/rocksdb-repos/RocksDbRepository.cpp
+++ b/extensions/rocksdb-repos/RocksDbRepository.cpp
@@ -15,6 +15,7 @@
* limitations under the License.
*/
#include "RocksDbRepository.h"
+#include "utils/span.h"
using namespace std::literals::chrono_literals;
@@ -71,7 +72,7 @@ bool RocksDbRepository::MultiPut(const std::vector<std::pair<std::string, std::u
}
auto batch = opendb->createWriteBatch();
for (const auto &item : data) {
- const auto buf = item.second->getBuffer().as_span<const char>();
+ const auto buf = utils::as_span<const char>(item.second->getBuffer());
rocksdb::Slice value(buf.data(), buf.size());
if (!batch.Put(item.first, value).ok()) {
logger_->log_error("Failed to add item to batch operation");
diff --git a/extensions/rocksdb-repos/RocksDbStream.cpp b/extensions/rocksdb-repos/RocksDbStream.cpp
index fdfe7e0bb..856132535 100644
--- a/extensions/rocksdb-repos/RocksDbStream.cpp
+++ b/extensions/rocksdb-repos/RocksDbStream.cpp
@@ -25,11 +25,8 @@
#include <string>
#include <Exception.h>
#include "io/validation.h"
-namespace org {
-namespace apache {
-namespace nifi {
-namespace minifi {
-namespace io {
+
+namespace org::apache::nifi::minifi::io {
RocksDbStream::RocksDbStream(std::string path, gsl::not_null<minifi::internal::RocksDatabase*> db, bool write_enable, minifi::internal::WriteBatch* batch)
: BaseStream(),
@@ -78,7 +75,7 @@ size_t RocksDbStream::write(const uint8_t *value, size_t size) {
}
}
-size_t RocksDbStream::read(gsl::span<std::byte> buf) {
+size_t RocksDbStream::read(std::span<std::byte> buf) {
// The check have to be in this order for RocksDBStreamTest "Read zero bytes" to succeed
if (!exists_) return STREAM_ERROR;
if (buf.empty()) return 0;
@@ -90,9 +87,4 @@ size_t RocksDbStream::read(gsl::span<std::byte> buf) {
return amtToRead;
}
-} /* namespace io */
-} /* namespace minifi */
-} /* namespace nifi */
-} /* namespace apache */
-} /* namespace org */
-
+} // namespace org::apache::nifi::minifi::io
diff --git a/extensions/rocksdb-repos/RocksDbStream.h b/extensions/rocksdb-repos/RocksDbStream.h
index d75493d1e..e8fbe7ff3 100644
--- a/extensions/rocksdb-repos/RocksDbStream.h
+++ b/extensions/rocksdb-repos/RocksDbStream.h
@@ -71,7 +71,7 @@ class RocksDbStream : public io::BaseStream {
* @param buf buffer in which we extract data
* @param buflen
*/
- size_t read(gsl::span<std::byte> buf) override;
+ size_t read(std::span<std::byte> buf) override;
/**
* writes value to stream
diff --git a/extensions/rocksdb-repos/encryption/RocksDbEncryptionProvider.cpp b/extensions/rocksdb-repos/encryption/RocksDbEncryptionProvider.cpp
index f1a85ac82..ffeead877 100644
--- a/extensions/rocksdb-repos/encryption/RocksDbEncryptionProvider.cpp
+++ b/extensions/rocksdb-repos/encryption/RocksDbEncryptionProvider.cpp
@@ -88,7 +88,7 @@ std::shared_ptr<rocksdb::Env> createEncryptingEnv(const utils::crypto::Encryptio
rocksdb::Status AES256BlockCipher::Encrypt(char *data) {
try {
- cipher_impl_.encrypt({reinterpret_cast<unsigned char*>(data), Aes256EcbCipher::BLOCK_SIZE});
+ cipher_impl_.encrypt(std::span<unsigned char, Aes256EcbCipher::BLOCK_SIZE>{reinterpret_cast<unsigned char*>(data), Aes256EcbCipher::BLOCK_SIZE});
return rocksdb::Status::OK();
} catch (const utils::crypto::CipherError& error) {
logger_->log_error("Error while encrypting in database '%s': %s", database_, error.what());
@@ -98,7 +98,7 @@ rocksdb::Status AES256BlockCipher::Encrypt(char *data) {
rocksdb::Status AES256BlockCipher::Decrypt(char *data) {
try {
- cipher_impl_.decrypt({reinterpret_cast<unsigned char*>(data), Aes256EcbCipher::BLOCK_SIZE});
+ cipher_impl_.decrypt(std::span<unsigned char, Aes256EcbCipher::BLOCK_SIZE>{reinterpret_cast<unsigned char*>(data), Aes256EcbCipher::BLOCK_SIZE});
return rocksdb::Status::OK();
} catch (const utils::crypto::CipherError& error) {
logger_->log_error("Error while decrypting in database '%s': %s", database_, error.what());
diff --git a/extensions/standard-processors/processors/ExecuteProcess.cpp b/extensions/standard-processors/processors/ExecuteProcess.cpp
index a643f9be9..942f3ff1c 100644
--- a/extensions/standard-processors/processors/ExecuteProcess.cpp
+++ b/extensions/standard-processors/processors/ExecuteProcess.cpp
@@ -162,7 +162,7 @@ void ExecuteProcess::readOutputInBatches(core::ProcessSession& session) {
}
}
-bool ExecuteProcess::writeToFlowFile(core::ProcessSession& session, std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const char> buffer) const {
+bool ExecuteProcess::writeToFlowFile(core::ProcessSession& session, std::shared_ptr<core::FlowFile>& flow_file, std::span<const char> buffer) const {
if (!flow_file) {
flow_file = session.create();
if (!flow_file) {
diff --git a/extensions/standard-processors/processors/ExecuteProcess.h b/extensions/standard-processors/processors/ExecuteProcess.h
index 38c0b06d6..2ca16b893 100644
--- a/extensions/standard-processors/processors/ExecuteProcess.h
+++ b/extensions/standard-processors/processors/ExecuteProcess.h
@@ -95,7 +95,7 @@ class ExecuteProcess : public core::Processor {
void collectChildProcessOutput(core::ProcessSession& session);
void readOutputInBatches(core::ProcessSession& session);
void readOutput(core::ProcessSession& session);
- bool writeToFlowFile(core::ProcessSession& session, std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const char> buffer) const;
+ bool writeToFlowFile(core::ProcessSession& session, std::shared_ptr<core::FlowFile>& flow_file, std::span<const char> buffer) const;
std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ExecuteProcess>::getLogger(uuid_);
std::string command_;
diff --git a/extensions/standard-processors/processors/ExtractText.cpp b/extensions/standard-processors/processors/ExtractText.cpp
index bb5d8a46b..f21748fe6 100644
--- a/extensions/standard-processors/processors/ExtractText.cpp
+++ b/extensions/standard-processors/processors/ExtractText.cpp
@@ -117,7 +117,7 @@ int64_t ExtractText::ReadCallback::operator()(const std::shared_ptr<io::InputStr
while (read_size < size_limit) {
// Don't read more than config limit or the size of the buffer
const auto length = std::min(size_limit - read_size, buffer.size());
- const auto ret = stream->read(gsl::make_span(buffer).subspan(0, length));
+ const auto ret = stream->read(std::span(buffer).subspan(0, length));
if (io::isError(ret)) {
return -1; // Stream error
diff --git a/extensions/standard-processors/processors/PutTCP.cpp b/extensions/standard-processors/processors/PutTCP.cpp
index c5c2d7717..19144d8fb 100644
--- a/extensions/standard-processors/processors/PutTCP.cpp
+++ b/extensions/standard-processors/processors/PutTCP.cpp
@@ -167,7 +167,8 @@ void PutTCP::onSchedule(core::ProcessContext* const context, core::ProcessSessio
}
}
- delimiter_ = utils::span_to<std::vector>(gsl::make_span(context->getProperty(OutgoingMessageDelimiter).value_or(std::string{})).as_span<const std::byte>());
+ const auto delimiter_str = context->getProperty(OutgoingMessageDelimiter).value_or(std::string{});
+ delimiter_ = utils::span_to<std::vector>(as_bytes(std::span(delimiter_str)));
if (auto max_size_of_socket_send_buffer = context->getProperty<core::DataSizeValue>(MaxSizeOfSocketSendBuffer))
max_size_of_socket_send_buffer_ = max_size_of_socket_send_buffer->getValue();
@@ -301,7 +302,7 @@ asio::awaitable<std::error_code> ConnectionHandler<SocketType>::send(const std::
std::vector<std::byte> data_chunk;
data_chunk.resize(chunk_size);
- gsl::span<std::byte> buffer{data_chunk};
+ std::span<std::byte> buffer{data_chunk};
while (stream_to_send->tell() < stream_to_send->size()) {
size_t num_read = stream_to_send->read(buffer);
if (io::isError(num_read))
diff --git a/extensions/systemd/ConsumeJournald.cpp b/extensions/systemd/ConsumeJournald.cpp
index b63ac1d2f..a617b2383 100644
--- a/extensions/systemd/ConsumeJournald.cpp
+++ b/extensions/systemd/ConsumeJournald.cpp
@@ -177,7 +177,7 @@ void ConsumeJournald::onTrigger(core::ProcessContext* const context, core::Proce
state_manager_->set({{"cursor", std::move(cursor_and_messages.first)}});
}
-std::optional<gsl::span<const char>> ConsumeJournald::enumerateJournalEntry(libwrapper::Journal& journal) {
+std::optional<std::span<const char>> ConsumeJournald::enumerateJournalEntry(libwrapper::Journal& journal) {
const void* data_ptr{};
size_t data_length{};
const auto status_code = journal.enumerateData(&data_ptr, &data_length);
@@ -190,7 +190,7 @@ std::optional<gsl::span<const char>> ConsumeJournald::enumerateJournalEntry(libw
}
std::optional<ConsumeJournald::journal_field> ConsumeJournald::getNextField(libwrapper::Journal& journal) {
- return enumerateJournalEntry(journal) | utils::map([](gsl::span<const char> field) {
+ return enumerateJournalEntry(journal) | utils::map([](std::span<const char> field) {
const auto eq_pos = std::find(std::begin(field), std::end(field), '=');
gsl_Ensures(eq_pos != std::end(field) && "field string must contain an equals sign");
const auto eq_idx = gsl::narrow<size_t>(eq_pos - std::begin(field));
diff --git a/extensions/systemd/ConsumeJournald.h b/extensions/systemd/ConsumeJournald.h
index bf037e7dc..482d6c6bd 100644
--- a/extensions/systemd/ConsumeJournald.h
+++ b/extensions/systemd/ConsumeJournald.h
@@ -104,7 +104,7 @@ class ConsumeJournald final : public core::Processor {
std::chrono::system_clock::time_point timestamp;
};
- static std::optional<gsl::span<const char>> enumerateJournalEntry(libwrapper::Journal&);
+ static std::optional<std::span<const char>> enumerateJournalEntry(libwrapper::Journal&);
static std::optional<journal_field> getNextField(libwrapper::Journal&);
std::future<std::pair<std::string, std::vector<journal_message>>> getCursorAndMessageBatch();
std::string formatSyslogMessage(const journal_message&) const;
diff --git a/libminifi/include/FlowFileRecord.h b/libminifi/include/FlowFileRecord.h
index 141f3b4ba..928407e45 100644
--- a/libminifi/include/FlowFileRecord.h
+++ b/libminifi/include/FlowFileRecord.h
@@ -58,7 +58,7 @@ class FlowFileRecord : public core::FlowFile {
//! Serialize and Persistent to the repository
bool Persist(const std::shared_ptr<core::Repository>& flowRepository);
- static std::shared_ptr<FlowFileRecord> DeSerialize(gsl::span<const std::byte> buffer, const std::shared_ptr<core::ContentRepository> &content_repo, utils::Identifier &container) {
+ static std::shared_ptr<FlowFileRecord> DeSerialize(std::span<const std::byte> buffer, const std::shared_ptr<core::ContentRepository> &content_repo, utils::Identifier &container) {
io::BufferStream inStream{buffer};
return DeSerialize(inStream, content_repo, container);
}
diff --git a/libminifi/include/c2/C2Payload.h b/libminifi/include/c2/C2Payload.h
index de8790a3a..decf9af46 100644
--- a/libminifi/include/c2/C2Payload.h
+++ b/libminifi/include/c2/C2Payload.h
@@ -29,6 +29,7 @@
#include "core/state/UpdateController.h"
#include "utils/Enum.h"
#include "utils/gsl.h"
+#include "utils/span.h"
namespace org {
namespace apache {
@@ -200,13 +201,16 @@ class C2Payload : public state::Update {
*/
void setRawData(const std::string&);
void setRawData(const std::vector<char>&);
- void setRawData(gsl::span<const std::byte>);
+ void setRawData(std::span<const std::byte>);
/**
* Returns raw data.
*/
[[nodiscard]] std::vector<std::byte> getRawData() const noexcept { return raw_data_; }
- [[nodiscard]] std::string getRawDataAsString() const { return utils::span_to<std::string>(gsl::make_span(getRawData()).as_span<const char>()); }
+ [[nodiscard]] std::string getRawDataAsString() const {
+ const auto raw_data = getRawData();
+ return utils::span_to<std::string>(utils::as_span<const char>(std::span(raw_data)));
+ }
[[nodiscard]] std::vector<std::byte> moveRawData() && {return std::move(raw_data_);}
/**
diff --git a/libminifi/include/c2/protocols/RESTProtocol.h b/libminifi/include/c2/protocols/RESTProtocol.h
index ebbeb9e4e..36c741278 100644
--- a/libminifi/include/c2/protocols/RESTProtocol.h
+++ b/libminifi/include/c2/protocols/RESTProtocol.h
@@ -43,7 +43,7 @@ class RESTProtocol : public HeartbeatJsonSerializer {
protected:
void initialize(core::controller::ControllerServiceProvider* controller, const std::shared_ptr<Configure> &configure);
void serializeNestedPayload(rapidjson::Value& target, const C2Payload& payload, rapidjson::Document::AllocatorType& alloc) override;
- static C2Payload parseJsonResponse(const C2Payload &payload, gsl::span<const std::byte> response);
+ static C2Payload parseJsonResponse(const C2Payload &payload, std::span<const std::byte> response);
private:
bool containsPayload(const C2Payload &o);
diff --git a/libminifi/include/core/ConfigurableComponent.h b/libminifi/include/core/ConfigurableComponent.h
index 895b6f49b..f92ac469c 100644
--- a/libminifi/include/core/ConfigurableComponent.h
+++ b/libminifi/include/core/ConfigurableComponent.h
@@ -104,7 +104,7 @@ class ConfigurableComponent {
*/
bool setProperty(const Property& prop, PropertyValue &value);
- void setSupportedProperties(gsl::span<const core::Property> properties);
+ void setSupportedProperties(std::span<const core::Property> properties);
/**
* Gets whether or not this processor supports dynamic properties.
diff --git a/libminifi/include/core/Connectable.h b/libminifi/include/core/Connectable.h
index f4a3e305a..aa91f2893 100644
--- a/libminifi/include/core/Connectable.h
+++ b/libminifi/include/core/Connectable.h
@@ -54,13 +54,13 @@ class Connectable : public CoreComponent {
Connectable& operator=(const Connectable &other) = delete;
Connectable& operator=(Connectable&& other) = delete;
- void setSupportedRelationships(gsl::span<const core::Relationship> relationships);
+ void setSupportedRelationships(std::span<const core::Relationship> relationships);
bool isSupportedRelationship(const Relationship &relationship);
std::vector<Relationship> getSupportedRelationships() const;
- void setAutoTerminatedRelationships(gsl::span<const core::Relationship> relationships);
+ void setAutoTerminatedRelationships(std::span<const core::Relationship> relationships);
bool isAutoTerminated(const Relationship &relationship);
diff --git a/libminifi/include/core/ProcessSession.h b/libminifi/include/core/ProcessSession.h
index 49d8efee7..2ba5f9cda 100644
--- a/libminifi/include/core/ProcessSession.h
+++ b/libminifi/include/core/ProcessSession.h
@@ -103,13 +103,13 @@ class ProcessSession : public ReferenceContainer {
// Read and write the flow file at the same time (eg. for processing it line by line)
int64_t readWrite(const std::shared_ptr<core::FlowFile> &flow, const io::InputOutputStreamCallback& callback);
// Replace content with buffer
- void writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const char> buffer);
- void writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const std::byte> buffer);
+ void writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, std::span<const char> buffer);
+ void writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, std::span<const std::byte> buffer);
// Execute the given write/append callback against the content
void append(const std::shared_ptr<core::FlowFile> &flow, const io::OutputStreamCallback& callback);
// Append buffer to content
- void appendBuffer(const std::shared_ptr<core::FlowFile>& flow, gsl::span<const char> buffer);
- void appendBuffer(const std::shared_ptr<core::FlowFile>& flow, gsl::span<const std::byte> buffer);
+ void appendBuffer(const std::shared_ptr<core::FlowFile>& flow, std::span<const char> buffer);
+ void appendBuffer(const std::shared_ptr<core::FlowFile>& flow, std::span<const std::byte> buffer);
// Penalize the flow
void penalize(const std::shared_ptr<core::FlowFile> &flow);
diff --git a/libminifi/include/core/flow/Node.h b/libminifi/include/core/flow/Node.h
index 1bd3ad7e2..12a9314b1 100644
--- a/libminifi/include/core/flow/Node.h
+++ b/libminifi/include/core/flow/Node.h
@@ -166,7 +166,7 @@ class Node {
}
// considers @keys to be a set of viable access paths, the first viable is returned
- Node operator[](gsl::span<const std::string> keys) const {
+ Node operator[](std::span<const std::string> keys) const {
for (auto& key : keys) {
if (Node result = (*this)[key]) {
return result;
diff --git a/libminifi/include/core/repository/AtomicRepoEntries.h b/libminifi/include/core/repository/AtomicRepoEntries.h
index 1c2437dd8..b81314c91 100644
--- a/libminifi/include/core/repository/AtomicRepoEntries.h
+++ b/libminifi/include/core/repository/AtomicRepoEntries.h
@@ -15,9 +15,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-#ifndef LIBMINIFI_INCLUDE_CORE_REPOSITORY_ATOMICREPOENTRIES_H_
-#define LIBMINIFI_INCLUDE_CORE_REPOSITORY_ATOMICREPOENTRIES_H_
+#pragma once
+
+#include <span>
#include <atomic>
#include <chrono>
#include <cstddef>
@@ -115,7 +116,7 @@ noexcept : key_(std::move(other.key_)),
[[nodiscard]] size_t size() const noexcept { return buffer_.size(); }
- [[nodiscard]] gsl::span<const std::byte> getBuffer() const {
+ [[nodiscard]] std::span<const std::byte> getBuffer() const {
return buffer_;
}
@@ -131,7 +132,7 @@ noexcept : key_(std::move(other.key_)),
* Appends data to the end of buffer.
* @param data data to add to buffer_
*/
- void append(gsl::span<const std::byte> data) {
+ void append(std::span<const std::byte> data) {
buffer_.insert(buffer_.end(), std::begin(data), std::end(data));
}
@@ -390,7 +391,7 @@ class AtomicEntry {
* Appends buffer onto this atomic entry if key matches
* the current RepoValue's key.
*/
- bool insert(const T key, gsl::span<const std::byte> buffer) {
+ bool insert(const T key, std::span<const std::byte> buffer) {
try_lock();
if (!has_value_) {
@@ -453,5 +454,3 @@ class AtomicEntry {
};
} // namespace org::apache::nifi::minifi::core::repository
-
-#endif // LIBMINIFI_INCLUDE_CORE_REPOSITORY_ATOMICREPOENTRIES_H_
diff --git a/libminifi/include/io/AtomicEntryStream.h b/libminifi/include/io/AtomicEntryStream.h
index dc3dc0581..ecb5a2b26 100644
--- a/libminifi/include/io/AtomicEntryStream.h
+++ b/libminifi/include/io/AtomicEntryStream.h
@@ -80,7 +80,7 @@ class AtomicEntryStream : public BaseStream {
* @param buf buffer in which we extract data
* @param buflen
*/
- size_t read(gsl::span<std::byte> buf) override;
+ size_t read(std::span<std::byte> buf) override;
/**
* writes value to stream
@@ -132,7 +132,7 @@ size_t AtomicEntryStream<T>::write(const uint8_t *value, size_t size) {
}
template<typename T>
-size_t AtomicEntryStream<T>::read(gsl::span<std::byte> buf) {
+size_t AtomicEntryStream<T>::read(std::span<std::byte> buf) {
if (buf.empty()) {
return 0;
}
diff --git a/libminifi/include/io/BufferStream.h b/libminifi/include/io/BufferStream.h
index 987cdcaf9..eb00c5dc8 100644
--- a/libminifi/include/io/BufferStream.h
+++ b/libminifi/include/io/BufferStream.h
@@ -35,7 +35,7 @@ class BufferStream : public BaseStream {
public:
BufferStream() = default;
- explicit BufferStream(gsl::span<const std::byte> buf) {
+ explicit BufferStream(std::span<const std::byte> buf) {
write(buf);
}
@@ -56,7 +56,7 @@ class BufferStream : public BaseStream {
size_t write(const uint8_t* value, size_t size) final;
- size_t read(gsl::span<std::byte> buffer) override;
+ size_t read(std::span<std::byte> buffer) override;
int initialize() override {
buffer_.clear();
@@ -78,7 +78,7 @@ class BufferStream : public BaseStream {
* Returns the underlying buffer
* @return vector's array
**/
- [[nodiscard]] gsl::span<const std::byte> getBuffer() const override {
+ [[nodiscard]] std::span<const std::byte> getBuffer() const override {
return buffer_;
}
diff --git a/libminifi/include/io/CRCStream.h b/libminifi/include/io/CRCStream.h
index 606f69275..7a0a41730 100644
--- a/libminifi/include/io/CRCStream.h
+++ b/libminifi/include/io/CRCStream.h
@@ -85,7 +85,7 @@ class InputCRCStream : public virtual CRCStreamBase<StreamType>, public InputStr
public:
using InputStream::read;
- size_t read(gsl::span<std::byte> buf) override {
+ size_t read(std::span<std::byte> buf) override {
const auto ret = child_stream_->read(buf);
if (ret > 0 && !io::isError(ret)) {
crc_ = crc32(crc_, reinterpret_cast<const unsigned char*>(buf.data()), gsl::narrow<uInt>(ret));
diff --git a/libminifi/include/io/ClientSocket.h b/libminifi/include/io/ClientSocket.h
index 5838159e1..4c8e8b528 100644
--- a/libminifi/include/io/ClientSocket.h
+++ b/libminifi/include/io/ClientSocket.h
@@ -137,7 +137,7 @@ class Socket : public BaseStream {
* @param buflen
* @param retrieve_all_bytes determines if we should read all bytes before returning
*/
- size_t read(gsl::span<std::byte> buf) override {
+ size_t read(std::span<std::byte> buf) override {
return read(buf, true);
}
@@ -147,7 +147,7 @@ class Socket : public BaseStream {
* @param buflen
* @param retrieve_all_bytes determines if we should read all bytes before returning
*/
- virtual size_t read(gsl::span<std::byte> buf, bool retrieve_all_bytes);
+ virtual size_t read(std::span<std::byte> buf, bool retrieve_all_bytes);
protected:
/**
diff --git a/libminifi/include/io/DescriptorStream.h b/libminifi/include/io/DescriptorStream.h
index e0e9bb224..cc12b0e2e 100644
--- a/libminifi/include/io/DescriptorStream.h
+++ b/libminifi/include/io/DescriptorStream.h
@@ -62,7 +62,7 @@ class DescriptorStream : public io::BaseStream {
* @param buf buffer in which we extract data
* @param buflen
*/
- size_t read(gsl::span<std::byte> buf) override;
+ size_t read(std::span<std::byte> buf) override;
/**
* writes value to stream
diff --git a/libminifi/include/io/FileStream.h b/libminifi/include/io/FileStream.h
index e30ee0836..b2cf40e14 100644
--- a/libminifi/include/io/FileStream.h
+++ b/libminifi/include/io/FileStream.h
@@ -74,7 +74,7 @@ class FileStream : public io::BaseStream {
* @param buf buffer in which we extract data
* @param buflen
*/
- size_t read(gsl::span<std::byte> buf) override;
+ size_t read(std::span<std::byte> buf) override;
/**
* writes value to stream
diff --git a/libminifi/include/io/InputStream.h b/libminifi/include/io/InputStream.h
index 2a9e89d05..f18c5655e 100644
--- a/libminifi/include/io/InputStream.h
+++ b/libminifi/include/io/InputStream.h
@@ -39,7 +39,7 @@ class InputStream : public virtual Stream {
* @param len length to read
* @return resulting read size or STREAM_ERROR on error or static_cast<size_t>(-2) on EAGAIN
**/
- virtual size_t read(gsl::span<std::byte> out_buffer) = 0;
+ virtual size_t read(std::span<std::byte> out_buffer) = 0;
/**
* Read string from stream. Use isError (Stream.h) to check for errors.
diff --git a/libminifi/include/io/OutputStream.h b/libminifi/include/io/OutputStream.h
index 24d34e1b8..c180b3684 100644
--- a/libminifi/include/io/OutputStream.h
+++ b/libminifi/include/io/OutputStream.h
@@ -47,7 +47,7 @@ class OutputStream : public virtual Stream {
**/
virtual size_t write(const uint8_t *value, size_t len) = 0;
- size_t write(const gsl::span<const std::byte> buffer) {
+ size_t write(const std::span<const std::byte> buffer) {
return write(reinterpret_cast<const uint8_t*>(buffer.data()), buffer.size());
}
diff --git a/libminifi/include/io/Stream.h b/libminifi/include/io/Stream.h
index 31547a3ea..048a475ca 100644
--- a/libminifi/include/io/Stream.h
+++ b/libminifi/include/io/Stream.h
@@ -18,6 +18,7 @@
#pragma once
+#include <span>
#include "utils/gsl.h"
namespace org::apache::nifi::minifi::io {
@@ -48,7 +49,7 @@ class Stream {
return 1;
}
- [[nodiscard]] virtual gsl::span<const std::byte> getBuffer() const {
+ [[nodiscard]] virtual std::span<const std::byte> getBuffer() const {
throw std::runtime_error("Not a buffered stream");
}
diff --git a/libminifi/include/io/StreamSlice.h b/libminifi/include/io/StreamSlice.h
index cb6976290..dbce76a8f 100644
--- a/libminifi/include/io/StreamSlice.h
+++ b/libminifi/include/io/StreamSlice.h
@@ -35,7 +35,7 @@ class StreamSlice : public InputStream {
// from InputStream
size_t size() const override { return slice_size_; }
- size_t read(gsl::span<std::byte> out_buffer) override;
+ size_t read(std::span<std::byte> out_buffer) override;
// from Stream
void close() override { stream_->close(); }
@@ -43,7 +43,7 @@ class StreamSlice : public InputStream {
void seek(size_t offset) override;
[[nodiscard]] size_t tell() const override;
- [[nodiscard]] gsl::span<const std::byte> getBuffer() const override;
+ [[nodiscard]] std::span<const std::byte> getBuffer() const override;
private:
std::shared_ptr<io::InputStream> stream_;
diff --git a/libminifi/include/io/tls/SecureDescriptorStream.h b/libminifi/include/io/tls/SecureDescriptorStream.h
index d2a2416e1..66177d83b 100644
--- a/libminifi/include/io/tls/SecureDescriptorStream.h
+++ b/libminifi/include/io/tls/SecureDescriptorStream.h
@@ -71,7 +71,7 @@ class SecureDescriptorStream : public io::BaseStream {
* @param buf buffer in which we extract data
* @param buflen
*/
- size_t read(gsl::span<std::byte> buf) override;
+ size_t read(std::span<std::byte> buf) override;
/**
* writes value to stream
diff --git a/libminifi/include/io/tls/TLSSocket.h b/libminifi/include/io/tls/TLSSocket.h
index 2ed107b7f..9f648a789 100644
--- a/libminifi/include/io/tls/TLSSocket.h
+++ b/libminifi/include/io/tls/TLSSocket.h
@@ -131,14 +131,14 @@ class TLSSocket : public Socket {
using Socket::read;
using Socket::write;
- size_t read(gsl::span<std::byte> buf, bool retrieve_all_bytes) override;
+ size_t read(std::span<std::byte> buf, bool retrieve_all_bytes) override;
/**
* Reads data and places it into buf
* @param buf buffer in which we extract data
* @param buflen
*/
- size_t read(gsl::span<std::byte> buf) override;
+ size_t read(std::span<std::byte> buf) override;
/**
* Write value to the stream using uint8_t ptr
diff --git a/libminifi/include/sitetosite/Peer.h b/libminifi/include/sitetosite/Peer.h
index 543dd52f2..860bd590d 100644
--- a/libminifi/include/sitetosite/Peer.h
+++ b/libminifi/include/sitetosite/Peer.h
@@ -289,7 +289,7 @@ class SiteToSitePeer : public org::apache::nifi::minifi::io::BaseStream {
return stream_->write(data, len);
}
- size_t read(gsl::span<std::byte> data) override {
+ size_t read(std::span<std::byte> data) override {
return stream_->read(data);
}
diff --git a/libminifi/include/utils/ByteArrayCallback.h b/libminifi/include/utils/ByteArrayCallback.h
index 9d1fb4c85..12daf1526 100644
--- a/libminifi/include/utils/ByteArrayCallback.h
+++ b/libminifi/include/utils/ByteArrayCallback.h
@@ -51,7 +51,7 @@ class ByteInputCallback {
virtual void seek(size_t) { }
virtual void write(std::string content) {
- vec = utils::span_to<std::vector>(gsl::make_span(content).as_span<std::byte>());
+ vec = utils::span_to<std::vector>(as_bytes(std::span(content)));
}
void setBuffer(std::vector<std::byte> data) {
diff --git a/libminifi/include/utils/JsonCallback.h b/libminifi/include/utils/JsonCallback.h
index 4c37afce0..c455e6c34 100644
--- a/libminifi/include/utils/JsonCallback.h
+++ b/libminifi/include/utils/JsonCallback.h
@@ -39,7 +39,7 @@ class JsonInputCallback {
int64_t operator()(const std::shared_ptr<io::InputStream>& stream) {
std::string content;
content.resize(stream->size());
- const auto read_ret = stream->read(gsl::make_span(content).as_span<std::byte>());
+ const auto read_ret = stream->read(as_writable_bytes(std::span(content)));
if (io::isError(read_ret)) {
return -1;
}
diff --git a/libminifi/include/utils/StringUtils.h b/libminifi/include/utils/StringUtils.h
index 2e6f7285c..9effff8ea 100644
--- a/libminifi/include/utils/StringUtils.h
+++ b/libminifi/include/utils/StringUtils.h
@@ -34,6 +34,7 @@
#endif
#include "utils/FailurePolicy.h"
#include "utils/gsl.h"
+#include "utils/span.h"
#include "utils/meta/detected.h"
#include "range/v3/view/transform.hpp"
#include "range/v3/range/conversion.hpp"
@@ -361,7 +362,8 @@ class StringUtils {
*/
static std::vector<std::byte> from_hex(std::string_view hex);
static std::string from_hex(std::string_view hex, as_string_tag_t) {
- return utils::span_to<std::string>(gsl::make_span(from_hex(hex)).as_span<const char>());
+ const auto decoded = from_hex(hex);
+ return utils::span_to<std::string>(utils::as_span<const char>(std::span(decoded)));
}
@@ -373,7 +375,7 @@ class StringUtils {
* @param uppercase whether the hexencoded string should be upper case
* @return the size of hexencoded bytes
*/
- static size_t to_hex(char* hex, gsl::span<const std::byte> data_to_be_transformed, bool uppercase);
+ static size_t to_hex(char* hex, std::span<const std::byte> data_to_be_transformed, bool uppercase);
/**
* Creates a hexencoded string from data
@@ -382,7 +384,7 @@ class StringUtils {
* @param uppercase whether the hexencoded string should be upper case
* @return the hexencoded string
*/
- static std::string to_hex(gsl::span<const std::byte> data_to_be_transformed, bool uppercase = false);
+ static std::string to_hex(std::span<const std::byte> data_to_be_transformed, bool uppercase = false);
/**
* Hexencodes a string
@@ -413,7 +415,8 @@ class StringUtils {
*/
static std::vector<std::byte> from_base64(std::string_view base64);
static std::string from_base64(std::string_view base64, as_string_tag_t) {
- return utils::span_to<std::string>(gsl::make_span(from_base64(base64)).as_span<const char>());
+ const auto decoded = from_base64(base64);
+ return utils::span_to<std::string>(utils::as_span<const char>(std::span(decoded)));
}
/**
@@ -424,7 +427,7 @@ class StringUtils {
* @param padded if true, padding is added to the Base64 encoded string
* @return the size of Base64 encoded bytes
*/
- static size_t to_base64(char* base64, gsl::span<const std::byte> raw_data, bool url, bool padded);
+ static size_t to_base64(char* base64, std::span<const std::byte> raw_data, bool url, bool padded);
/**
* Creates a Base64 encoded string from data
@@ -433,7 +436,7 @@ class StringUtils {
* @param padded if true, padding is added to the Base64 encoded string
* @return the Base64 encoded string
*/
- static std::string to_base64(gsl::span<const std::byte> raw_data, bool url = false, bool padded = true);
+ static std::string to_base64(std::span<const std::byte> raw_data, bool url = false, bool padded = true);
/**
* Base64 encodes a string
@@ -478,7 +481,7 @@ class StringUtils {
return str;
}
- static std::string escapeUnprintableBytes(gsl::span<const std::byte> data);
+ static std::string escapeUnprintableBytes(std::span<const std::byte> data);
/**
* Returns whether sequence of patterns are found in given string in their incoming order
diff --git a/libminifi/include/utils/crypto/ciphers/Aes256Ecb.h b/libminifi/include/utils/crypto/ciphers/Aes256Ecb.h
index ebd201d2c..688cb2863 100644
--- a/libminifi/include/utils/crypto/ciphers/Aes256Ecb.h
+++ b/libminifi/include/utils/crypto/ciphers/Aes256Ecb.h
@@ -50,8 +50,8 @@ class Aes256EcbCipher {
static constexpr size_t KEY_SIZE = 32;
explicit Aes256EcbCipher(Bytes encryption_key);
- void encrypt(gsl::span<unsigned char /*, BLOCK_SIZE*/> data) const;
- void decrypt(gsl::span<unsigned char /*, BLOCK_SIZE*/> data) const;
+ void encrypt(std::span<unsigned char, BLOCK_SIZE> data) const;
+ void decrypt(std::span<unsigned char, BLOCK_SIZE> data) const;
static Bytes generateKey();
diff --git a/libminifi/include/utils/gsl.h b/libminifi/include/utils/gsl.h
index efbf47645..9954eb357 100644
--- a/libminifi/include/utils/gsl.h
+++ b/libminifi/include/utils/gsl.h
@@ -26,23 +26,6 @@ namespace org::apache::nifi::minifi {
namespace gsl = ::gsl_lite;
namespace utils {
-namespace detail {
-template<typename T>
-using remove_cvref_t = typename std::remove_cv<typename std::remove_reference<T>::type>::type;
-} // namespace detail
-
-template<typename Container, typename T>
-Container span_to(gsl::span<T> span) {
- static_assert(std::is_constructible<Container, typename gsl::span<T>::iterator, typename gsl::span<T>::iterator>::value,
- "The destination container must have an iterator (pointer) range constructor");
- return Container(std::begin(span), std::end(span));
-}
-template<template<typename...> class Container, typename T>
-Container<detail::remove_cvref_t<T>> span_to(gsl::span<T> span) {
- static_assert(std::is_constructible<Container<detail::remove_cvref_t<T>>, typename gsl::span<T>::iterator, typename gsl::span<T>::iterator>::value,
- "The destination container must have an iterator (pointer) range constructor");
- return span_to<Container<detail::remove_cvref_t<T>>>(span);
-}
template<typename T>
struct is_not_null : std::false_type {};
@@ -50,6 +33,7 @@ template<typename T>
struct is_not_null<gsl::not_null<T>> : std::true_type {};
template<typename T>
inline constexpr bool is_not_null_v = is_not_null<T>::value;
+
} // namespace utils
} // namespace org::apache::nifi::minifi
diff --git a/libminifi/include/utils/gsl.h b/libminifi/include/utils/span.h
similarity index 59%
copy from libminifi/include/utils/gsl.h
copy to libminifi/include/utils/span.h
index efbf47645..ef2b4932c 100644
--- a/libminifi/include/utils/gsl.h
+++ b/libminifi/include/utils/span.h
@@ -17,39 +17,32 @@
#pragma once
-#include <type_traits>
+#include <span>
-#include <gsl-lite/gsl-lite.hpp>
+namespace org::apache::nifi::minifi::utils {
-namespace org::apache::nifi::minifi {
-
-namespace gsl = ::gsl_lite;
-
-namespace utils {
namespace detail {
template<typename T>
using remove_cvref_t = typename std::remove_cv<typename std::remove_reference<T>::type>::type;
} // namespace detail
template<typename Container, typename T>
-Container span_to(gsl::span<T> span) {
- static_assert(std::is_constructible<Container, typename gsl::span<T>::iterator, typename gsl::span<T>::iterator>::value,
- "The destination container must have an iterator (pointer) range constructor");
+Container span_to(std::span<T> span) {
+ static_assert(std::is_constructible<Container, typename std::span<T>::iterator, typename std::span<T>::iterator>::value,
+ "The destination container must have an iterator (pointer) range constructor");
return Container(std::begin(span), std::end(span));
}
template<template<typename...> class Container, typename T>
-Container<detail::remove_cvref_t<T>> span_to(gsl::span<T> span) {
- static_assert(std::is_constructible<Container<detail::remove_cvref_t<T>>, typename gsl::span<T>::iterator, typename gsl::span<T>::iterator>::value,
- "The destination container must have an iterator (pointer) range constructor");
+Container<detail::remove_cvref_t<T>> span_to(std::span<T> span) {
+ static_assert(std::is_constructible<Container<detail::remove_cvref_t<T>>, typename std::span<T>::iterator, typename std::span<T>::iterator>::value,
+ "The destination container must have an iterator (pointer) range constructor");
return span_to<Container<detail::remove_cvref_t<T>>>(span);
}
-template<typename T>
-struct is_not_null : std::false_type {};
-template<typename T>
-struct is_not_null<gsl::not_null<T>> : std::true_type {};
-template<typename T>
-inline constexpr bool is_not_null_v = is_not_null<T>::value;
-} // namespace utils
+// WARNING! check type aliasing rules for safe usage
+template<typename T, typename U>
+std::span<T> as_span(std::span<U> value) {
+ return std::span{reinterpret_cast<T*>(value.data()), value.size_bytes() / sizeof(T)};
+}
-} // namespace org::apache::nifi::minifi
+} // namespace org::apache::nifi::minifi::utils
diff --git a/libminifi/src/c2/C2Agent.cpp b/libminifi/src/c2/C2Agent.cpp
index 434faf16b..8a7986242 100644
--- a/libminifi/src/c2/C2Agent.cpp
+++ b/libminifi/src/c2/C2Agent.cpp
@@ -943,7 +943,7 @@ void C2Agent::handleAssetUpdate(const C2ContentResponse& resp) {
auto send_error = [&] (std::string_view error) {
logger_->log_error("%s", std::string(error));
C2Payload response(Operation::ACKNOWLEDGE, state::UpdateState::SET_ERROR, resp.ident, true);
- response.setRawData(gsl::span<const char>(error).as_span<const std::byte>());
+ response.setRawData(as_bytes(std::span(error.begin(), error.end())));
enqueue_c2_response(std::move(response));
};
std::filesystem::path asset_dir = std::filesystem::path(configuration_->getHome()) / "asset";
diff --git a/libminifi/src/c2/C2Payload.cpp b/libminifi/src/c2/C2Payload.cpp
index a6bae275e..3e5c2c462 100644
--- a/libminifi/src/c2/C2Payload.cpp
+++ b/libminifi/src/c2/C2Payload.cpp
@@ -22,11 +22,7 @@
#include <string>
#include "utils/StringUtils.h"
-namespace org {
-namespace apache {
-namespace nifi {
-namespace minifi {
-namespace c2 {
+namespace org::apache::nifi::minifi::c2 {
C2Payload::C2Payload(Operation op, std::string identifier, bool isRaw)
: C2Payload(op, state::UpdateState::FULLY_APPLIED, std::move(identifier), isRaw) {
@@ -72,7 +68,7 @@ void C2Payload::setRawData(const std::vector<char> &data) {
setRawData(gsl::make_span(data).as_span<const std::byte>());
}
-void C2Payload::setRawData(gsl::span<const std::byte> data) {
+void C2Payload::setRawData(std::span<const std::byte> data) {
raw_data_.reserve(raw_data_.size() + data.size());
raw_data_.insert(std::end(raw_data_), std::begin(data), std::end(data));
}
@@ -147,8 +143,4 @@ std::ostream& operator<<(std::ostream& out, const AnnotatedValue& val) {
return out;
}
-} /* namespace c2 */
-} /* namespace minifi */
-} /* namespace nifi */
-} /* namespace apache */
-} /* namespace org */
+} // namespace org::apache::nifi::minifi::c2
diff --git a/libminifi/src/c2/protocols/RESTProtocol.cpp b/libminifi/src/c2/protocols/RESTProtocol.cpp
index 1e573eb58..ef3b6d35e 100644
--- a/libminifi/src/c2/protocols/RESTProtocol.cpp
+++ b/libminifi/src/c2/protocols/RESTProtocol.cpp
@@ -55,12 +55,11 @@ AnnotatedValue parseAnnotatedValue(const rapidjson::Value& jsonValue) {
return result;
}
-C2Payload RESTProtocol::parseJsonResponse(const C2Payload &payload, gsl::span<const std::byte> response) {
+C2Payload RESTProtocol::parseJsonResponse(const C2Payload &payload, std::span<const std::byte> response) {
rapidjson::Document root;
- const auto char_span = response.as_span<const char>();
try {
- rapidjson::ParseResult ok = root.Parse(char_span.data(), char_span.size());
+ rapidjson::ParseResult ok = root.Parse(reinterpret_cast<const char*>(response.data()), response.size());
if (ok) {
std::string identifier;
for (auto key : {"operationid", "operationId", "identifier"}) {
diff --git a/libminifi/src/core/ConfigurableComponent.cpp b/libminifi/src/core/ConfigurableComponent.cpp
index 135e9229b..4fd3f84ad 100644
--- a/libminifi/src/core/ConfigurableComponent.cpp
+++ b/libminifi/src/core/ConfigurableComponent.cpp
@@ -168,7 +168,7 @@ bool ConfigurableComponent::setProperty(const Property& prop, PropertyValue &val
}
}
-void ConfigurableComponent::setSupportedProperties(gsl::span<const core::Property> properties) {
+void ConfigurableComponent::setSupportedProperties(std::span<const core::Property> properties) {
if (!canEdit()) {
return;
}
diff --git a/libminifi/src/core/Connectable.cpp b/libminifi/src/core/Connectable.cpp
index c3bc0803b..f97188c4d 100644
--- a/libminifi/src/core/Connectable.cpp
+++ b/libminifi/src/core/Connectable.cpp
@@ -41,7 +41,7 @@ Connectable::Connectable(std::string name)
Connectable::~Connectable() = default;
-void Connectable::setSupportedRelationships(gsl::span<const core::Relationship> relationships) {
+void Connectable::setSupportedRelationships(std::span<const core::Relationship> relationships) {
if (isRunning()) {
logger_->log_warn("Can not set processor supported relationship while the process %s is running", name_);
return;
@@ -74,7 +74,7 @@ bool Connectable::isSupportedRelationship(const core::Relationship &relationship
return relationships_.contains(relationship.getName());
}
-void Connectable::setAutoTerminatedRelationships(gsl::span<const core::Relationship> relationships) {
+void Connectable::setAutoTerminatedRelationships(std::span<const core::Relationship> relationships) {
if (isRunning()) {
logger_->log_warn("Can not set processor auto terminated relationship while the process %s is running", name_);
return;
diff --git a/libminifi/src/core/ProcessSession.cpp b/libminifi/src/core/ProcessSession.cpp
index 8bf30dc1c..5bd15cd4b 100644
--- a/libminifi/src/core/ProcessSession.cpp
+++ b/libminifi/src/core/ProcessSession.cpp
@@ -268,10 +268,10 @@ void ProcessSession::write(const std::shared_ptr<core::FlowFile> &flow, const io
}
}
-void ProcessSession::writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const char> buffer) {
- writeBuffer(flow_file, buffer.as_span<const std::byte>());
+void ProcessSession::writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, std::span<const char> buffer) {
+ writeBuffer(flow_file, as_bytes(buffer));
}
-void ProcessSession::writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const std::byte> buffer) {
+void ProcessSession::writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, std::span<const std::byte> buffer) {
write(flow_file, [buffer](const std::shared_ptr<io::OutputStream>& output_stream) {
const auto write_status = output_stream->write(buffer);
return io::isError(write_status) ? -1 : gsl::narrow<int64_t>(write_status);
@@ -319,10 +319,10 @@ void ProcessSession::append(const std::shared_ptr<core::FlowFile> &flow, const i
throw;
}
}
-void ProcessSession::appendBuffer(const std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const char> buffer) {
- appendBuffer(flow_file, buffer.as_span<const std::byte>());
+void ProcessSession::appendBuffer(const std::shared_ptr<core::FlowFile>& flow_file, std::span<const char> buffer) {
+ appendBuffer(flow_file, as_bytes(buffer));
}
-void ProcessSession::appendBuffer(const std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const std::byte> buffer) {
+void ProcessSession::appendBuffer(const std::shared_ptr<core::FlowFile>& flow_file, std::span<const std::byte> buffer) {
append(flow_file, [buffer](const std::shared_ptr<io::OutputStream>& output_stream) {
const auto write_status = output_stream->write(buffer);
return io::isError(write_status) ? -1 : gsl::narrow<int64_t>(write_status);
diff --git a/libminifi/src/core/Repository.cpp b/libminifi/src/core/Repository.cpp
index 2cf596108..c9f9d4f22 100644
--- a/libminifi/src/core/Repository.cpp
+++ b/libminifi/src/core/Repository.cpp
@@ -36,7 +36,7 @@ bool Repository::storeElement(const std::shared_ptr<core::SerializableComponent>
element->serialize(stream);
- if (!Put(element->getUUIDStr(), const_cast<uint8_t*>(stream.getBuffer().as_span<const uint8_t>().data()), stream.size())) {
+ if (!Put(element->getUUIDStr(), reinterpret_cast<const uint8_t*>(stream.getBuffer().data()), stream.size())) {
logger_->log_error("NiFi Provenance Store event %s size %llu fail", element->getUUIDStr(), stream.size());
return false;
}
diff --git a/libminifi/src/core/repository/VolatileRepository.cpp b/libminifi/src/core/repository/VolatileRepository.cpp
index 161f9f357..8201f7190 100644
--- a/libminifi/src/core/repository/VolatileRepository.cpp
+++ b/libminifi/src/core/repository/VolatileRepository.cpp
@@ -81,7 +81,7 @@ bool VolatileRepository::Put(const std::string& key, const uint8_t *buf, size_t
bool VolatileRepository::MultiPut(const std::vector<std::pair<std::string, std::unique_ptr<io::BufferStream>>>& data) {
for (const auto& item : data) {
- if (!Put(item.first, item.second->getBuffer().template as_span<const uint8_t>().data(), item.second->size())) {
+ if (!Put(item.first, reinterpret_cast<const uint8_t*>(item.second->getBuffer().data()), item.second->size())) {
return false;
}
}
diff --git a/libminifi/src/io/BufferStream.cpp b/libminifi/src/io/BufferStream.cpp
index b853f7b16..de52a5115 100644
--- a/libminifi/src/io/BufferStream.cpp
+++ b/libminifi/src/io/BufferStream.cpp
@@ -22,11 +22,7 @@
#include "io/BufferStream.h"
#include "utils/gsl.h"
-namespace org {
-namespace apache {
-namespace nifi {
-namespace minifi {
-namespace io {
+namespace org::apache::nifi::minifi::io {
size_t BufferStream::write(const uint8_t *value, size_t size) {
size_t originalSize = buffer_.size();
@@ -35,7 +31,7 @@ size_t BufferStream::write(const uint8_t *value, size_t size) {
return size;
}
-size_t BufferStream::read(gsl::span<std::byte> buf) {
+size_t BufferStream::read(std::span<std::byte> buf) {
const auto bytes_available_in_buffer = buffer_.size() - readOffset_;
const auto readlen = std::min(buf.size(), gsl::narrow<size_t>(bytes_available_in_buffer));
const auto begin = buffer_.begin() + gsl::narrow<decltype(buffer_)::difference_type>(readOffset_);
@@ -47,8 +43,4 @@ size_t BufferStream::read(gsl::span<std::byte> buf) {
return readlen;
}
-} /* namespace io */
-} /* namespace minifi */
-} /* namespace nifi */
-} /* namespace apache */
-} /* namespace org */
+} // namespace org::apache::nifi::minifi::io
diff --git a/libminifi/src/io/ClientSocket.cpp b/libminifi/src/io/ClientSocket.cpp
index 0fe3fa411..c5fe134aa 100644
--- a/libminifi/src/io/ClientSocket.cpp
+++ b/libminifi/src/io/ClientSocket.cpp
@@ -468,7 +468,7 @@ size_t Socket::write(const uint8_t *value, size_t size) {
return bytes;
}
-size_t Socket::read(gsl::span<std::byte> buf, bool retrieve_all_bytes) {
+size_t Socket::read(std::span<std::byte> buf, bool retrieve_all_bytes) {
size_t total_read = 0;
while (!buf.empty()) {
int16_t fd = select_descriptor(1000);
diff --git a/libminifi/src/io/DescriptorStream.cpp b/libminifi/src/io/DescriptorStream.cpp
index 041741cdd..be00e26cb 100644
--- a/libminifi/src/io/DescriptorStream.cpp
+++ b/libminifi/src/io/DescriptorStream.cpp
@@ -29,11 +29,7 @@
#include <unistd.h>
#endif
-namespace org {
-namespace apache {
-namespace nifi {
-namespace minifi {
-namespace io {
+namespace org::apache::nifi::minifi::io {
DescriptorStream::DescriptorStream(int fd)
: fd_(fd) {
@@ -72,7 +68,7 @@ size_t DescriptorStream::write(const uint8_t *value, size_t size) {
}
}
-size_t DescriptorStream::read(gsl::span<std::byte> buf) {
+size_t DescriptorStream::read(std::span<std::byte> buf) {
if (buf.empty()) return 0;
#ifdef WIN32
const auto size_read = _read(fd_, buf.data(), buf.size());
@@ -86,9 +82,4 @@ size_t DescriptorStream::read(gsl::span<std::byte> buf) {
return gsl::narrow<size_t>(size_read);
}
-} /* namespace io */
-} /* namespace minifi */
-} /* namespace nifi */
-} /* namespace apache */
-} /* namespace org */
-
+} // namespace org::apache::nifi::minifi::io
diff --git a/libminifi/src/io/FileStream.cpp b/libminifi/src/io/FileStream.cpp
index 0d128c942..302c25c9f 100644
--- a/libminifi/src/io/FileStream.cpp
+++ b/libminifi/src/io/FileStream.cpp
@@ -135,7 +135,7 @@ size_t FileStream::write(const uint8_t *value, size_t size) {
return size;
}
-size_t FileStream::read(gsl::span<std::byte> buf) {
+size_t FileStream::read(std::span<std::byte> buf) {
if (buf.empty()) { return 0; }
std::lock_guard<std::mutex> lock(file_lock_);
if (file_stream_ == nullptr || !file_stream_->is_open()) {
diff --git a/libminifi/src/io/StreamSlice.cpp b/libminifi/src/io/StreamSlice.cpp
index a585cbafe..50fa91c37 100644
--- a/libminifi/src/io/StreamSlice.cpp
+++ b/libminifi/src/io/StreamSlice.cpp
@@ -26,7 +26,7 @@ StreamSlice::StreamSlice(std::shared_ptr<io::InputStream> stream, size_t offset,
throw std::invalid_argument("StreamSlice is bigger than the Stream");
}
-size_t StreamSlice::read(gsl::span<std::byte> out_buffer) {
+size_t StreamSlice::read(std::span<std::byte> out_buffer) {
const size_t max_size = std::min(out_buffer.size(), size() - tell());
return stream_->read(out_buffer.subspan(0, max_size));
}
@@ -39,7 +39,7 @@ size_t StreamSlice::tell() const {
return stream_->tell() - slice_offset_;
}
-gsl::span<const std::byte> StreamSlice::getBuffer() const {
+std::span<const std::byte> StreamSlice::getBuffer() const {
return stream_->getBuffer().subspan(slice_offset_, slice_size_);
}
diff --git a/libminifi/src/io/tls/SecureDescriptorStream.cpp b/libminifi/src/io/tls/SecureDescriptorStream.cpp
index 5c32b7702..94cd26380 100644
--- a/libminifi/src/io/tls/SecureDescriptorStream.cpp
+++ b/libminifi/src/io/tls/SecureDescriptorStream.cpp
@@ -71,7 +71,7 @@ size_t SecureDescriptorStream::write(const uint8_t *value, size_t size) {
return size;
}
-size_t SecureDescriptorStream::read(gsl::span<std::byte> buf) {
+size_t SecureDescriptorStream::read(std::span<std::byte> buf) {
if (buf.empty()) { return 0; }
size_t total_read = 0;
std::byte* writepos = buf.data();
diff --git a/libminifi/src/io/tls/TLSSocket.cpp b/libminifi/src/io/tls/TLSSocket.cpp
index 9ac1cab5f..4019cc15c 100644
--- a/libminifi/src/io/tls/TLSSocket.cpp
+++ b/libminifi/src/io/tls/TLSSocket.cpp
@@ -347,7 +347,7 @@ int16_t TLSSocket::select_descriptor(const uint16_t msec) {
return -1;
}
-size_t TLSSocket::read(gsl::span<std::byte> buffer, bool) {
+size_t TLSSocket::read(std::span<std::byte> buffer, bool) {
size_t total_read = 0;
int status = 0;
int loc = 0;
@@ -416,7 +416,7 @@ size_t TLSSocket::write(const uint8_t *value, size_t size) {
return writeData(value, size, fd);
}
-size_t TLSSocket::read(gsl::span<std::byte> buffer) {
+size_t TLSSocket::read(std::span<std::byte> buffer) {
size_t total_read = 0;
int status = 0;
auto* buf = buffer.data();
diff --git a/libminifi/src/utils/BaseHTTPClient.cpp b/libminifi/src/utils/BaseHTTPClient.cpp
index 2124e285d..7f802efb5 100644
--- a/libminifi/src/utils/BaseHTTPClient.cpp
+++ b/libminifi/src/utils/BaseHTTPClient.cpp
@@ -250,8 +250,8 @@ size_t HTTPUploadByteArrayInputCallback::setPosition(int64_t offset) {
size_t HTTPUploadStreamContentsCallback::getDataChunk(char *data, size_t size) {
logger_->log_trace("HTTPUploadStreamContentsCallback is asked for up to %zu bytes", size);
- gsl::span<char> buffer{data, size};
- size_t num_read = input_stream_->read(buffer.as_span<std::byte>());
+ std::span<char> buffer{data, size};
+ size_t num_read = input_stream_->read(as_writable_bytes(buffer));
if (io::isError(num_read)) {
logger_->log_error("Error reading the input stream in HTTPUploadStreamContentsCallback");
diff --git a/libminifi/src/utils/LineByLineInputOutputStreamCallback.cpp b/libminifi/src/utils/LineByLineInputOutputStreamCallback.cpp
index 9f11131d5..af2307e5c 100644
--- a/libminifi/src/utils/LineByLineInputOutputStreamCallback.cpp
+++ b/libminifi/src/utils/LineByLineInputOutputStreamCallback.cpp
@@ -18,6 +18,7 @@
#include "utils/LineByLineInputOutputStreamCallback.h"
#include "utils/gsl.h"
+#include "utils/span.h"
namespace org::apache::nifi::minifi::utils {
@@ -67,7 +68,7 @@ void LineByLineInputOutputStreamCallback::readLine() {
if (end_of_line != input_.end()) { ++end_of_line; }
current_line_ = next_line_;
- next_line_ = utils::span_to<std::string>(gsl::make_span(&*current_pos_, &*end_of_line).as_span<char>());
+ next_line_ = utils::span_to<std::string>(utils::as_span<char>(std::span(std::to_address(current_pos_), std::to_address(end_of_line))));
current_pos_ = end_of_line;
}
diff --git a/libminifi/src/utils/StringUtils.cpp b/libminifi/src/utils/StringUtils.cpp
index 84b7a531b..0b0217569 100644
--- a/libminifi/src/utils/StringUtils.cpp
+++ b/libminifi/src/utils/StringUtils.cpp
@@ -318,7 +318,7 @@ std::vector<std::byte> StringUtils::from_hex(std::string_view hex) {
return decoded;
}
-size_t StringUtils::to_hex(char* hex, gsl::span<const std::byte> data_to_be_transformed, bool uppercase) {
+size_t StringUtils::to_hex(char* hex, std::span<const std::byte> data_to_be_transformed, bool uppercase) {
if (data_to_be_transformed.size() > std::numeric_limits<size_t>::max() / 2) {
throw std::length_error("Data is too large to be hexencoded");
}
@@ -329,7 +329,7 @@ size_t StringUtils::to_hex(char* hex, gsl::span<const std::byte> data_to_be_tran
return data_to_be_transformed.size() * 2;
}
-std::string StringUtils::to_hex(gsl::span<const std::byte> data_to_be_transformed, bool uppercase /*= false*/) {
+std::string StringUtils::to_hex(std::span<const std::byte> data_to_be_transformed, bool uppercase /*= false*/) {
if (data_to_be_transformed.size() > (std::numeric_limits<size_t>::max() / 2 - 1)) {
throw std::length_error("Data is too large to be hexencoded");
}
@@ -418,7 +418,7 @@ std::vector<std::byte> StringUtils::from_base64(const std::string_view base64) {
return decoded;
}
-size_t StringUtils::to_base64(char* base64, const gsl::span<const std::byte> raw_data, bool url, bool padded) {
+size_t StringUtils::to_base64(char* base64, const std::span<const std::byte> raw_data, bool url, bool padded) {
gsl_Expects(base64);
if (raw_data.size() > std::numeric_limits<size_t>::max() * 3 / 4 - 3) {
throw std::length_error("Data is too large to be base64 encoded");
@@ -452,7 +452,7 @@ size_t StringUtils::to_base64(char* base64, const gsl::span<const std::byte> raw
return base64_length;
}
-std::string StringUtils::to_base64(const gsl::span<const std::byte> raw_data, bool url /*= false*/, bool padded /*= true*/) {
+std::string StringUtils::to_base64(const std::span<const std::byte> raw_data, bool url /*= false*/, bool padded /*= true*/) {
std::string buf;
buf.resize((raw_data.size() / 3 + 1) * 4);
size_t base64_length = to_base64(buf.data(), raw_data, url, padded);
@@ -461,7 +461,7 @@ std::string StringUtils::to_base64(const gsl::span<const std::byte> raw_data, bo
return buf;
}
-std::string StringUtils::escapeUnprintableBytes(gsl::span<const std::byte> data) {
+std::string StringUtils::escapeUnprintableBytes(std::span<const std::byte> data) {
constexpr const char* hex_digits = "0123456789abcdef";
std::string result;
for (auto byte : data) {
diff --git a/libminifi/src/utils/crypto/EncryptionUtils.cpp b/libminifi/src/utils/crypto/EncryptionUtils.cpp
index 2d0ceaf33..d04acc5ff 100644
--- a/libminifi/src/utils/crypto/EncryptionUtils.cpp
+++ b/libminifi/src/utils/crypto/EncryptionUtils.cpp
@@ -23,20 +23,16 @@
#include <string>
#include "utils/StringUtils.h"
+#include "utils/span.h"
-namespace org {
-namespace apache {
-namespace nifi {
-namespace minifi {
-namespace utils {
-namespace crypto {
+namespace org::apache::nifi::minifi::utils::crypto {
Bytes stringToBytes(const std::string& text) {
- return utils::span_to<std::vector>(gsl::make_span(text).as_span<const Bytes::value_type>());
+ return utils::span_to<std::vector>(utils::as_span<const Bytes::value_type>(std::span(text)));
}
std::string bytesToString(const Bytes& bytes) {
- return utils::span_to<std::string>(gsl::make_span(bytes).as_span<const char>());
+ return utils::span_to<std::string>(utils::as_span<const char>(std::span(bytes)));
}
Bytes generateKey() {
@@ -135,9 +131,4 @@ bool isEncrypted(const std::string& input) {
}
}
-} // namespace crypto
-} // namespace utils
-} // namespace minifi
-} // namespace nifi
-} // namespace apache
-} // namespace org
+} // namespace org::apache::nifi::minifi::utils::crypto
diff --git a/libminifi/src/utils/crypto/ciphers/Aes256Ecb.cpp b/libminifi/src/utils/crypto/ciphers/Aes256Ecb.cpp
index 0c11307f9..ccc8571b4 100644
--- a/libminifi/src/utils/crypto/ciphers/Aes256Ecb.cpp
+++ b/libminifi/src/utils/crypto/ciphers/Aes256Ecb.cpp
@@ -23,12 +23,7 @@
#include "openssl/rand.h"
#include "core/logging/LoggerConfiguration.h"
-namespace org {
-namespace apache {
-namespace nifi {
-namespace minifi {
-namespace utils {
-namespace crypto {
+namespace org::apache::nifi::minifi::utils::crypto {
using EVP_CIPHER_CTX_ptr = std::unique_ptr<EVP_CIPHER_CTX, decltype(&EVP_CIPHER_CTX_free)>;
@@ -54,7 +49,7 @@ Bytes Aes256EcbCipher::generateKey() {
return utils::crypto::randomBytes(KEY_SIZE);
}
-void Aes256EcbCipher::encrypt(gsl::span<unsigned char /*, BLOCK_SIZE*/> data) const {
+void Aes256EcbCipher::encrypt(std::span<unsigned char, BLOCK_SIZE> data) const {
gsl_Expects(data.size() == BLOCK_SIZE);
EVP_CIPHER_CTX_ptr ctx(EVP_CIPHER_CTX_new(), EVP_CIPHER_CTX_free);
if (!ctx) {
@@ -74,12 +69,12 @@ void Aes256EcbCipher::encrypt(gsl::span<unsigned char /*, BLOCK_SIZE*/> data) co
int ciphertext_len = 0;
int len;
- if (1 != EVP_EncryptUpdate(ctx.get(), data.begin(), &len, data.begin(), data.size())) {
+ if (1 != EVP_EncryptUpdate(ctx.get(), data.data(), &len, data.data(), data.size())) {
handleOpenSSLError("Could not update cipher content");
}
ciphertext_len += len;
- if (1 != EVP_EncryptFinal_ex(ctx.get(), data.begin() + len, &len)) {
+ if (1 != EVP_EncryptFinal_ex(ctx.get(), data.data() + len, &len)) {
handleOpenSSLError("Could not finalize encryption");
}
ciphertext_len += len;
@@ -87,7 +82,7 @@ void Aes256EcbCipher::encrypt(gsl::span<unsigned char /*, BLOCK_SIZE*/> data) co
gsl_Expects(ciphertext_len == BLOCK_SIZE);
}
-void Aes256EcbCipher::decrypt(gsl::span<unsigned char /*, BLOCK_SIZE*/> data) const {
+void Aes256EcbCipher::decrypt(std::span<unsigned char, BLOCK_SIZE> data) const {
gsl_Expects(data.size() == BLOCK_SIZE);
EVP_CIPHER_CTX_ptr ctx(EVP_CIPHER_CTX_new(), EVP_CIPHER_CTX_free);
if (!ctx) {
@@ -106,12 +101,12 @@ void Aes256EcbCipher::decrypt(gsl::span<unsigned char /*, BLOCK_SIZE*/> data) co
int plaintext_len = 0;
int len;
- if (1 != EVP_DecryptUpdate(ctx.get(), data.begin(), &len, data.begin(), data.size())) {
+ if (1 != EVP_DecryptUpdate(ctx.get(), data.data(), &len, data.data(), data.size())) {
handleOpenSSLError("Could not update cipher content");
}
plaintext_len += len;
- if (1 != EVP_DecryptFinal_ex(ctx.get(), data.begin() + len, &len)) {
+ if (1 != EVP_DecryptFinal_ex(ctx.get(), data.data() + len, &len)) {
handleOpenSSLError("Could not finalize decryption");
}
plaintext_len += len;
@@ -125,9 +120,4 @@ bool Aes256EcbCipher::operator==(const Aes256EcbCipher &other) const {
return CRYPTO_memcmp(encryption_key_.data(), other.encryption_key_.data(), KEY_SIZE) == 0;
}
-} // namespace crypto
-} // namespace utils
-} // namespace minifi
-} // namespace nifi
-} // namespace apache
-} // namespace org
+} // namespace org::apache::nifi::minifi::utils::crypto
diff --git a/libminifi/src/utils/file/FileUtils.cpp b/libminifi/src/utils/file/FileUtils.cpp
index 0a8635a00..79f8df9a6 100644
--- a/libminifi/src/utils/file/FileUtils.cpp
+++ b/libminifi/src/utils/file/FileUtils.cpp
@@ -50,7 +50,7 @@ bool contains(const std::filesystem::path& file_path, std::string_view text_to_s
gsl_Expects(text_to_search.size() <= 8_KiB);
gsl_ExpectsAudit(std::filesystem::exists(file_path));
std::array<char, 16_KiB> buf{};
- gsl::span<char> view;
+ std::span<char> view;
Searcher searcher(text_to_search.begin(), text_to_search.end());
@@ -58,7 +58,7 @@ bool contains(const std::filesystem::path& file_path, std::string_view text_to_s
do {
std::copy(buf.end() - text_to_search.size(), buf.end(), buf.begin());
ifs.read(buf.data() + text_to_search.size(), buf.size() - text_to_search.size());
- view = gsl::span<char>(buf.data(), text_to_search.size() + gsl::narrow<size_t>(ifs.gcount()));
+ view = std::span<char>(buf.data(), text_to_search.size() + gsl::narrow<size_t>(ifs.gcount()));
if (std::search(view.begin(), view.end(), searcher) != view.end()) {
return true;
}
diff --git a/libminifi/test/TestBase.cpp b/libminifi/test/TestBase.cpp
index cb61f540f..79632ce98 100644
--- a/libminifi/test/TestBase.cpp
+++ b/libminifi/test/TestBase.cpp
@@ -35,6 +35,7 @@
#include "core/extension/ExtensionManager.h"
#include "utils/Id.h"
#include "utils/StringUtils.h"
+#include "utils/span.h"
#include "LogUtils.h"
#include "spdlog/spdlog.h"
@@ -645,7 +646,7 @@ std::string TestPlan::getContent(const minifi::core::FlowFile& file) const {
auto content_stream = content_repo_->read(*content_claim);
auto output_stream = std::make_shared<minifi::io::BufferStream>();
minifi::InputStreamPipe{*output_stream}(content_stream);
- return utils::span_to<std::string>(output_stream->getBuffer().as_span<const char>());
+ return utils::span_to<std::string>(utils::as_span<const char>(output_stream->getBuffer()));
}
TestController::TestController()
diff --git a/libminifi/test/Utils.h b/libminifi/test/Utils.h
index 4f37b399e..4e3145c1f 100644
--- a/libminifi/test/Utils.h
+++ b/libminifi/test/Utils.h
@@ -141,8 +141,8 @@ std::error_code sendUdpDatagram(const asio::const_buffer content, const asio::ip
return err;
}
-std::error_code sendUdpDatagram(const gsl::span<std::byte const> content, const asio::ip::udp::endpoint& remote_endpoint) {
- return sendUdpDatagram(asio::const_buffer(content.begin(), content.size()), remote_endpoint);
+std::error_code sendUdpDatagram(const std::span<std::byte const> content, const asio::ip::udp::endpoint& remote_endpoint) {
+ return sendUdpDatagram(asio::const_buffer(content.data(), content.size()), remote_endpoint);
}
std::error_code sendUdpDatagram(const std::string_view content, const asio::ip::udp::endpoint& remote_endpoint) {
diff --git a/libminifi/test/archive-tests/ArchiveStreamTests.cpp b/libminifi/test/archive-tests/ArchiveStreamTests.cpp
index 42513335c..cbb13ac10 100644
--- a/libminifi/test/archive-tests/ArchiveStreamTests.cpp
+++ b/libminifi/test/archive-tests/ArchiveStreamTests.cpp
@@ -48,7 +48,7 @@ TEST_CASE("Create and read archive") {
++extracted_entries;
std::string file_content;
file_content.resize(info->size);
- REQUIRE(decompressor.read(minifi::gsl::make_span(file_content).as_span<std::byte>()) == file_content.length());
+ REQUIRE(decompressor.read(as_writable_bytes(std::span(file_content))) == file_content.length());
REQUIRE(files[info->filename] == file_content);
}
REQUIRE(extracted_entries == files.size());
diff --git a/libminifi/test/archive-tests/CompressContentTests.cpp b/libminifi/test/archive-tests/CompressContentTests.cpp
index f33955905..086c51168 100644
--- a/libminifi/test/archive-tests/CompressContentTests.cpp
+++ b/libminifi/test/archive-tests/CompressContentTests.cpp
@@ -57,7 +57,7 @@ class ReadCallback {
int64_t operator()(const std::shared_ptr<minifi::io::InputStream>& stream) {
int64_t total_read = 0;
do {
- const auto ret = stream->read(gsl::make_span(buffer_).subspan(read_size_));
+ const auto ret = stream->read(std::span(buffer_).subspan(read_size_));
if (ret == 0) break;
if (minifi::io::isError(ret)) return -1;
read_size_ += gsl::narrow<size_t>(ret);
diff --git a/libminifi/test/archive-tests/MergeFileTests.cpp b/libminifi/test/archive-tests/MergeFileTests.cpp
index 19718465f..d0a2b7df1 100644
--- a/libminifi/test/archive-tests/MergeFileTests.cpp
+++ b/libminifi/test/archive-tests/MergeFileTests.cpp
@@ -41,6 +41,7 @@
#include "serialization/PayloadSerializer.h"
#include "../Utils.h"
#include "utils/gsl.h"
+#include "utils/span.h"
std::string FLOW_FILE;
std::string EXPECT_MERGE_CONTENT_FIRST;
@@ -88,7 +89,7 @@ class FixedBuffer {
REQUIRE(size_ + len <= capacity_);
int total_read = 0;
do {
- const size_t ret{input.read(gsl::make_span(end(), len).as_span<std::byte>())};
+ const size_t ret{input.read(as_writable_bytes(std::span(end(), len)))};
if (ret == 0) break;
if (minifi::io::isError(ret)) return -1;
size_ += ret;
@@ -111,7 +112,7 @@ std::vector<FixedBuffer> read_archives(const FixedBuffer& input) {
class ArchiveEntryReader {
public:
explicit ArchiveEntryReader(archive* arch) : arch(arch) {}
- size_t read(gsl::span<std::byte> out_buffer) {
+ size_t read(std::span<std::byte> out_buffer) {
const auto ret = archive_read_data(arch, out_buffer.data(), out_buffer.size());
return ret < 0 ? minifi::io::STREAM_ERROR : gsl::narrow<size_t>(ret);
}
@@ -752,7 +753,7 @@ TEST_CASE("FlowFile serialization", "[testFlowFileSerialization]") {
}
writeString(footer, result);
- const auto expected = utils::span_to<std::string>(result->getBuffer().as_span<const char>());
+ const auto expected = utils::span_to<std::string>(utils::as_span<const char>(result->getBuffer()));
auto factory = std::make_shared<core::ProcessSessionFactory>(context);
merge_content_processor->onSchedule(context, factory);
diff --git a/libminifi/test/azure-tests/MockBlobStorage.h b/libminifi/test/azure-tests/MockBlobStorage.h
index 996fef1c8..fb7e8ec54 100644
--- a/libminifi/test/azure-tests/MockBlobStorage.h
+++ b/libminifi/test/azure-tests/MockBlobStorage.h
@@ -25,6 +25,7 @@
#include "storage/BlobStorageClient.h"
#include "azure/core/io/body_stream.hpp"
+#include "utils/span.h"
class MockBlobStorage : public minifi::azure::storage::BlobStorageClient {
public:
@@ -41,13 +42,13 @@ class MockBlobStorage : public minifi::azure::storage::BlobStorageClient {
return true;
}
- Azure::Storage::Blobs::Models::UploadBlockBlobResult uploadBlob(const minifi::azure::storage::PutAzureBlobStorageParameters& params, gsl::span<const std::byte> buffer) override {
+ Azure::Storage::Blobs::Models::UploadBlockBlobResult uploadBlob(const minifi::azure::storage::PutAzureBlobStorageParameters& params, std::span<const std::byte> buffer) override {
put_params_ = params;
if (upload_fails_) {
throw std::runtime_error("error");
}
- input_data_ = utils::span_to<std::string>(buffer.as_span<const char>());
+ input_data_ = utils::span_to<std::string>(utils::as_span<const char>(buffer));
Azure::Storage::Blobs::Models::UploadBlockBlobResult result;
result.ETag = Azure::ETag{ETAG};
diff --git a/libminifi/test/azure-tests/MockDataLakeStorageClient.h b/libminifi/test/azure-tests/MockDataLakeStorageClient.h
index 5d6c42c3d..03a5f46b1 100644
--- a/libminifi/test/azure-tests/MockDataLakeStorageClient.h
+++ b/libminifi/test/azure-tests/MockDataLakeStorageClient.h
@@ -26,6 +26,7 @@
#include "storage/DataLakeStorageClient.h"
#include "io/BufferStream.h"
+#include "utils/span.h"
class MockDataLakeStorageClient : public org::apache::nifi::minifi::azure::storage::DataLakeStorageClient {
public:
@@ -41,8 +42,9 @@ class MockDataLakeStorageClient : public org::apache::nifi::minifi::azure::stora
return create_file_;
}
- std::string uploadFile(const org::apache::nifi::minifi::azure::storage::PutAzureDataLakeStorageParameters& params, gsl::span<const std::byte> buffer) override {
- input_data_ = org::apache::nifi::minifi::utils::span_to<std::string>(buffer.as_span<const char>());
+ std::string uploadFile(const org::apache::nifi::minifi::azure::storage::PutAzureDataLakeStorageParameters& params, std::span<const std::byte> buffer) override {
+ namespace utils = org::apache::nifi::minifi::utils;
+ input_data_ = utils::span_to<std::string>(utils::as_span<const char>(buffer));
put_params_ = params;
if (upload_fails_) {
diff --git a/libminifi/test/rocksdb-tests/EncryptionTests.cpp b/libminifi/test/rocksdb-tests/EncryptionTests.cpp
index b544d7016..9dd6577f3 100644
--- a/libminifi/test/rocksdb-tests/EncryptionTests.cpp
+++ b/libminifi/test/rocksdb-tests/EncryptionTests.cpp
@@ -22,6 +22,7 @@
#include "utils/IntegrationTestUtils.h"
#include "repository/VolatileContentRepository.h"
#include "FlowFileRecord.h"
+#include "utils/span.h"
using core::repository::FlowFileRepository;
@@ -43,7 +44,7 @@ class FFRepoFixture : public TestController {
static void putFlowFile(const std::shared_ptr<minifi::FlowFileRecord>& flowfile, const std::shared_ptr<core::repository::FlowFileRepository>& repo) {
minifi::io::BufferStream buffer;
flowfile->Serialize(buffer);
- const auto buf = buffer.getBuffer().as_span<const uint8_t>();
+ const auto buf = utils::as_span<const uint8_t>(buffer.getBuffer());
REQUIRE(repo->Put(flowfile->getUUIDStr(), buf.data(), buf.size()));
}
diff --git a/libminifi/test/rocksdb-tests/RocksDBStreamTests.cpp b/libminifi/test/rocksdb-tests/RocksDBStreamTests.cpp
index e6c8d01ec..63830b23a 100644
--- a/libminifi/test/rocksdb-tests/RocksDBStreamTests.cpp
+++ b/libminifi/test/rocksdb-tests/RocksDBStreamTests.cpp
@@ -75,9 +75,9 @@ TEST_CASE_METHOD(RocksDBStreamTest, "Read zero bytes") {
minifi::io::RocksDbStream stream("one", gsl::make_not_null(db.get()));
std::byte fake_buffer[1];
- REQUIRE(stream.read(gsl::make_span(fake_buffer).subspan(0, 0)) == 0);
+ REQUIRE(stream.read(std::span(fake_buffer).subspan(0, 0)) == 0);
minifi::io::RocksDbStream nonExistingStream("two", gsl::make_not_null(db.get()));
- REQUIRE(minifi::io::isError(nonExistingStream.read(gsl::make_span(fake_buffer).subspan(0, 0))));
+ REQUIRE(minifi::io::isError(nonExistingStream.read(std::span(fake_buffer).subspan(0, 0))));
}
diff --git a/libminifi/test/rocksdb-tests/SwapTests.cpp b/libminifi/test/rocksdb-tests/SwapTests.cpp
index 07d0219df..3bfa19542 100644
--- a/libminifi/test/rocksdb-tests/SwapTests.cpp
+++ b/libminifi/test/rocksdb-tests/SwapTests.cpp
@@ -57,7 +57,7 @@ class OutputProcessor : public core::Processor {
auto ff = session->create();
ff->addAttribute("index", id);
session->write(ff, [&] (const std::shared_ptr<minifi::io::OutputStream>& output) -> int64_t {
- auto ret = output->write(gsl::span<const char>(id.data(), id.size()).as_span<const std::byte>());
+ auto ret = output->write(as_bytes(std::span(id)));
if (minifi::io::isError(ret)) {
return -1;
}
diff --git a/libminifi/test/unit/FileStreamTests.cpp b/libminifi/test/unit/FileStreamTests.cpp
index 7032be269..314f2ba8e 100644
--- a/libminifi/test/unit/FileStreamTests.cpp
+++ b/libminifi/test/unit/FileStreamTests.cpp
@@ -228,7 +228,7 @@ TEST_CASE("Read zero bytes") {
auto dir = testController.createTempDirectory();
minifi::io::FileStream stream(dir / "test.txt", 0, true);
std::byte fake_buffer[1];
- REQUIRE(stream.read(gsl::make_span(fake_buffer).subspan(0, 0)) == 0);
+ REQUIRE(stream.read(std::span(fake_buffer).subspan(0, 0)) == 0);
}
TEST_CASE("Non-existing file read/write test") {
diff --git a/libminifi/test/unit/FileSystemRepositoryTests.cpp b/libminifi/test/unit/FileSystemRepositoryTests.cpp
index 5aa652e54..f21dafd1b 100644
--- a/libminifi/test/unit/FileSystemRepositoryTests.cpp
+++ b/libminifi/test/unit/FileSystemRepositoryTests.cpp
@@ -61,9 +61,9 @@ TEST_CASE("Test Physical memory usage", "[testphysicalmemoryusage]") {
auto resource_id = content_session->create();
auto stream = content_session->write(resource_id);
size_t file_size = 20_MB;
- gsl::span<const char> fragment = "well, hello there";
+ std::span<const char> fragment = "well, hello there";
for (size_t i = 0; i < file_size / fragment.size() + 1; ++i) {
- stream->write(fragment.as_span<const std::byte>());
+ stream->write(as_bytes(fragment));
}
using org::apache::nifi::minifi::utils::verifyEventHappenedInPollTime;
diff --git a/libminifi/test/unit/FlowFileSerializationTests.cpp b/libminifi/test/unit/FlowFileSerializationTests.cpp
index b623f4887..04c58bd19 100644
--- a/libminifi/test/unit/FlowFileSerializationTests.cpp
+++ b/libminifi/test/unit/FlowFileSerializationTests.cpp
@@ -25,6 +25,7 @@
#include "../TestBase.h"
#include "../Catch.h"
#include "utils/gsl.h"
+#include "utils/span.h"
#include "FlowFile.h"
#include "FlowFileRecord.h"
@@ -50,7 +51,7 @@ TEST_CASE("Payload Serializer", "[testPayload]") {
return cb(contentStream);
});
serializer.serialize(flowFile, result);
- const auto serialized = utils::span_to<std::string>(result->getBuffer().as_span<const char>());
+ const auto serialized = utils::span_to<std::string>(utils::as_span<const char>(result->getBuffer()));
REQUIRE(serialized == content);
}
@@ -70,7 +71,7 @@ TEST_CASE("FFv3 Serializer", "[testFFv3]") {
return cb(contentStream);
});
serializer.serialize(flowFile, result);
- const auto serialized = utils::span_to<std::string>(result->getBuffer().as_span<const char>());
+ const auto serialized = utils::span_to<std::string>(utils::as_span<const char>(result->getBuffer()));
std::string expected = "NiFiFF3";
expected += std::string("\x00\x02", 2); // number of attributes
diff --git a/libminifi/test/unit/LineByLineInputOutputStreamCallbackTests.cpp b/libminifi/test/unit/LineByLineInputOutputStreamCallbackTests.cpp
index 74e59f1c6..1e1abd80e 100644
--- a/libminifi/test/unit/LineByLineInputOutputStreamCallbackTests.cpp
+++ b/libminifi/test/unit/LineByLineInputOutputStreamCallbackTests.cpp
@@ -21,6 +21,7 @@
#include "core/logging/LoggerConfiguration.h"
#include "io/BufferStream.h"
#include "spdlog/spdlog.h"
+#include "utils/span.h"
using minifi::utils::LineByLineInputOutputStreamCallback;
@@ -71,7 +72,7 @@ TEST_CASE("LineByLineInputOutputStreamCallback can process a stream line by line
LineByLineInputOutputStreamCallback line_by_line_input_output_stream_callback{line_processor};
line_by_line_input_output_stream_callback(input_stream, output_stream);
- const auto output_data = utils::span_to<std::string>(output_stream->getBuffer().as_span<const char>());
+ const auto output_data = utils::span_to<std::string>(utils::as_span<const char>(output_stream->getBuffer()));
CHECK(output_data == expected_output);
}
@@ -92,7 +93,7 @@ TEST_CASE("LineByLineInputOutputStreamCallback can handle Windows line endings",
LineByLineInputOutputStreamCallback line_by_line_input_output_stream_callback{line_processor};
line_by_line_input_output_stream_callback(input_stream, output_stream);
- const auto output_data = utils::span_to<std::string>(output_stream->getBuffer().as_span<const char>());
+ const auto output_data = utils::span_to<std::string>(utils::as_span<const char>(output_stream->getBuffer()));
CHECK(output_data == expected_output);
}
diff --git a/libminifi/test/unit/LoggerTests.cpp b/libminifi/test/unit/LoggerTests.cpp
index 1fef27fa1..7a2e2ec65 100644
--- a/libminifi/test/unit/LoggerTests.cpp
+++ b/libminifi/test/unit/LoggerTests.cpp
@@ -26,6 +26,7 @@
#include "io/ZlibStream.h"
#include "StreamPipe.h"
#include "utils/IntegrationTestUtils.h"
+#include "utils/span.h"
using namespace std::literals::chrono_literals;
@@ -193,7 +194,7 @@ std::string decompress(const std::shared_ptr<InputStream>& input) {
auto decompressor = std::make_shared<ZlibDecompressStream>(gsl::make_not_null(output.get()));
minifi::internal::pipe(*input, *decompressor);
decompressor->close();
- return utils::span_to<std::string>(output->getBuffer().as_span<const char>());
+ return utils::span_to<std::string>(utils::as_span<const char>(output->getBuffer()));
}
TEST_CASE("Test Compression", "[ttl9]") {
diff --git a/libminifi/test/unit/ProvenanceTestHelper.h b/libminifi/test/unit/ProvenanceTestHelper.h
index 3f5a16c72..ec979e172 100644
--- a/libminifi/test/unit/ProvenanceTestHelper.h
+++ b/libminifi/test/unit/ProvenanceTestHelper.h
@@ -65,8 +65,7 @@ class TestRepositoryBase : public T_BaseRepository {
bool MultiPut(const std::vector<std::pair<std::string, std::unique_ptr<org::apache::nifi::minifi::io::BufferStream>>>& data) override {
for (const auto& item : data) {
- const auto buf = item.second->getBuffer().as_span<const uint8_t>();
- if (!Put(item.first, buf.data(), buf.size())) {
+ if (!Put(item.first, reinterpret_cast<const uint8_t*>(item.second->getBuffer().data()), item.second->size())) {
return false;
}
}
diff --git a/libminifi/test/unit/SiteToSiteHelper.h b/libminifi/test/unit/SiteToSiteHelper.h
index ed98ba76e..1a8c52423 100644
--- a/libminifi/test/unit/SiteToSiteHelper.h
+++ b/libminifi/test/unit/SiteToSiteHelper.h
@@ -62,7 +62,7 @@ class SiteToSiteResponder : public minifi::io::BaseStream {
* @param len length to read
* @return resulting read size
**/
- size_t read(gsl::span<std::byte> out_buffer) override {
+ size_t read(std::span<std::byte> out_buffer) override {
return server_responses_.read(out_buffer);
}
};
diff --git a/libminifi/test/unit/GslTest.cpp b/libminifi/test/unit/SpanTests.cpp
similarity index 77%
rename from libminifi/test/unit/GslTest.cpp
rename to libminifi/test/unit/SpanTests.cpp
index b85255486..4b648c8e4 100644
--- a/libminifi/test/unit/GslTest.cpp
+++ b/libminifi/test/unit/SpanTests.cpp
@@ -20,12 +20,12 @@
#include <string>
#include "../TestBase.h"
#include "../Catch.h"
-#include "utils/gsl.h"
+#include "utils/span.h"
namespace utils = org::apache::nifi::minifi::utils;
-TEST_CASE("span to", "[span to]") {
- const auto test_span = gsl::make_span("test text", 9);
+TEST_CASE("span_to") {
+ const auto test_span = std::span("test text", 9);
const auto string = utils::span_to<std::string>(test_span);
const auto vector = utils::span_to<std::vector>(test_span);
@@ -33,3 +33,11 @@ TEST_CASE("span to", "[span to]") {
REQUIRE('t' == vector[0]);
REQUIRE(9 == vector.size());
}
+
+TEST_CASE("as_span") {
+ const auto test_span = as_bytes(std::span("test text", 9));
+ const auto char_span = utils::as_span<const char>(test_span);
+
+ REQUIRE(char_span.size() == test_span.size());
+ REQUIRE(char_span[0] == 't');
+}
diff --git a/libminifi/test/unit/StreamTests.cpp b/libminifi/test/unit/StreamTests.cpp
index dc77c5438..a104ac74c 100644
--- a/libminifi/test/unit/StreamTests.cpp
+++ b/libminifi/test/unit/StreamTests.cpp
@@ -27,6 +27,7 @@
#include "../Catch.h"
#include "io/BaseStream.h"
#include "io/StreamSlice.h"
+#include "utils/span.h"
TEST_CASE("TestReadData", "[testread]") {
auto base = std::make_shared<minifi::io::BufferStream>();
@@ -76,7 +77,7 @@ TEST_CASE("TestWrite1", "[testwrite]") {
auto base = std::make_shared<minifi::io::BufferStream>();
base->write((uint64_t)0x0102030405060708);
std::string bytes(8, '\0');
- REQUIRE(8 == base->read(gsl::make_span(bytes).as_span<std::byte>()));
+ REQUIRE(8 == base->read(as_writable_bytes(std::span(bytes))));
REQUIRE(bytes == "\x01\x02\x03\x04\x05\x06\x07\x08");
}
@@ -102,5 +103,5 @@ TEST_CASE("StreamSliceTest1", "[teststreamslice]") {
REQUIRE(stream_slice->read(buffer2) == 4);
buffer2.resize(4);
REQUIRE(buffer == buffer2);
- REQUIRE(utils::span_to<std::vector>(gsl::make_span(buffer).as_span<uint8_t>()) == std::vector<uint8_t>({3, 4, 5, 6}));
+ REQUIRE(utils::span_to<std::vector>(utils::as_span<uint8_t>(std::span(buffer))) == std::vector<uint8_t>({3, 4, 5, 6}));
}
diff --git a/libminifi/test/unit/StringUtilsTests.cpp b/libminifi/test/unit/StringUtilsTests.cpp
index 2b64b5af5..a63c963fb 100644
--- a/libminifi/test/unit/StringUtilsTests.cpp
+++ b/libminifi/test/unit/StringUtilsTests.cpp
@@ -369,34 +369,24 @@ TEST_CASE("TestStringUtils::testBase64Encode", "[test base64 encode]") {
REQUIRE("b29vb28" == StringUtils::to_base64("ooooo", false /*url*/, false /*padded*/));
REQUIRE("b29vb29v" == StringUtils::to_base64("oooooo", false /*url*/, false /*padded*/));
+ std::vector<uint8_t> message{
+ 0x00, 0x10, 0x83, 0x10,
+ 0x51, 0x87, 0x20, 0x92,
+ 0x8b, 0x30, 0xd3, 0x8f,
+ 0x41, 0x14, 0x93, 0x51,
+ 0x55, 0x97, 0x61, 0x96,
+ 0x9b, 0x71, 0xd7, 0x9f,
+ 0x82, 0x18, 0xa3, 0x92,
+ 0x59, 0xa7, 0xa2, 0x9a,
+ 0xab, 0xb2, 0xdb, 0xaf,
+ 0xc3, 0x1c, 0xb3, 0xd3,
+ 0x5d, 0xb7, 0xe3, 0x9e,
+ 0xbb, 0xf3, 0xdf, 0xbf};
+
REQUIRE("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ==
- StringUtils::to_base64(gsl::make_span(std::vector<uint8_t>{
- 0x00, 0x10, 0x83, 0x10,
- 0x51, 0x87, 0x20, 0x92,
- 0x8b, 0x30, 0xd3, 0x8f,
- 0x41, 0x14, 0x93, 0x51,
- 0x55, 0x97, 0x61, 0x96,
- 0x9b, 0x71, 0xd7, 0x9f,
- 0x82, 0x18, 0xa3, 0x92,
- 0x59, 0xa7, 0xa2, 0x9a,
- 0xab, 0xb2, 0xdb, 0xaf,
- 0xc3, 0x1c, 0xb3, 0xd3,
- 0x5d, 0xb7, 0xe3, 0x9e,
- 0xbb, 0xf3, 0xdf, 0xbf}).as_span<const std::byte>()));
+ StringUtils::to_base64(as_bytes(std::span(message))));
REQUIRE("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" ==
- StringUtils::to_base64(gsl::make_span(std::vector<uint8_t>{
- 0x00, 0x10, 0x83, 0x10,
- 0x51, 0x87, 0x20, 0x92,
- 0x8b, 0x30, 0xd3, 0x8f,
- 0x41, 0x14, 0x93, 0x51,
- 0x55, 0x97, 0x61, 0x96,
- 0x9b, 0x71, 0xd7, 0x9f,
- 0x82, 0x18, 0xa3, 0x92,
- 0x59, 0xa7, 0xa2, 0x9a,
- 0xab, 0xb2, 0xdb, 0xaf,
- 0xc3, 0x1c, 0xb3, 0xd3,
- 0x5d, 0xb7, 0xe3, 0x9e,
- 0xbb, 0xf3, 0xdf, 0xbf}).as_span<const std::byte>(), true /*url*/));
+ StringUtils::to_base64(as_bytes(std::span(message)), true /*url*/));
}
TEST_CASE("TestStringUtils::testBase64Decode", "[test base64 decode]") {
@@ -536,8 +526,8 @@ TEST_CASE("StringUtils::removeFramingCharacters works correctly", "[removeFramin
// ignore terminating \0 character
template<size_t N>
-gsl::span<const std::byte> from_cstring(const char (&str)[N]) {
- return gsl::span<const char>(str, N-1).as_span<const std::byte>();
+std::span<const std::byte> from_cstring(const char (&str)[N]) {
+ return as_bytes(std::span<const char>(str, N-1));
}
TEST_CASE("StringUtils::escapeUnprintableBytes", "[escapeUnprintableBytes]") {
diff --git a/libminifi/test/unit/ZlibStreamTests.cpp b/libminifi/test/unit/ZlibStreamTests.cpp
index 9d5cfcbce..c69db9871 100644
--- a/libminifi/test/unit/ZlibStreamTests.cpp
+++ b/libminifi/test/unit/ZlibStreamTests.cpp
@@ -24,6 +24,7 @@
#include "io/ZlibStream.h"
#include "utils/gsl.h"
#include "utils/StringUtils.h"
+#include "utils/span.h"
namespace io = org::apache::nifi::minifi::io;
@@ -75,7 +76,7 @@ TEST_CASE("gzip compression and decompression", "[basic]") {
decompressStream.write(compressBuffer.getBuffer());
REQUIRE(decompressStream.isFinished());
- REQUIRE(original == utils::span_to<std::string>(decompressBuffer.getBuffer().as_span<const char>()));
+ REQUIRE(original == utils::span_to<std::string>(utils::as_span<const char>(decompressBuffer.getBuffer())));
}
TEST_CASE("gzip compression and decompression pipeline", "[basic]") {
@@ -114,5 +115,5 @@ TEST_CASE("gzip compression and decompression pipeline", "[basic]") {
compressStream.close();
REQUIRE(decompressStream.isFinished());
- REQUIRE(original == utils::span_to<std::string>(output.getBuffer().as_span<const char>()));
+ REQUIRE(original == utils::span_to<std::string>(utils::as_span<const char>(output.getBuffer())));
}
diff --git a/nanofi/tests/CSite2SiteTests.cpp b/nanofi/tests/CSite2SiteTests.cpp
index 5a6d6df87..2aabc0881 100644
--- a/nanofi/tests/CSite2SiteTests.cpp
+++ b/nanofi/tests/CSite2SiteTests.cpp
@@ -134,7 +134,7 @@ void accept_transfer(minifi::io::BaseStream* stream, const std::string& crcstr,
void sunny_path_bootstrap(minifi::io::BaseStream* stream, TransferState& transfer_state, S2SReceivedData& s2s_data) {
// Verify the magic string
s2s_data.magic_string.resize(4);
- stream->read(gsl::make_span(s2s_data.magic_string).as_span<std::byte>());
+ stream->read(as_writable_bytes(std::span(s2s_data.magic_string)));
uint8_t success = 0x14;
stream->write(&success, 1);
send_response_code(stream, 0x1);
@@ -145,7 +145,7 @@ void sunny_path_bootstrap(minifi::io::BaseStream* stream, TransferState& transfe
size_t read_len = 0;
std::array<std::byte, 1000> handshake_data{};
while (!found_codec) {
- const auto actual_len = stream->read(gsl::make_span(handshake_data).subspan(read_len));
+ const auto actual_len = stream->read(std::span(handshake_data).subspan(read_len));
if(actual_len == 0 || minifi::io::isError(actual_len)) {
continue;
}