LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Loading...
Searching...
No Matches
api_dispatch.cpp File Reference
#include "line/reg/api_dispatch.h"
#include <algorithm>
#include <cctype>
#include <cmath>
#include <functional>
#include <map>
#include <sstream>
#include "line/api/mc/ctmc_solve.h"
#include "line/api/mc/dtmc_solve.h"
#include "line/api/aoi/aoi_fcfs_dm1.h"
#include "line/api/aoi/aoi_fcfs_gim1.h"
#include "line/api/aoi/aoi_fcfs_md1.h"
#include "line/api/aoi/aoi_fcfs_mgi1.h"
#include "line/api/aoi/aoi_fcfs_mm1.h"
#include "line/api/aoi/aoi_lcfsd_gim1.h"
#include "line/api/aoi/aoi_lcfsd_mgi1.h"
#include "line/api/aoi/aoi_lcfspr_dm1.h"
#include "line/api/aoi/aoi_lcfspr_gim1.h"
#include "line/api/aoi/aoi_lcfspr_md1.h"
#include "line/api/aoi/aoi_lcfspr_mgi1.h"
#include "line/api/aoi/aoi_lcfspr_mm1.h"
#include "line/api/aoi/aoi_lcfss_gim1.h"
#include "line/api/aoi/aoi_lcfss_mgi1.h"
#include "line/api/aoi/aoi_lst_det.h"
#include "line/api/aoi/aoi_lst_erlang.h"
#include "line/api/aoi/aoi_lst_exp.h"
#include "line/api/aoi/aoi_lst_ph.h"
#include "line/api/fj/fj_bounds.h"
#include "line/api/fj/fj_char_max.h"
#include "line/api/fj/fj_gk_bound.h"
#include "line/api/fj/fj_harmonic.h"
#include "line/api/fj/fj_quantile.h"
#include "line/api/fj/fj_ordstat_exp.h"
#include "line/api/fj/fj_quorum_moments.h"
#include "line/api/fj/fj_respt_2way.h"
#include "line/api/fj/fj_respt_nt.h"
#include "line/api/fj/fj_respt_varki.h"
#include "line/api/fj/fj_respt_vm.h"
#include "line/api/fj/fj_rmax.h"
#include "line/api/fj/fj_rmax_erlang.h"
#include "line/api/fj/fj_rmax_evd.h"
#include "line/api/fj/fj_sm_tput.h"
#include "line/api/fj/fj_synch_delay.h"
#include "line/api/fj/fj_xmax_2.h"
#include "line/api/fj/fj_xmax_approx.h"
#include "line/api/fj/fj_xmax_emma.h"
#include "line/api/fj/fj_xmax_erlang.h"
#include "line/api/fj/fj_xmax_exp.h"
#include "line/api/fj/fj_xmax_hyperexp.h"
#include "line/api/fj/fj_xmax_normal.h"
#include "line/api/fj/fj_xmax_pareto.h"
#include "line/api/moment/moment_binomial_from_factorial.h"
#include "line/api/moment/moment_binomial_from_negbinomial.h"
#include "line/api/moment/moment_binotrans.h"
#include "line/api/moment/moment_binotransinv.h"
#include "line/api/moment/moment_central_from_raw.h"
#include "line/api/moment/moment_factorial_from_binomial.h"
#include "line/api/moment/moment_factorial_from_raw.h"
#include "line/api/moment/moment_factorial_from_upfactorial.h"
#include "line/api/moment/moment_lah.h"
#include "line/api/moment/moment_negbinomial_from_binomial.h"
#include "line/api/moment/moment_negbinomial_from_upfactorial.h"
#include "line/api/moment/moment_raw_from_central.h"
#include "line/api/moment/moment_raw_from_factorial.h"
#include "line/api/moment/moment_raw_from_upfactorial.h"
#include "line/api/moment/moment_stirling1.h"
#include "line/api/moment/moment_stirling2.h"
#include "line/api/moment/moment_stirlingcycle.h"
#include "line/api/moment/moment_upfactorial_from_factorial.h"
#include "line/api/moment/moment_upfactorial_from_negbinomial.h"
#include "line/api/moment/moment_upfactorial_from_raw.h"
#include "line/api/mc/ctmc_courtois.h"
#include "line/api/mc/ctmc_fau.h"
#include "line/api/mc/ctmc_foxglynn.h"
#include "line/api/mc/ctmc_saddlepoint.h"
#include "line/api/mc/ctmc_bicgstab.h"
#include "line/api/mc/ctmc_gmres.h"
#include "line/api/mc/ctmc_gmres_multi.h"
#include "line/api/mc/ctmc_kms.h"
#include "line/api/mc/ctmc_multi.h"
#include "line/api/mc/ctmc_randomization.h"
#include "line/api/mc/ctmc_sens.h"
#include "line/api/mc/ctmc_solve_reducible.h"
#include "line/api/mc/ctmc_solve_reducible_blkdecomp.h"
#include "line/api/mc/ctmc_takahashi.h"
#include "line/api/mc/ctmc_transient.h"
#include "line/api/mc/ctmc_transient_sens.h"
#include "line/api/mc/dtmc_makestochastic.h"
#include "line/api/mc/dtmc_solve_reducible.h"
#include "line/api/mc/stronglyconncomp.h"
#include "line/api/pfqn/pfqn_ca.h"
#include "line/api/pfqn/pfqn_comom.h"
#include "line/api/pfqn/pfqn_comomrm.h"
#include "line/api/pfqn/pfqn_comomrm_ms.h"
#include "line/api/pfqn/pfqn_conv.h"
#include "line/api/pfqn/pfqn_gld.h"
#include "line/api/pfqn/pfqn_mva.h"
#include "line/api/pfqn/pfqn_procomom.h"
#include "line/api/pfqn/pfqn_recal.h"
#include "line/api/sim/sim_firquest.h"
#include "line/api/qsys/qsys_bmapphnn_retrial.h"
#include "line/api/qsys/qsys_dmc.h"
#include "line/api/dqsys/dqsys_geogeo1.h"
#include "line/api/dqsys/dqsys_geoxgeo1.h"
#include "line/api/qsys/qsys_gg1.h"
#include "line/api/qsys/qsys_gig1_approx_allencunneen.h"
#include "line/api/qsys/qsys_gig1_approx_gelenbe.h"
#include "line/api/qsys/qsys_gig1_approx_heyman.h"
#include "line/api/qsys/qsys_gig1_approx_kimura.h"
#include "line/api/qsys/qsys_gig1_approx_klb.h"
#include "line/api/qsys/qsys_gig1_approx_kobayashi.h"
#include "line/api/qsys/qsys_gig1_approx_marchal.h"
#include "line/api/qsys/qsys_gig1_approx_myskja.h"
#include "line/api/qsys/qsys_gig1_approx_myskja2.h"
#include "line/api/qsys/qsys_gig1_lbnd.h"
#include "line/api/qsys/qsys_gig1_rqt.h"
#include "line/api/qsys/qsys_gig1_ubnd_kingman.h"
#include "line/api/qsys/qsys_gigk_approx.h"
#include "line/api/qsys/qsys_gigk_approx_cosmetatos.h"
#include "line/api/qsys/qsys_gigk_approx_kingman.h"
#include "line/api/qsys/qsys_gigk_approx_whitt.h"
#include "line/api/qsys/qsys_ggnm_diffusion.h"
#include "line/api/qsys/qsys_gig1_bnds_extremal.h"
#include "line/api/qsys/qsys_mgisrgi_whitt.h"
#include "line/api/qsys/qsys_mmk_qed.h"
#include "line/api/qsys/qsys_gigk_rqt.h"
#include "line/api/qsys/qsys_gigk_rqt_gamma.h"
#include "line/api/qsys/qsys_gm1.h"
#include "line/api/qsys/qsys_mapd1.h"
#include "line/api/qsys/qsys_mapdc.h"
#include "line/api/qsys/qsys_mapg1.h"
#include "line/api/qsys/qsys_mapm1.h"
#include "line/api/qsys/qsys_mapmap1.h"
#include "line/api/qsys/qsys_mapmc.h"
#include "line/api/qsys/qsys_mapph1.h"
#include "line/api/qsys/qsys_mapphc.h"
#include "line/api/qsys/qsys_mg1.h"
#include "line/api/qsys/qsys_mg1_fb.h"
#include "line/api/qsys/qsys_mg1_lrpt.h"
#include "line/api/qsys/qsys_mg1_prio.h"
#include "line/api/qsys/qsys_mg1_psjf.h"
#include "line/api/qsys/qsys_mg1_setf.h"
#include "line/api/qsys/qsys_mg1_srpt.h"
#include "line/api/qsys/qsys_mg1k_loss_mgs.h"
#include "line/api/qsys/qsys_mginf.h"
#include "line/api/qsys/qsys_mm1.h"
#include "line/api/qsys/qsys_mm1_dps.h"
#include "line/api/qsys/qsys_mm1k_loss.h"
#include "line/api/qsys/qsys_mmck.h"
#include "line/api/qsys/qsys_mmcc_retrial_fp.h"
#include "line/api/qsys/qsys_mmk.h"
#include "line/api/qsys/qsys_mxm1.h"
#include "line/api/qsys/qsys_phm1.h"
#include "line/api/qsys/qsys_phmc.h"
#include "line/api/qsys/qsys_phph1.h"
#include "line/api/sim/sim_fquest.h"
#include "line/api/sim/sim_quest_options.h"
#include "line/api/sim/sim_shapirowilk.h"
#include "line/api/sim/sim_sts_quantile_areas.h"
#include "line/api/sim/sim_vonneumann.h"

Go to the source code of this file.

Namespaces

namespace  line
namespace  line::reg

Macros

#define LINE_QSYS_GIG1(OpName, fn)
#define LINE_QSYS_GIGK(OpName, fn)
#define LINE_QSYS_MYSKJA(OpName, fn)
#define LINE_QSYS_MG1_DISC(OpName, fn, ResultT)
 The six M/G/1 disciplines, all {W per class, rhohat}.
#define LINE_MOMENT_VEC(OpName, fn, in_key, out_key)
#define LINE_MOMENT_TRI(OpName, fn, out_key)
 The four triangular coefficient matrices, each a function of the order n.
#define LINE_AOI_TWO(OpName, fn, k1, k2)
#define LINE_AOI_MGI1_MOMENTS(OpName, fn)
 The two M/GI/1 laws that need only the first two service moments.
#define LINE_AOI_GIM1_ONE(OpName, fn)
#define LINE_FJ_K_LAMBDA_MU(OpName, fn, out_key)
 The many members returning one bare number, under the reference's name.
#define LINE_FJ_K_MU(OpName, fn, out_key)

Functions

ArithSpec line::reg::parse_arith (const std::string &text)
 Parse –arith.
std::vector< std::string > line::reg::api_exposed_functions ()
 Names exposed over this boundary, sorted; a subset of the registry.
bool line::reg::api_is_exposed (const std::string &name)
 True when the named function has a dispatch entry.
Json line::reg::api_invoke (const std::string &name, const std::string &arith, const Json &args)
 Invoke one API function.
std::string line::reg::api_render_readable (const Json &result)
 Human-readable rendering of the object api_invoke returns, for -o readable.

Macro Definition Documentation

◆ LINE_AOI_GIM1_ONE

#define LINE_AOI_GIM1_ONE ( OpName,
fn )
Value:
struct OpName { \
template <class T> \
static Json run(Args& a) { \
const T mu = a.number<T>("mu"); \
T E1 = num_traits<T>::from_int(0), E2 = num_traits<T>::from_int(0); \
bool has_E2 = false; \
const aoi::Lst<T> Y = read_aoi_lst<T>(a, E1, E2, has_E2); \
a.done(); \
return aoi_lst_results(aoi::fn(Y, mu, E1)); \
} \
}

Definition at line 2351 of file api_dispatch.cpp.

◆ LINE_AOI_MGI1_MOMENTS

#define LINE_AOI_MGI1_MOMENTS ( OpName,
fn )
Value:
struct OpName { \
template <class T> \
static Json run(Args& a) { \
const T lambda = a.number<T>("lambda"); \
const T E_H = a.number<T>("E_H"); \
const T E_H2 = a.number<T>("E_H2"); \
a.done(); \
return aoi_lst_results(aoi::fn(lambda, E_H, E_H2)); \
} \
}

The two M/GI/1 laws that need only the first two service moments.

Definition at line 2299 of file api_dispatch.cpp.

◆ LINE_AOI_TWO

#define LINE_AOI_TWO ( OpName,
fn,
k1,
k2 )
Value:
struct OpName { \
template <class T> \
static Json run(Args& a) { \
const T x = a.number<T>(k1); \
const T y = a.number<T>(k2); \
a.done(); \
return aoi_results(aoi::fn(x, y)); \
} \
}

Definition at line 2279 of file api_dispatch.cpp.

◆ LINE_FJ_K_LAMBDA_MU

