newmen/versatile-diamond

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

Summary

Maintainability
Test Coverage
#ifndef HANDBOOK_H
#define HANDBOOK_H

#include <string>

#include <atoms/atom.h>
#include <mc/common_mc_data.h>
#include <mc/dynamic_mc.h>
#include <mc/tree_mc.h>
#include <tools/common.h>
#include <tools/scavenger.h>
#include <tools/json_steps_logger.h>
#include <species/keeper.h>
#include <species/lateral_spec.h>
#include <species/specific_spec.h>
using namespace vd;

#include "env.h"
#include "finder.h"
#include "names.h"
#include "phases/diamond.h"
#include "phases/phase_boundary.h"

#define MC DynamicMC

class Handbook
{
private:
    static std::string __configsDir;

public:
    static void setConfigsDir(const std::string &configsDir);
    static const std::string &configsDir();
    static std::string runConfigPath();
    static std::string envConfigPath();
    static std::string ratesConfigPath();

public:
    typedef PhaseBoundary SurfaceAmorph;
    typedef Diamond SurfaceCrystal;

private:
    typedef Keeper<LateralSpec, &LateralSpec::findLateralReactions> LKeeper;
    typedef Keeper<SpecificSpec, &SpecificSpec::findTypicalReactions> SKeeper;

    static MC __mc;
    static SurfaceAmorph __amorph;

    static LKeeper __lateralKeeper;
    static SKeeper __specificKeeper;
    static Scavenger __scavenger;

#ifdef JSONLOG
    static JSONStepsLogger __stepsLogger;
#endif // JSONLOG

public:
    ~Handbook();

#ifdef JSONLOG
    static JSONStepsLogger &stepsLogger();
#endif // JSONLOG
    static MC &mc();

    static SurfaceAmorph &amorph();

    static SKeeper &specificKeeper();
    static LKeeper &lateralKeeper();

    static Scavenger &scavenger();

    static bool isRegular(ushort type);

    static ushort activesFor(ushort type);
    static ushort hydrogensFor(ushort type);
    static ushort hToActivesFor(ushort type);
    static ushort activesToHFor(ushort type);

private:
    static const bool __atomsAccordance[];
    static const ushort __atomsSpecifing[];

    static const ushort __regularAtomsTypes[];
    static const ushort __regularAtomsNum;

    static const ushort __hToActives[];
    static const ushort __activesToH[];

public:
    static const ushort __atomsNum;

    static const ushort __hOnAtoms[];
    static const ushort __activesOnAtoms[];

    static bool atomIs(ushort complexType, ushort typeOf);
    static ushort specificate(ushort type);
};

#endif // HANDBOOK_H