#include <cmath>
#include <iostream>
#include <sstream>
#include <vector>
int main() {
std::cout << "Example 1: Simple 3-stage pipeline\n";
{
std::vector<int> results;
int counter = 0;
if (counter >= 10) {
return {};
}
return counter++;
},
[](int value) { return value * value; },
[&results](int value) { results.push_back(value); });
std::cout << " Squared values: ";
for (int r : results) {
std::cout << r << " ";
}
std::cout << "\n";
}
std::cout << "\nExample 2: Pipeline with parallel transform stage\n";
{
std::vector<double> results;
int counter = 0;
dispenso::pipeline(
if (counter >= 100) {
return {};
}
return counter++;
},
[](int value) {
return std::sqrt(static_cast<double>(value));
},
4),
[&results](double value) { results.push_back(value); });
std::cout << " First 5 sqrt results: ";
for (size_t i = 0; i < 5 && i < results.size(); ++i) {
std::cout << results[i] << " ";
}
std::cout << "...\n";
std::cout << " Total results: " << results.size() << "\n";
}
std::cout << "\nExample 3: Pipeline with filtering (keep only even numbers)\n";
{
std::vector<int> results;
int counter = 0;
dispenso::pipeline(
if (counter >= 20) {
return {};
}
return counter++;
},
if (value % 2 == 0) {
return value;
}
return {};
},
[&results](int value) { results.push_back(value); });
std::cout << " Even numbers: ";
for (int r : results) {
std::cout << r << " ";
}
std::cout << "\n";
}
std::cout << "\nExample 4: Pipeline with type transformations\n";
{
std::vector<std::string> results;
int counter = 0;
dispenso::pipeline(
if (counter >= 5) {
return {};
}
return counter++;
},
[](int value) { return static_cast<double>(value) * 1.5; },
[](double value) {
std::ostringstream oss;
oss << "Value: " << value;
return oss.str();
},
[&results](std::string value) { results.push_back(std::move(value)); });
std::cout << " String results:\n";
for (const auto& r : results) {
std::cout << " " << r << "\n";
}
}
std::cout << "\nExample 5: Pipeline with custom ThreadPool\n";
{
std::vector<int> results;
int counter = 0;
dispenso::pipeline(
customPool,
if (counter >= 10) {
return {};
}
return counter++;
},
dispenso::stage([](
int value) {
return value + 100; },
dispenso::kStageNoLimit),
[&results](int value) { results.push_back(value); });
std::cout << " Results from custom pool: ";
for (int r : results) {
std::cout << r << " ";
}
std::cout << "\n";
}
std::cout << "\nExample 6: Single-stage pipeline\n";
{
int sum = 0;
int counter = 0;
dispenso::pipeline([&]() -> bool {
if (counter >= 10) {
return false;
}
sum += counter++;
return true;
});
std::cout << " Sum computed in single stage: " << sum << " (expected: 45)\n";
}
std::cout << "\nAll Pipeline examples completed successfully!\n";
return 0;
}
detail::OpResult< T > OpResult
Optional-like storage with in-place construction (C++14 compatible).