Files
stepcode/include/clstepcore/Registry.h
T
Clifford Yapp d824fc0c4e Keep longer directory names
We want to be consistent with the previous layout, to avoid needlessly
breaking existing codes.  The header update means client codes are not
required to include all of the stepcode library includes explicitly -
i.e., stepcode itself does not force this requirement with its own
internal includes.  However, if client codes do not want to add the
library prefixes to their own includes as we have for stepcode, they
should still be able to add the various includes and work as before.
Adjust the include directory names accordingly.
2022-10-02 17:57:57 -04:00

100 lines
3.3 KiB
C++

#ifndef _REGISTRY_H
#define _REGISTRY_H
/*
* NIST STEP Core Class Library
* clstepcore/Registry.h
* April 1997
* K. C. Morris
* David Sauder
* Development of this software was funded by the United States Government,
* and is not subject to copyright.
*/
#include <sc_export.h>
#include "clstepcore/sdai.h"
#include "clutils/errordesc.h"
#include "clutils/sc_hash.h"
#include "clutils/Str.h"
#include "clstepcore/complexSupport.h"
// defined and created in Registry.cc
extern SC_CORE_EXPORT const TypeDescriptor * const t_sdaiINTEGER;
extern SC_CORE_EXPORT const TypeDescriptor * const t_sdaiREAL;
extern SC_CORE_EXPORT const TypeDescriptor * const t_sdaiNUMBER;
extern SC_CORE_EXPORT const TypeDescriptor * const t_sdaiSTRING;
extern SC_CORE_EXPORT const TypeDescriptor * const t_sdaiBINARY;
extern SC_CORE_EXPORT const TypeDescriptor * const t_sdaiBOOLEAN;
extern SC_CORE_EXPORT const TypeDescriptor * const t_sdaiLOGICAL;
typedef struct Hash_Table * HashTable;
class Registry;
typedef void ( * CF_init )( Registry & ); // pointer to creation initialization
class SC_CORE_EXPORT Registry {
protected:
HashTable primordialSwamp; // dictionary of EntityDescriptors
HashTable active_schemas; // dictionary of Schemas
HashTable active_types; // dictionary of TypeDescriptors
ComplexCollect * col; // struct containing all complex entity info
int entity_cnt,
all_ents_cnt;
HashEntry cur_entity;
HashEntry cur_schema;
HashEntry cur_type;
// used by AddEntity() and RemoveEntity() to deal with renamings of an
// entity done in a USE or REFERENCE clause - see header comments in
// file Registry.inline.cc
void AddClones( const EntityDescriptor & );
void RemoveClones( const EntityDescriptor & );
public:
Registry( CF_init initFunct );
~Registry();
void DeleteContents(); // CAUTION: calls delete on all the descriptors
const EntityDescriptor * FindEntity( const char *, const char * = 0,
int check_case = 0 ) const;
const Schema * FindSchema( const char *, int check_case = 0 ) const;
const TypeDescriptor * FindType( const char *, int check_case = 0 ) const;
void AddEntity( const EntityDescriptor & );
void AddSchema( const Schema & );
void AddType( const TypeDescriptor & );
void RemoveEntity( const char * );
void RemoveSchema( const char * );
void RemoveType( const char * );
int GetEntityCnt();
int GetFullEntCnt() {
return all_ents_cnt;
}
void ResetEntities();
const EntityDescriptor * NextEntity();
void ResetSchemas();
const Schema * NextSchema();
void ResetTypes();
const TypeDescriptor * NextType();
const ComplexCollect * CompCol() {
return col;
}
void SetCompCollect( ComplexCollect * c ) {
col = c;
}
SDAI_Application_instance * ObjCreate( const char * nm, const char * = 0,
int check_case = 0 ) const;
};
#endif /* _REGISTRY_H */