Files
geant4/source/geometry/solids/STEP/include/Enumeration.h
T
2016-06-08 15:28:20 +02:00

177 lines
3.9 KiB
C++

//
//
// $Id: Enumeration.h,v 1.2 1999/05/21 20:20:29 japost Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
#ifndef ENUMERATION_H
#define ENUMERATION_H
/*
* NIST STEP Core Class Library
* clstepcore/Enumeration.h
* May 1995
* K. C. Morris
* David Sauder
* Development of this software was funded by the United States Government,
* and is not subject to copyright.
*/
/* */
#ifdef __O3DB__
#include <OpenOODB.h>
#endif
#include <Str.h>
#include <errordesc.h>
#define ENUM_NULL -1
class STEPenumeration {
friend ostream &operator<< ( ostream&, const STEPenumeration& );
protected:
int v; // integer value of enumeration instance
// mapped to a symbolic value in the elements
int set_value (const char * n);
int set_value (const int n);
virtual ~STEPenumeration () {
}
public:
virtual int no_elements () const =0;
virtual const char * Name () const =0;
const char * get_value_at (int n) const { return element_at (n); }
virtual const char * element_at (int n) const =0;
Severity EnumValidLevel(const char *value, ErrorDescriptor *err,
int optional, char *tokenList,
int needDelims = 0, int clearError = 1);
Severity EnumValidLevel(istream &in, ErrorDescriptor *err,
int optional, char *tokenList,
int needDelims = 0, int clearError = 1);
const int asInt () const { return v; }
const char * asStr (SCLstring &s) const;
void STEPwrite (ostream& out = G4cout) const;
const char * STEPwrite (SCLstring &s) const;
Severity StrToVal (const char * s, ErrorDescriptor *err, int optional = 1);
Severity STEPread(istream& in, ErrorDescriptor *err, int optional = 1);
Severity STEPread(const char *s, ErrorDescriptor *err, int optional = 1);
int put (int val) { return set_value (val); }
int put (const char * n) { return set_value (n); }
int is_null () const { return ( v == ENUM_NULL ); }
int set_null() { return put (ENUM_NULL); }
STEPenumeration& operator= (const int);
STEPenumeration& operator= (const STEPenumeration&);
void DebugDisplay (ostream& out =G4cout) const;
protected:
Severity ReadEnum(istream& in, ErrorDescriptor *err, int AssignVal = 1,
int needDelims = 1);
};
enum LOGICAL { sdaiFALSE, sdaiTRUE, sdaiUNKNOWN };
#define F sdaiFALSE
#define U sdaiUNKNOWN
#define T sdaiTRUE
class Boolean :
public STEPenumeration {
public:
const char * Name () const {
return "Boolean";
}
Boolean (char * val =0) {
set_value (val);
}
Boolean (LOGICAL val);
virtual ~Boolean () {
}
inline virtual int no_elements () const {
return 2;
}
operator LOGICAL () const;
operator int () const;
int operator ==( LOGICAL log ) const;
virtual const char * element_at (int n) const;
}
;
inline Boolean * create_Boolean () { return new Boolean ; }
class Logical :
public STEPenumeration {
public:
const char * Name () const {
return "Logical";
}
Logical (char * val =0) {
set_value (val);
}
Logical (LOGICAL val) {
set_value (val);
}
// Josh L, 3/24/95
Logical (const Boolean& boolean) {
v = boolean.asInt();
}
virtual ~Logical () {
}
inline virtual int no_elements () const {
return 3;
}
operator LOGICAL () const;
virtual const char * element_at (int n) const;
}
;
inline Logical * create_Logical () { return new Logical ; }
// Josh L, 3/24/95
// These constants are required for Part 23. We declare them as statics
// inside a struct in order to prevent name conflicts when linking with
// other libraries. This technique is discussed in "Effective C++" by
// Scott Meyers, Addison-Wesley, 1992, pp. 93-95.
// GEANT4 workaround:
// TRUE and FALSE are sometimes defined as preprocessor symbols
// let's get rid of them until the struct has been parsed
struct SDAI {
static const Logical UNKNOWN;
static const Boolean SdaiTRUE;
static const Boolean SdaiFALSE;
};
#endif