#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace fluid { namespace client { namespace datasetwr { enum { kDataSet, kIDPrefix, kIDNumber, kBuffer }; constexpr std::initializer_list idNumberDefaults{0, 0}; constexpr auto DataSetWrParams = defineParameters( DataSetClientRef::makeParam("dataSet", "DataSet ID"), StringParam("idPrefix", "ID Prefix"), LongArrayParam("idNumber", "ID Counter Offset", idNumberDefaults), BufferParam("buf", "Data Buffer")); class DataSetWriterClient : public FluidBaseClient, OfflineIn, OfflineOut { public: using ParamDescType = decltype(DataSetWrParams); using ParamSetViewType = ParameterSetView; std::reference_wrapper mParams; void setParams(ParamSetViewType &p) { mParams = p; } template auto &get() const { return mParams.get().template get(); } static constexpr auto &getParameterDescriptors() { return DataSetWrParams; } DataSetWriterClient(ParamSetViewType &p, FluidContext&) : mParams(p) {} template Result process(FluidContext &) { auto dataset = get().get(); if (auto datasetPtr = dataset.lock()) { std::string idPrefix = std::string(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"}; } }; } // namespace datasetwr using NRTThreadedDataSetWriter = NRTThreadingAdaptor>; } // namespace client } // namespace fluid