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

其他游戏

开发平台:

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_STRINGMAP_H
  9. #define HKBASE_STRINGMAP_H
  10. #include <Common/Base/Container/StringMap/hkStringMapBase.h>
  11. /// Map strings to integers or pointers.
  12. /// Note that neither the keys nor values are copied so the values
  13. /// must exist for the lifetime of this object.
  14. template <typename V>
  15. class hkStringMap
  16. {
  17. HK_COMPILE_TIME_ASSERT(hkSizeOf(V) <= hkSizeOf(hkUlong));
  18. public:
  19. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_MAP, hkStringMap );
  20. /// Iterator class
  21. /// All iterators are invalidated after a mutating operation. i.e. insertion,removal
  22. typedef hkStringMapBase::Iterator Iterator;
  23. hkStringMap()
  24. {
  25. }
  26. /// Insert key with associated value val.
  27. /// If key already exists it is overwritten. The key string is not
  28. /// copied and must exist for the lifetime of the entry.
  29. HK_FORCE_INLINE void insert( const char* key, V val )
  30. {
  31. m_map.insert( hkUlong(key), hkUlong(val) );
  32. }
  33. /// Return the iterator associated with key. Check with isValid().
  34. HK_FORCE_INLINE Iterator findKey( const char* key ) const
  35. {
  36. return m_map.findKey( hkUlong(key) );
  37. }
  38. /// Return if this map contains the given key.
  39. HK_FORCE_INLINE hkBool hasKey( const char* key ) const
  40. {
  41. return m_map.hasKey( hkUlong(key) );
  42. }
  43. /// Return the value associated with key or if not present, insert and return 'ifNotFound'.
  44. HK_FORCE_INLINE V getOrInsert( const char* key, V ifNotFound )
  45. {
  46. return (V)m_map.getOrInsert( hkUlong(key), hkUlong(ifNotFound) );
  47. }
  48. /// Return the value associated with key or def if not present.
  49. HK_FORCE_INLINE V getWithDefault( const char* key, V def ) const
  50. {
  51. return (V)m_map.getWithDefault( hkUlong(key), hkUlong(def) );
  52. }
  53. /// If key present, write value into out and return HK_SUCCESS. Else return HK_FAILURE.
  54. hkResult get( const char* key, V* out ) const
  55. {
  56. hkUlong tmp;
  57. if( m_map.get( hkUlong(key), &tmp ) == HK_SUCCESS )
  58. {
  59. *out = V(tmp);
  60. return HK_SUCCESS;
  61. }
  62. return HK_FAILURE;
  63. }
  64. /// Remove pair at "it".
  65. void remove( Iterator it )
  66. {
  67. m_map.remove( it );
  68. }
  69. /// If key present, remove it and return HK_SUCCESS. Otherwise return HK_FAILURE.
  70. hkResult remove( const char* key )
  71. {
  72. return m_map.remove( hkUlong(key) );
  73. }
  74. /// Return the number of elements in this map.
  75. int getSize() const
  76. {
  77. return m_map.getSize();
  78. }
  79. /// Perform internal consistency check.
  80. hkBool isOk() const
  81. {
  82. return m_map.isOk();
  83. }
  84. /// Get an iterator over the keys of this map.
  85. Iterator getIterator() const
  86. {
  87. return m_map.getIterator();
  88. }
  89. /// Get the key at iterator i.
  90. /// Do not modify this key directly. If you must change a key, remove and re-add it.
  91. const char* getKey( Iterator i ) const
  92. {
  93. return reinterpret_cast<const char*>(m_map.getKey(i));
  94. }
  95. /// Get the value at iterator i.
  96. V getValue( Iterator i ) const
  97. {
  98. return (V)m_map.getValue(i);
  99. }
  100. /// Overwrite the value at iterator i.
  101. void setValue( Iterator i, V v )
  102. {
  103. m_map.setValue( i, hkUlong(v) );
  104. }
  105. /// Get the next iterator after i.
  106. Iterator getNext( Iterator i ) const
  107. {
  108. return m_map.getNext(i);
  109. }
  110. /// Return if the iterator has reached the end.
  111. hkBool isValid( Iterator i ) const
  112. {
  113. return m_map.isValid(i);
  114. }
  115. /// Remove all keys from the map.
  116. void clear()
  117. {
  118. m_map.clear();
  119. }
  120. /// Swap all data with another map.
  121. void swap( hkStringMap& other )
  122. {
  123. m_map.swap(other.m_map);
  124. }
  125. /// Insert keys from other into this, overwriting duplicates.
  126. void merge( const hkStringMap& other )
  127. {
  128. m_map.merge(other.m_map);
  129. }
  130. protected:
  131. hkStringMapBase m_map;
  132. };
  133. #endif // HKBASE_STRINGMAP_H
  134. /*
  135. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  136. * Confidential Information of Havok.  (C) Copyright 1999-2009
  137. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  138. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  139. * rights, and intellectual property rights in the Havok software remain in
  140. * Havok and/or its suppliers.
  141. * Use of this software for evaluation purposes is subject to and indicates
  142. * acceptance of the End User licence Agreement for this product. A copy of
  143. * the license is included with this software and is also available at www.havok.com/tryhavok.
  144. */