7#ifndef BACKENDS_P4TOOLS_COMMON_LIB_UTIL_H_
8#define BACKENDS_P4TOOLS_COMMON_LIB_UTIL_H_
18#include <boost/random/mersenne_twister.hpp>
31 static boost::random::mt19937 rng;
34 static std::optional<uint32_t> currentSeed;
44 static void setRandomSeed(
int seed);
53 static int64_t
getRandInt(int64_t min, int64_t max);
56 static int64_t
getRandInt(
const std::vector<int64_t> &percent);
63 static big_int
getRandBigInt(
const big_int &min,
const big_int &max);
79 std::string_view methodName,
const std::vector<const IR::Expression *> &argVector,
80 const IR::Type *returnType = IR::Type_Void::get(),
81 const IR::ParameterList *paramList =
new IR::ParameterList());
86 std::shuffle(inp->begin(), inp->end(), rng);
90 template <
typename Iter>
92 int random =
getRandInt(std::distance(start, end) - 1);
93 std::advance(start, random);
99 template <
typename ContainerType>
101 std::stringstream stringStream;
104 auto val = container.cbegin();
105 if (val != container.cend()) {
106 stringStream << *val++;
107 while (val != container.cend()) {
108 stringStream <<
", " << *val++;
112 return stringStream.str();
127 const IR::PathExpression *pathExpr);
131 const IR::Type_Name *type);
The Declaration interface, representing objects with names.
Definition declaration.h:17
Definition ir/vector.h:59