comStl.h
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:4k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* comStl.h */
  2. /*
  3. modification history
  4. --------------------
  5. 01q,22feb02,nel  SPR#73592. Remove 68K arch specific fix for old compiler bug.
  6. 01p,07jan02,nel  Remove dependency for stl_config.h for ARM/diab compilers.
  7. 01o,10dec01,dbs  diab build
  8. 01n,13nov01,nel  Add STL_LIST.
  9. 01m,30jul01,dbs  add STL_MAP_LL etc for non-VxWorks builds
  10. 01l,24jul01,dbs  retain allocators only for T2/VxWorks5.4 build
  11. 01k,18jul01,dbs  re-instate allocators
  12. 01j,16jul01,dbs  remove vxdcom allocators completely
  13. 01i,27jun01,dbs  fix include paths and names
  14. 01h,21jun01,dbs  fix up new name, tidy up allocator stuff
  15. 01g,31may00,sn   commented fact that allocators need to be updated
  16.                  to Standard C++ ones (currently use SGI syntax)
  17. 01f,27aug99,dbs  fix ARM problem with stl member templates
  18. 01e,29jul99,aim  added STL_DEQUE
  19. 01d,16jul99,dbs  add STL_MAP_CMP macro to define map class with
  20.                  comparison for 68K compiler bug
  21. 01c,16jul99,aim  Change Free to Dealloc
  22. 01b,06jul99,aim  checks for delete 0
  23. 01a,17jun99,aim  created modification history entry
  24. */
  25. #ifndef __INCcomStl_h
  26. #define __INCcomStl_h
  27. // The ARM compilers have a problem in the generated code with some
  28. // methods of the vector class which involves member-templates
  29. // (specifically the insert() method) and so by undefining this flag
  30. // the STL reverts to 'no member templates' configuration and the
  31. // compiler seems to emit correct code...
  32. #ifdef __GNUC__
  33. #if defined(CPU_FAMILY) && defined (ARM) && (CPU_FAMILY==ARM)
  34. #include <stl_config.h>
  35. #undef __STL_MEMBER_TEMPLATES
  36. #endif
  37. #endif
  38. #include <set>
  39. #include <map>
  40. #include <vector>
  41. #include <deque>
  42. #include <list>
  43. //#ifdef VXDCOM_PLATFORM_VXWORKS
  44. //struct less_longlong
  45. //    {
  46. //    bool operator() (long long a, long long b) const
  47. // { return (a < b); }
  48. //    };
  49. //#endif
  50. #if defined(VXDCOM_PLATFORM_VXWORKS) && (VXDCOM_PLATFORM_VXWORKS == 5)
  51. #ifdef __GNUC__
  52. //////////////////////////////////////////////////////////////////////////
  53. //
  54. // For VxWorks 5.4 (and Tornado 2.0 with gcc2.7.2 compilers) we have
  55. // our _own_ default allocator because the vxWorks stl has exception
  56. // handling turned on.  We currently compile with -fno-exception so we
  57. // need an allocator that won't throw any exceptions.  Here it is.
  58. //
  59. //////////////////////////////////////////////////////////////////////////
  60. class __vxdcom_safe_alloc
  61.     {
  62.   public:
  63.     static void* allocate(size_t n)
  64. {
  65. void *result = malloc(n);
  66. if (0 == result) exit (1); // what should we do here?? (aim)
  67. return result;
  68. }
  69.     static void deallocate(void *p, size_t /* n */)
  70. {
  71. if (p) free (p);
  72. }
  73.     static void* reallocate(void *p, size_t /* old_sz */, size_t new_sz)
  74. {
  75. void * result = realloc(p, new_sz);
  76. if (0 == result) exit (1); // what should we do here?? (aim)
  77. return result;
  78. }
  79.     };
  80. #define SAFE_MAP(k,v) map<k,v, less<k>, __vxdcom_safe_alloc>
  81. #define STL_MAP(k,v) map<k,v, less<k>, __vxdcom_safe_alloc>
  82. #define STL_SET(t) set<t, less<t>, __vxdcom_safe_alloc>
  83. #define STL_VECTOR(t) vector<t, __vxdcom_safe_alloc>
  84. #define STL_DEQUE(t) deque<t, __vxdcom_safe_alloc>
  85. #define STL_LIST(t) list<t, __vxdcom_safe_alloc>
  86. #define STL_SET_LL set<LONGLONG, less<LONGLONG>, __vxdcom_safe_alloc>
  87. #define STL_MAP_LL(v) map<LONGLONG, v, less<LONGLONG>, __vxdcom_safe_alloc>
  88. #else /* (VXDCOM_PLATFORM_VXWORKS == 5) */
  89. #define SAFE_MAP(k,v) map<k,v>
  90. #define STL_MAP(k,v) map<k,v>
  91. #define STL_SET(t) set<t>
  92. #define STL_VECTOR(t) vector<t>
  93. #define STL_DEQUE(t) deque<t>
  94. #define STL_LIST(t) list<t>
  95. #define STL_SET_LL set<LONGLONG>
  96. #define STL_MAP_LL(v) map<LONGLONG, v>
  97. #endif /* (VXDCOM_PLATFORM_VXWORKS == 5) */
  98. #elif defined (__DCC__)
  99. #define SAFE_MAP(k,v) map<k,v>
  100. #define STL_MAP(k,v) map<k,v>
  101. #define STL_SET(t) set<t>
  102. #define STL_VECTOR(t) vector<t>
  103. #define STL_DEQUE(t) deque<t>
  104. #define STL_LIST(t) list<t>
  105. #define STL_SET_LL set<LONGLONG>
  106. #define STL_MAP_LL(v) map<LONGLONG, v>
  107. #endif /* __GNUC__ */
  108. #endif /* __INCcomStl_h */