newmen/versatile-diamond

View on GitHub
engine/hand-generations/src/handbook.cpp

Summary

Maintainability
Test Coverage
#include "handbook.h"

// TODO: move matrixes to separated tables.* instance
// 10 :: ~C:i~
// 32 :: -^C%d<
// 33 :: ~^C%d<
// 34 :: ^HC%d<
// 35 :: HC:i:u~
// 36 :: H*C:i:u~
// 37 :: ~*C:i~
// 38 :: ~**C~
const ushort Handbook::__atomsNum = 39;
const bool Handbook::__atomsAccordance[Handbook::__atomsNum * Handbook::__atomsNum] = {
/*  0 */ true, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/*  1 */ false, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/*  2 */ true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false,
/*  3 */ false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/*  4 */ false, false, false, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/*  5 */ false, true, false, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/*  6 */ false, false, false, true, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/*  7 */ false, false, false, true, false, false, false, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/*  8 */ false, true, false, true, false, false, false, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/*  9 */ false, false, false, true, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/* 10 */ false, false, false, false, false, false, false, false, false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/* 11 */ false, false, false, false, false, false, false, false, false, false, false, true, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/* 12 */ false, false, false, false, false, false, false, false, false, false, false, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/* 13 */ false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, true, true, true, false, true, true, true, false, false, false, false, false, false, false,
/* 14 */ false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/* 15 */ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/* 16 */ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/* 17 */ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/* 18 */ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/* 19 */ false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/* 20 */ false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/* 21 */ false, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/* 22 */ false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/* 23 */ false, false, false, true, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/* 24 */ false, false, false, true, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
/* 25 */ false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, true, false, false, false, false, false, false, false,
/* 26 */ false, false, false, false, false, false, false, false, false, false, false, true, false, false, true, false, false, false, false, false, false, false, false, false, false, true, true, false, false, true, false, true, false, false, false, false, false, false, false,
/* 27 */ false, false, false, false, false, false, false, false, false, false, false, true, true, false, true, false, false, false, false, false, false, false, false, false, false, true, true, true, false, true, true, true, false, false, false, true, true, false, false,
/* 28 */ true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false,
/* 29 */ false, false, false, false, false, false, false, false, false, false, false, true, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, true, false, false, false, false, false, false, false,
/* 30 */ false, false, false, false, false, false, false, false, false, false, false, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, false, false, false, false, false, false, false,
/* 31 */ false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false,
/* 32 */ false, false, false, true, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false,
/* 33 */ false, false, false, true, false, false, true, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false,
/* 34 */ false, false, false, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false,
/* 35 */ false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, true, false, false, false, true, false, false, false,
/* 36 */ false, false, false, false, false, false, false, false, false, false, false, true, false, false, true, false, false, false, false, false, false, false, false, false, false, true, true, false, false, true, false, true, false, false, false, true, true, false, false,
/* 37 */ false, false, false, false, false, false, false, false, false, false, true, true, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false,
/* 38 */ false, false, false, false, false, false, false, false, false, false, true, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true
};

const ushort Handbook::__atomsSpecifing[Handbook::__atomsNum] =
{
    0, 28, 2, 0, 34, 5, 34, 7, 8, 7,
    10, 36, 27, 13, 35, 15, 16, 17, 15, 19,
    20, 21, 20, 23, 24, 35, 36, 27, 28, 36,
    27, 35, 32, 33, 34, 35, 36, 37, 38
};

const ushort Handbook::__hToActives[Handbook::__atomsNum] =
{
    28, 2, 2, 1, 5, 5, 5, 8, 8, 8,
    37, 12, 13, 13, 11, 16, 17, 17, 16, 19,
    21, 21, 21, 23, 24, 26, 27, 13, 2, 30,
    13, 29, 32, 33, 5, 36, 27, 38, 38
};

