BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
Public Member Functions | Static Protected Attributes | Private Types | Private Attributes | Friends
BDSTypeSafeEnum< def, inner > Class Template Reference

Improve type-safety of native enum data type in C++. More...

#include <BDSTypeSafeEnum.hh>

Inheritance diagram for BDSTypeSafeEnum< def, inner >:
Inheritance graph
Collaboration diagram for BDSTypeSafeEnum< def, inner >:
Collaboration graph

Public Member Functions

 BDSTypeSafeEnum (type v)
 
type underlying () const
 return underlying value (can be used in switch statement) More...
 
std::string ToString () const
 

Static Protected Attributes

static std::map< BDSTypeSafeEnum< def, inner >, std::string > * dictionary
 

Private Types

typedef inner type
 

Private Attributes

inner val
 

Friends

std::ostream & operator<< (std::ostream &out, const BDSTypeSafeEnum &a)
 
bool operator== (const BDSTypeSafeEnum &lhs, const BDSTypeSafeEnum &rhs)
 operators for ordering More...
 
bool operator!= (const BDSTypeSafeEnum &lhs, const BDSTypeSafeEnum &rhs)
 operators for ordering More...
 
bool operator< (const BDSTypeSafeEnum &lhs, const BDSTypeSafeEnum &rhs)
 operators for ordering More...
 
bool operator<= (const BDSTypeSafeEnum &lhs, const BDSTypeSafeEnum &rhs)
 operators for ordering More...
 
bool operator> (const BDSTypeSafeEnum &lhs, const BDSTypeSafeEnum &rhs)
 operators for ordering More...
 
bool operator>= (const BDSTypeSafeEnum &lhs, const BDSTypeSafeEnum &rhs)
 operators for ordering More...
 

Detailed Description

template<typename def, typename inner = typename def::type>
class BDSTypeSafeEnum< def, inner >

Improve type-safety of native enum data type in C++.

Author
Jochem Snuverink

more info at https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Type_Safe_Enum

the class includes a dictionary map that returns a customisable std::string

Example: struct color_def { enum type { red, green, blue }; }; typedef BDSTypeSafeEnum<color_def,int> color; color c = color::red;

Definition at line 46 of file BDSTypeSafeEnum.hh.

Member Typedef Documentation

◆ type

template<typename def , typename inner = typename def::type>
typedef inner BDSTypeSafeEnum< def, inner >::type
private

Definition at line 48 of file BDSTypeSafeEnum.hh.

Constructor & Destructor Documentation

◆ BDSTypeSafeEnum() [1/2]

template<typename def , typename inner = typename def::type>
BDSTypeSafeEnum< def, inner >::BDSTypeSafeEnum ( )
inline

Definition at line 59 of file BDSTypeSafeEnum.hh.

◆ BDSTypeSafeEnum() [2/2]

template<typename def , typename inner = typename def::type>
BDSTypeSafeEnum< def, inner >::BDSTypeSafeEnum ( type  v)
inline

Definition at line 60 of file BDSTypeSafeEnum.hh.

Member Function Documentation

◆ ToString()

template<typename def , typename inner = typename def::type>
std::string BDSTypeSafeEnum< def, inner >::ToString ( ) const
inline

Definition at line 64 of file BDSTypeSafeEnum.hh.

◆ underlying()

template<typename def , typename inner = typename def::type>
type BDSTypeSafeEnum< def, inner >::underlying ( ) const
inline

return underlying value (can be used in switch statement)

Definition at line 62 of file BDSTypeSafeEnum.hh.

Referenced by BDSParallelWorldSampler::AdjustTransform(), BDSArray4DCoords::BuildDimensionIndex(), BDSParallelWorldSampler::BuildSampler(), BDSBeamPipeInfo::CheckApertureInfo(), BDSApertureInfo::CheckApertureInfo(), BDSBLMFactory::CreateBLM(), BDSCrystalFactory::CreateCrystal(), BDSFieldFactory::CreateField(), BDSFieldFactory::CreateFieldEM(), BDSFieldFactory::CreateFieldERaw(), BDSFieldFactory::CreateFieldIrregular(), BDSFieldFactory::CreateFieldMagRaw(), BDSFieldFactory::CreateIntegratorEM(), BDSFieldFactory::CreateIntegratorMag(), BDSFieldLoader::CreateInterpolator1D(), BDSFieldLoader::CreateInterpolator2D(), BDSFieldLoader::CreateInterpolator3D(), BDSFieldLoader::CreateInterpolator4D(), BDSMagnetOuterFactory::CreateMagnetOuter(), BDSOutputFactory::CreateOutput(), BDS::DetermineFieldClassType(), BDSMagnet::DetermineScalingKey(), BDSArray4DCoords::DimensionIndex(), BDSApertureInfo::Extent(), BDSBeamPipeInfo::ExtentInner(), BDSBeamPipeFactory::GetAppropriateFactory(), BDSGeometryFactory::GetAppropriateFactory(), BDSMagnetOuterFactory::GetAppropriateFactory(), BDSTunnelFactory::GetAppropriateFactory(), BDSScorerFactory::GetAppropriateScorer(), BDSIntegratorSet::Integrator(), BDS::IntegratorSet(), BDS::InterpolatorTypeIsAuto(), BDSFieldLoader::LoadEField(), BDSFieldLoader::LoadEMField(), BDSFieldLoader::LoadMagField(), BDS::NDimensionsOfFieldFormat(), BDS::NDimensionsOfInterpolatorType(), BDSHepMC3Reader::OpenFile(), BDSParallelWorldSampler::Place(), BDSComponentFactory::PrepareMagnetOuterFieldInfo(), BDSSDManager::SensitiveDetector(), BDSBunchSigmaMatrix::SetOptions(), and BDSCollimatorCrystal::TransverseOffsetToEdge().

