#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace fluid { namespace client { class DataSetWriterClient : public FluidBaseClient, OfflineIn, OfflineOut { enum { kDataSet, kIDPrefix, kIDNumber, kBuffer }; static constexpr std::initializer_list idNumberDefaults{0, 0}; public: FLUID_DECLARE_PARAMS(DataSetClientRef::makeParam("dataSet", "DataSet ID"), StringParam("idPrefix", "ID Prefix"), LongArrayParam("idNumber", "ID Counter Offset", idNumberDefaults), BufferParam("buf", "Data Buffer")); DataSetWriterClient(ParamSetViewType &p) : mParams(p) {} template Result process(FluidContext &) { auto dataset = get().get(); if (auto datasetPtr = dataset.lock()) { std::string &idPrefix = get(); auto &idNumberArr = get(); if (idNumberArr.size() != 2) return {Result::Status::kError, "ID number malformed"}; if (idPrefix.size() == 0 && idNumberArr[0] == 0) return {Result::Status::kError, "No ID supplied"}; std::string id = idPrefix; if (idNumberArr[0] > 0) id += std::to_string(idNumberArr[1]); auto buf = get(); return datasetPtr->setPoint(id, buf); } else return {Result::Status::kError, "No DataSet"}; } }; using NRTThreadedDataSetWriter = NRTThreadingAdaptor>; } // namespace client } // namespace fluid