hkStorageStringMap.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:4k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #ifndef HKBASE_STORAGE_STRINGMAP_H
  9. #define HKBASE_STORAGE_STRINGMAP_H
  10. #include <Common/Base/Container/StringMap/hkStringMap.h>
  11. /// Like hkStringMap except that the keys are copied and managed internally.
  12. template <typename V>
  13. class hkStorageStringMap : public hkStringMap<V>
  14. {
  15. public:
  16. typedef typename hkStringMap<V>::Iterator Iterator;
  17. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_MAP, hkStorageStringMap );
  18. ~hkStorageStringMap()
  19. {
  20. clear();
  21. }
  22. /// Insert key with associated value val.
  23. /// If key already exists it is overwritten. The key string is not
  24. /// copied and must exist for the lifetime of the entry.
  25. HK_FORCE_INLINE const char* insert( const char* key, V val )
  26. {
  27. Iterator it = this->findKey(key);
  28. const char* ret;
  29. if( ! this->isValid(it) )
  30. {
  31. ret = hkString::strDup(key);
  32. hkStringMap<V>::insert( ret, val );
  33. }
  34. else
  35. {
  36. ret = this->getKey(it);
  37. this->setValue(it, val);
  38. }
  39. return ret;
  40. }
  41. V getOrInsert(const char* key, V ifNotFound)
  42. {
  43. Iterator it = this->findKey(key);
  44. if( this->isValid(it) )
  45. {
  46. return this->getValue(it);
  47. }
  48. else
  49. {
  50. this->insert(key,ifNotFound);
  51. return ifNotFound;
  52. }
  53. }
  54. /// Remove pair at "it".
  55. void remove( Iterator it )
  56. {
  57. char* k = (char*)this->m_map.getKey(it);
  58. hkDeallocate( k );
  59. hkStringMap<V>::remove( it );
  60. }
  61. /// If key present, remove it and return HK_SUCCESS. Otherwise return HK_FAILURE.
  62. hkResult remove( const char* key )
  63. {
  64. Iterator it = this->m_map.find(key);
  65. if( this->m_map.isValid(it) )
  66. {
  67. this->remove(it);
  68. return HK_SUCCESS;
  69. }
  70. return HK_FAILURE;
  71. }
  72. /// Remove all keys from the map.
  73. void clear()
  74. {
  75. for( Iterator it = this->getIterator(); isValid(it); it = getNext(it) )
  76. {
  77. char* k = (char*)this->m_map.getKey(it);
  78. hkDeallocate( k );
  79. }
  80. hkStringMap<V>::clear();
  81. }
  82. /// Swap all data with another map.
  83. void swap( hkStorageStringMap& other )
  84. {
  85. this->m_map.swap( other.m_map );
  86. }
  87. void merge( const hkStringMap<V>& other )
  88. {
  89. typedef typename hkStringMap<V>::Iterator OtherIterator;
  90. for( OtherIterator it = other.getIterator(); other.isValid(it); it = other.getNext(it) )
  91. {
  92. insert( other.getKey(it), other.getValue(it) );
  93. }
  94. }
  95. };
  96. #endif // HKBASE_STORAGE_STRINGMAP_H
  97. /*
  98. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  99. * Confidential Information of Havok.  (C) Copyright 1999-2009
  100. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  101. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  102. * rights, and intellectual property rights in the Havok software remain in
  103. * Havok and/or its suppliers.
  104. * Use of this software for evaluation purposes is subject to and indicates
  105. * acceptance of the End User licence Agreement for this product. A copy of
  106. * the license is included with this software and is also available at www.havok.com/tryhavok.
  107. */