#define LINE_FJ_K_LAMBDA_MU ( OpName,
fn,
out_key )
Value:
struct OpName { \
template <class T> \
static Json run(Args& a) { \
const unsigned K = a.uinteger("K"); \
const T lambda = a.number<T>("lambda"); \
const T mu = a.number<T>("mu"); \
a.done(); \
Json out; \
out[out_key] = encode_scalar(fj::fn(K, lambda, mu)); \
return out; \
} \
}

The many members returning one bare number, under the reference's name.

Definition at line 2379 of file api_dispatch.cpp.

◆ LINE_FJ_K_MU

#define LINE_FJ_K_MU ( OpName,
fn,
out_key )
Value:
struct OpName { \
template <class T> \
static Json run(Args& a) { \
const unsigned K = a.uinteger("K"); \
const T mu = a.number<T>("mu"); \
a.done(); \
Json out; \
out[out_key] = encode_scalar(fj::fn(K, mu)); \
return out; \
} \
}

Definition at line 2399 of file api_dispatch.cpp.

◆ LINE_MOMENT_TRI

#define LINE_MOMENT_TRI ( OpName,
fn,
out_key )
Value:
struct OpName { \
template <class T> \
static Json run(Args& a) { \
const int n = a.required_integer("n"); \
a.done(); \
Json out; \
out[out_key] = encode_matrix(moment::fn<T>(n)); \
return out; \
} \
}

The four triangular coefficient matrices, each a function of the order n.

Definition at line 1706 of file api_dispatch.cpp.

◆ LINE_MOMENT_VEC

#define LINE_MOMENT_VEC ( OpName,
fn,
in_key,
out_key )
Value:
struct OpName { \
template <class T> \
static Json run(Args& a) { \
const std::vector<T> v = a.vector<T>(in_key); \
a.done(); \
Json out; \
out[out_key] = encode_vector(moment::fn(v)); \
return out; \
} \
}

Definition at line 1657 of file api_dispatch.cpp.

◆ LINE_QSYS_GIG1

#define LINE_QSYS_GIG1 ( OpName,
fn )
Value:
struct OpName { \
template <class T> \
static Json run(Args& a) { \
const T lambda = a.number<T>("lambda"); \
const T mu = a.number<T>("mu"); \
const T ca = a.number<T>("ca"); \
const T cs = a.number<T>("cs"); \
a.done(); \
return qsys_results(qsys::fn(lambda, mu, ca, cs)); \
} \
}

Definition at line 720 of file api_dispatch.cpp.

◆ LINE_QSYS_GIGK

#define LINE_QSYS_GIGK ( OpName,
fn )
Value:
struct OpName { \
template <class T> \
static Json run(Args& a) { \
const T lambda = a.number<T>("lambda"); \
const T mu = a.number<T>("mu"); \
const T ca = a.number<T>("ca"); \
const T cs = a.number<T>("cs"); \
const unsigned k = a.uinteger("k"); \
a.done(); \
return qsys_results(qsys::fn(lambda, mu, ca, cs, k)); \
} \
}

Definition at line 744 of file api_dispatch.cpp.

◆ LINE_QSYS_MG1_DISC

#define LINE_QSYS_MG1_DISC ( OpName,
fn,
ResultT )
Value:
struct OpName { \
template <class T> \
static Json run(Args& a) { \
const std::vector<T> lambda = a.vector<T>("lambda"); \
const std::vector<T> mu = a.vector<T>("mu"); \
const std::vector<T> cs = a.vector<T>("cs"); \
a.done(); \
const qsys::ResultT<T> r = qsys::fn(lambda, mu, cs); \
Json out; \
out["W"] = encode_vector(r.W); \
out["rhohat"] = encode_scalar(r.rhohat); \
return out; \
} \
}

The six M/G/1 disciplines, all {W per class, rhohat}.

Definition at line 1253 of file api_dispatch.cpp.

◆ LINE_QSYS_MYSKJA

#define LINE_QSYS_MYSKJA ( OpName,
fn )
Value:
struct OpName { \
template <class T> \
static Json run(Args& a) { \
const T lambda = a.number<T>("lambda"); \
const T mu = a.number<T>("mu"); \
const T ca = a.number<T>("ca"); \
const T cs = a.number<T>("cs"); \
const T q0 = a.number<T>("q0"); \
const T qa = a.number<T>("qa"); \
a.done(); \
return qsys_results(qsys::fn(lambda, mu, ca, cs, q0, qa)); \
} \
}

Definition at line 1001 of file api_dispatch.cpp.