Here is the caller graph for this function:

Friends And Related Function Documentation

◆ operator!=

template<typename def , typename inner = typename def::type>
bool operator!= ( const BDSTypeSafeEnum< def, inner > &  lhs,
const BDSTypeSafeEnum< def, inner > &  rhs 
)
friend

operators for ordering

Definition at line 72 of file BDSTypeSafeEnum.hh.

◆ operator<

template<typename def , typename inner = typename def::type>
bool operator< ( const BDSTypeSafeEnum< def, inner > &  lhs,
const BDSTypeSafeEnum< def, inner > &  rhs 
)
friend

operators for ordering

Definition at line 73 of file BDSTypeSafeEnum.hh.

◆ operator<<

template<typename def , typename inner = typename def::type>
std::ostream & operator<< ( std::ostream &  out,
const BDSTypeSafeEnum< def, inner > &  a 
)
friend

stream operator, returns string from dictionary if defined, else underlying type (typically int)

Definition at line 79 of file BDSTypeSafeEnum.hh.

◆ operator<=

template<typename def , typename inner = typename def::type>
bool operator<= ( const BDSTypeSafeEnum< def, inner > &  lhs,
const BDSTypeSafeEnum< def, inner > &  rhs 
)
friend

operators for ordering

Definition at line 74 of file BDSTypeSafeEnum.hh.

◆ operator==

template<typename def , typename inner = typename def::type>
bool operator== ( const BDSTypeSafeEnum< def, inner > &  lhs,
const BDSTypeSafeEnum< def, inner > &  rhs 
)
friend

operators for ordering

Definition at line 71 of file BDSTypeSafeEnum.hh.

◆ operator>

template<typename def , typename inner = typename def::type>
bool operator> ( const BDSTypeSafeEnum< def, inner > &  lhs,
const BDSTypeSafeEnum< def, inner > &  rhs 
)
friend

operators for ordering

Definition at line 75 of file BDSTypeSafeEnum.hh.

◆ operator>=

template<typename def , typename inner = typename def::type>
bool operator>= ( const BDSTypeSafeEnum< def, inner > &  lhs,
const BDSTypeSafeEnum< def, inner > &  rhs 
)
friend

operators for ordering

Definition at line 76 of file BDSTypeSafeEnum.hh.

Field Documentation

◆ dictionary

std::map< BDSTrajectoryFilter, std::string > * BDSTrajectoryFilter::dictionary
staticprotected
Initial value:
=
new std::map<BDSArrayReflectionType, std::string> ({
{BDSArrayReflectionType::flipx, "flipx"},
{BDSArrayReflectionType::flipy, "flipy"},
{BDSArrayReflectionType::flipz, "flipz"},
{BDSArrayReflectionType::flipt, "flipt"},
{BDSArrayReflectionType::reflectx, "reflectx"},
{BDSArrayReflectionType::reflecty, "reflecty"},
{BDSArrayReflectionType::reflectz, "reflectz"},
{BDSArrayReflectionType::reflectt, "reflectt"},
{BDSArrayReflectionType::reflectxydipole, "reflectxydipole"},
{BDSArrayReflectionType::reflectxzdipole, "reflectxzdipole"},
{BDSArrayReflectionType::reflectyzdipole, "reflectyzdipole"},
{BDSArrayReflectionType::reflectzsolenoid, "reflectzsolenoid"},
{BDSArrayReflectionType::reflectxyquadrupole, "reflectxyquadrupole"}
})

static map from to string (optional), needs to be defined explicitly can be used for printing (in << operator)

Definition at line 55 of file BDSTypeSafeEnum.hh.

◆ val

template<typename def , typename inner = typename def::type>
inner BDSTypeSafeEnum< def, inner >::val
private

Definition at line 49 of file BDSTypeSafeEnum.hh.


The documentation for this class was generated from the following files: