cplusLibP.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:7k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* private/cplusLibP.h - VxWorks C++ support */
  2. /* Copyright 1992,1993 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 02c,30oct01,sn   fixed syntax error
  7. 02b,24jul01,r_s  changed code to be ANSI compatible so that it compiles with
  8.                  diab. made asm macro changes for diab
  9. 02a,10apr98,sn   added decls for cplusDemanglerInit & cplusDemangleFunc
  10. 01j,31oct93,srh  added cplusNewHdlMutex
  11. 01i,25apr93,srh  added non-ANSI declaration for cplusUnloadFixup...
  12. 01h,25apr93,srh  added declaration for cplusUnloadFixup.
  13. 01g,25apr93,srh  fixed a typo which was introduced during 01f
  14. 01f,24apr93,srh  removed extraneous comma from CPLUS_XTOR_STRATEGIES to
  15.  please certain compilers.
  16. 01e,23apr93,srh  added declarations for cplusLibMinInit
  17. 01d,31jan93,srh  renamed from cplusLib.h, coalesced other cplusLib hdrs
  18. 01c,22sep92,rrr  added support for c++
  19. 01b,03aug92,ajm  corrected non __STDC__ define of cplusDemangle
  20. 01a,30jul92,srh  written
  21. */
  22. #ifndef __INCcplusLibPh
  23. #define __INCcplusLibPh
  24. #include "vxWorks.h"
  25. #include "hashLib.h"
  26. #include "limits.h"
  27. #include "moduleLib.h"
  28. #include "semLib.h"
  29. #include "symbol.h"
  30. #include "symLib.h"
  31. #include "sysSymTbl.h"
  32. /* type declarations */
  33. typedef enum
  34.     {
  35.     OFF = 0,
  36.     TERSE = 1,
  37.     COMPLETE = 2
  38.     } CPLUS_DEMANGLER_MODES;
  39. typedef enum 
  40.     {
  41.     MANUAL = 0,
  42.     AUTOMATIC = 1
  43.     } CPLUS_XTOR_STRATEGIES;
  44. /* C++-only declarations */
  45. #ifdef __cplusplus
  46. /* type declarations */
  47. class RBString_T
  48.     {
  49. public:
  50.        RBString_T ();      // create an empty s
  51.        RBString_T (RBString_T &); // create a copy of another
  52.      // RBString_T
  53.        RBString_T (const char *); // create an RBString_T from
  54.         // a C string
  55.     void   clear ();      // reinitialize this RBString_T
  56.     char * extractCString (char *, int); // extract C string
  57.     RBString_T & operator =  (RBString_T &);
  58.   
  59.     BOOL    operator == (RBString_T &) const;
  60.     BOOL    operator != (RBString_T &) const;
  61.     int   length () const   // return number of characters,
  62.     { return nChars; }   // not counting NUL.
  63.     RBString_T & append (RBString_T &);  // append RBString_T contents
  64.     RBString_T & append (const char *,   // append C string contents
  65.   int len = INT_MAX);
  66.     RBString_T  & append (char);   // append character
  67.     RBString_T & prepend (RBString_T &); // prepend RBString_T contents
  68.     RBString_T & prepend (const char *,  // prepend C string contents
  69.    int len = INT_MAX);
  70.     RBString_T & prepend (char);   // prepend character
  71. protected:
  72.     char   appendChar (char);      // append a character
  73.     char   prependChar (char);   // prepend a character
  74.   
  75. protected:
  76.     char   data [ MAX_SYS_SYM_LEN ]; // data
  77.     char * head;     // pointer to first character
  78.     // in string
  79.     char * tail;     // pointer to delimiting
  80.     // NUL character
  81.     int   nChars;     // number of characters currently
  82.     // in string, not counting NUL
  83. private:
  84.     friend class RBStringIterator_T;
  85.     };
  86. class RBStringIterator_T
  87.     {
  88. public:
  89.      RBStringIterator_T (const RBString_T &); // initialize a
  90.     // new iterator
  91.     char nextChar ();  // fetch next char.
  92. protected:
  93.     const RBString_T * theRBString;
  94.     const char  * nc;
  95.     };
  96. struct ArrayDesc_T
  97.     {
  98.     // functions
  99.     ArrayDesc_T (void *pObject, int nElems);
  100.     // data
  101.     HASH_NODE   hashNode;
  102.     void  * pObject;
  103.     int   nElems;
  104.     };
  105. class ArrayStore_T
  106.     {
  107.  public:
  108.            ArrayStore_T ();
  109.  ~ArrayStore_T ();
  110.     void    insert (void * pObject, int nElems);
  111.     int     fetch  (void *pObject);
  112.  private:
  113.     HASH_ID   hashId;
  114.     SEM_ID   mutexSem;
  115.     };
  116. class Demangle_T
  117.     {
  118.  public:
  119.     Demangle_T (const char *);
  120.     char * extractDemangled (char * buf, int length = MAX_SYS_SYM_LEN);
  121.     BOOL   isDemangled ();
  122.   
  123.  private:
  124.     BOOL   scanArg (RBString_T * shadow = 0, RBString_T * retType = 0);
  125.     BOOL   scanArgs (RBString_T * shadow = 0, RBString_T * retType = 0);
  126.     BOOL   scanCastOperator ();
  127.     BOOL   scanClassName (RBString_T * shadow = 0);
  128.     BOOL   scanCtorDtor ();
  129.     BOOL   scanFunctionName ();
  130.     BOOL   scanNName (RBString_T * shadow = 0);
  131.     BOOL   scanSimpleFunctionName ();
  132.     BOOL   scanSpecialFunctionName ();
  133.     BOOL          scanSimpleOperator ();
  134.     BOOL   demangle (const char *mangledName);
  135.     Demangle_T () {}
  136.     Demangle_T (const Demangle_T &) {}
  137.     void   operator = (const Demangle_T &) {}
  138.     const char * theMangledName;
  139.     const char * currentPosition;
  140.     RBString_T   workingString;
  141.     BOOL   demanglingSucceeded;
  142.     enum DeclMod_T
  143. {
  144. dm_unsigned = 0x0001,
  145. dm_const = 0x0002,
  146. dm_volatile = 0x0004,
  147. dm_signed = 0x0008,
  148. dm_pointer = 0x0010,
  149. dm_reference = 0x0020,
  150. dm_array = 0x0040,
  151. dm_function = 0x0080,
  152. dm_ptrToMember  = 0x0100
  153. };
  154.     class Declaration_T
  155.         {
  156.     public:
  157. Declaration_T ();
  158. Declaration_T (const Declaration_T &);
  159. Declaration_T & operator =  (const Declaration_T &);
  160. Declaration_T & operator += (const DeclMod_T);
  161.         Declaration_T & operator -= (const DeclMod_T);
  162.   
  163. BOOL   is (const DeclMod_T) const;
  164.   
  165.     private:
  166. long   contents;
  167. };
  168.     };
  169. /* inline definitions */
  170. #ifdef __cplusplus
  171. extern "C" {
  172. #endif
  173. // cplusLogMsg
  174. //
  175. typedef int   (* FUNCPTR_ARGS) (...);
  176. extern  FUNCPTR_ARGS    _func_logMsg;
  177. #ifdef __cplusplus
  178. }
  179. #endif
  180. inline void cplusLogMsg (char *fmt, int arg1, int arg2, int arg3,
  181.  int arg4, int arg5, int arg6)
  182.     {
  183.     if (_func_logMsg != 0)
  184. {
  185. (* _func_logMsg) (fmt, arg1, arg2, arg3, arg4, arg5, arg6);
  186. }
  187.     }
  188. // ArrayDesc_T :: ArrayDesc_T
  189. //
  190. inline ArrayDesc_T :: ArrayDesc_T (void *pObject, int nElems)
  191.     {
  192.     this->pObject = pObject;
  193.     this->nElems = nElems;
  194.     }
  195. #endif /* __cplusplus (C++-only declarations) */
  196. /* data declarations */
  197. extern CPLUS_DEMANGLER_MODES cplusDemanglerMode;
  198. extern CPLUS_XTOR_STRATEGIES cplusXtorStrategy;
  199. extern SEM_ID                cplusNewHdlMutex;
  200. /* function declarations, C linkage */
  201. #ifdef __cplusplus
  202. extern "C" {
  203. #endif
  204. extern void cplusCallCtors (VOIDFUNCPTR *ctors);
  205. extern void cplusCallDtors (VOIDFUNCPTR *dtors);
  206. #if defined(__STDC__) || defined(__cplusplus)
  207. extern void cplusArraysInit (void);
  208. extern void cplusDemanglerInit (void);
  209. extern BOOL cplusMatchMangled (SYMTAB_ID symTab, char *string,
  210.    SYM_TYPE *pType, int *pValue);
  211. extern char * (*cplusDemangleFunc) (char *, char *, int);
  212. extern char * cplusDemangle (char *source, char *dest, int n);
  213. extern STATUS cplusLibInit (void);
  214. extern STATUS cplusLibMinInit (void);
  215. extern STATUS cplusLoadFixup (MODULE_ID module, int symFlag,
  216. SYMTAB_ID symTab);
  217. extern STATUS   cplusUnloadFixup (MODULE_ID module);
  218. #else   /* __STDC__ */
  219. extern void cplusArraysInit ();
  220. extern void cplusDemanglerInit ();
  221. extern BOOL cplusMatchMangled ();
  222. extern char * (*cplusDemangleFunc) (char *, char *, int);
  223. extern char * cplusDemangle ();
  224. extern STATUS cplusLibInit ();
  225. extern STATUS cplusLibMinInit ();
  226. extern STATUS cplusLoadFixup ();
  227. extern STATUS   cplusUnloadFixup ();
  228. #endif  /* __STDC__ */
  229. #ifdef __cplusplus
  230. }
  231. #endif
  232. #endif /* __INCcplusLibPh */