00001 // +-------------------------------------------------------------------------+ 00002 // | I__n__t__e__L__i__b 0.6.10 development | 00003 // | Copyright (c) Andrey Vikt. Stolyarov <crocodil_AT_croco.net> 2000-2007. | 00004 // | | 00005 // | This is free software. The library part is available under | 00006 // | GNU LESSER GENERAL PUBLIC LICENSE v.2.1. | 00007 // | GNU LGPL v2.1 is found in docs/gnu_gpl2.txt, or at http://www.gnu.org | 00008 // | Please see also docs/readme.txt and visit http://www.intelib.org | 00009 // | | 00010 // | !!! THERE IS NO WARRANTY OF ANY KIND, NEITHER EXPRESSED NOR IMPLIED !!! | 00011 // +-------------------------------------------------------------------------+ 00012 00013 00014 00015 00024 #ifndef INTELIB_SPKGHSH_HPP_SENTRY 00025 #define INTELIB_SPKGHSH_HPP_SENTRY 00026 00027 #include "../sexpress/iexcept.hpp" 00028 #include "../sexpress/sexpress.hpp" 00029 #include "../sexpress/gensref.hpp" 00030 #include "../sexpress/shashtbl.hpp" 00031 #include "sreader.hpp" 00032 00033 class SExpressionHashPackage; 00034 00036 class IntelibX_not_a_package : public IntelibX { 00037 public: 00038 IntelibX_not_a_package(SReference a_param); 00039 }; 00040 00042 typedef GenericSReference<SExpressionHashPackage, IntelibX_not_a_package> 00043 SHashPackage; 00044 00045 00047 00054 class SExpressionHashPackage : public SExpressionHashTable, 00055 public IntelibPackage 00056 { 00057 SHashPackage parent; 00058 public: 00060 static IntelibTypeId TypeId; 00061 00063 SExpressionHashPackage(); 00065 SExpressionHashPackage(const SHashPackage& a_parent); 00066 protected: 00067 ~SExpressionHashPackage(); 00068 SExpressionHashPackage(const IntelibTypeId& tid); 00069 SExpressionHashPackage(const IntelibTypeId& tid, 00070 const SHashPackage& a_parent); 00071 00072 public: 00073 00075 00086 bool Import(const SReference &symb, const char *symbname = 0, 00087 bool safe = true); 00088 00090 00091 SReference Intern(const char *name); 00092 00094 00095 SReference FindSymbol(const char *name); 00096 00097 private: 00099 virtual SReference MakeSymbol(const char *name); 00100 00101 protected: 00103 00108 virtual SReference CreateNewSymbolObject(const char *name) const; 00109 00110 #if INTELIB_TEXT_REPRESENTATIONS == 1 00111 virtual SString TextRepresentation() const; 00112 #endif 00113 }; 00114 00116 class IntelibX_package_conflict : public IntelibX { 00117 public: 00118 IntelibX_package_conflict(SReference a_param); 00119 }; 00120 00121 #endif // sentry