const ushort Handbook::__hOnAtoms[Handbook::__atomsNum] =
{
    2, 1, 0, 2, 1, 0, 1, 1, 0, 1,
    2, 2, 1, 0, 3, 2, 1, 0, 2, 0,
    1, 0, 1, 0, 0, 3, 2, 1, 1, 2,
    1, 3, 0, 0, 1, 3, 2, 1, 0
};

const ushort Handbook::__activesToH[Handbook::__atomsNum] =
{
    0, 3, 1, 3, 4, 6, 6, 7, 9, 9,
    10, 14, 11, 12, 14, 15, 18, 16, 18, 19,
    20, 22, 22, 23, 24, 25, 25, 26, 0, 31,
    29, 31, 32, 33, 34, 35, 35, 10, 37
};

const ushort Handbook::__activesOnAtoms[Handbook::__atomsNum] =
{
    0, 1, 2, 0, 0, 1, 0, 0, 1, 0,
    0, 1, 2, 3, 0, 0, 1, 2, 0, 0,
    0, 1, 0, 0, 0, 0, 1, 2, 1, 1,
    2, 0, 0, 0, 0, 0, 1, 1, 2
};

#ifdef JSONLOG
JSONStepsLogger Handbook::__stepsLogger;
JSONStepsLogger &Handbook::stepsLogger()
{
    return __stepsLogger;
}
#endif // JSONLOG

std::string Handbook::__configsDir = "configs";
void Handbook::setConfigsDir(const std::string &configsDir)
{
    __configsDir = configsDir;
}

const std::string &Handbook::configsDir()
{
    return __configsDir;
}

std::string Handbook::runConfigPath()
{
    return __configsDir + "/run.yml";
}

std::string Handbook::envConfigPath()
{
    return __configsDir + "/env.yml";
}

std::string Handbook::ratesConfigPath()
{
    return __configsDir + "/reactions.yml";
}

MC Handbook::__mc(ALL_SPEC_REACTIONS_NUM, UBIQUITOUS_REACTIONS_NUM);
MC &Handbook::mc()
{
    return __mc;
}

Handbook::SurfaceAmorph Handbook::__amorph;
Handbook::SurfaceAmorph &Handbook::amorph()
{
    return __amorph;
}

Handbook::SKeeper Handbook::__specificKeeper;
Handbook::SKeeper &Handbook::specificKeeper()
{
    return __specificKeeper;
}

Handbook::LKeeper Handbook::__lateralKeeper;
Handbook::LKeeper &Handbook::lateralKeeper()
{
    return __lateralKeeper;
}

Scavenger Handbook::__scavenger;
Scavenger &Handbook::scavenger()
{
    return __scavenger;
}

const ushort Handbook::__regularAtomsNum = 1;
const ushort Handbook::__regularAtomsTypes[Handbook::__regularAtomsNum] = { 24 };
bool Handbook::isRegular(ushort type)
{
    bool b = false;
    for (int i = 0; i < __regularAtomsNum; ++i)
    {
        b = b || type == __regularAtomsTypes[i];
    }

    return b;
}

ushort Handbook::activesFor(ushort type)
{
    assert(type < __atomsNum);
    return __activesOnAtoms[type];
}

ushort Handbook::hydrogensFor(ushort type)
{
    assert(type < __atomsNum);
    return __hOnAtoms[type];
}

ushort Handbook::hToActivesFor(ushort type)
{
    assert(type < __atomsNum);
    return __hToActives[type];
}

ushort Handbook::activesToHFor(ushort type)
{
    assert(type < __atomsNum);
    return __activesToH[type];
}

bool Handbook::atomIs(ushort complexType, ushort typeOf)
{
    assert(complexType < __atomsNum);
    assert(typeOf < __atomsNum);
    return __atomsAccordance[__atomsNum * complexType + typeOf];
}

ushort Handbook::specificate(ushort type)
{
    if (type == NO_VALUE)
    {
        return type;
    }
    else
    {
        assert(type < __atomsNum);
        return __atomsSpecifing[type];
    }
}