hkCachedHashMap.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_CACHEDHASHMAP_H
  9. #define HKBASE_CACHEDHASHMAP_H
  10. // A hash map which class to map strings to pointers/pointer size integers.
  11. template <typename Operations>
  12. class hkCachedHashMap
  13. {
  14. public:
  15. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_MAP, hkCachedHashMap<Operations> );
  16. /// Iterator class
  17. /// All iterators are invalidated after a mutating operation. i.e. insertion,removal
  18. typedef class Dummy* Iterator;
  19. /// Create an empty String map.
  20. hkCachedHashMap(Operations ops = Operations());
  21. /// Destroy a String map.
  22. ~hkCachedHashMap();
  23. /// Get an iterator over the keys of this map.
  24. Iterator getIterator() const;
  25. /// Get the key at iterator i.
  26. hkUlong getKey( Iterator i ) const;
  27. /// Get the value at iterator i.
  28. hkUlong getValue( Iterator i ) const;
  29. /// Overwrite the value at iterator i.
  30. void setValue( Iterator i, hkUlong v );
  31. /// Get the next iterator after i.
  32. Iterator getNext( Iterator i ) const;
  33. /// Return if the iterator has reached the end.
  34. hkBool isValid( Iterator i ) const;
  35. /// Insert key with associated value val.
  36. /// If key already exists it is overwritten. The string storage is not
  37. /// copied and must exist for the lifetime of the key.
  38. void insert( hkUlong key, hkUlong val );
  39. /// Get an iterator at 'key'. Check if key was found with isValid().
  40. Iterator findKey( hkUlong key ) const;
  41. /// Shortcut for isValid(findKey(key)).
  42. hkBool hasKey( hkUlong key ) const { return isValid(findKey(key)); }
  43. /// Return the value associated with key or if not present, insert and return 'ifNotFound'.
  44. hkUlong getOrInsert( hkUlong key, hkUlong notFound );
  45. /// Return the value associated with key or def if not present.
  46. hkUlong getWithDefault( hkUlong key, hkUlong def ) const;
  47. /// If key present, write value into out and return HK_SUCCESS. Otherwise return HK_FAILURE.
  48. hkResult get( hkUlong key, hkUlong* out ) const;
  49. /// Remove pair at iterator.
  50. void remove( Iterator it );
  51. /// If key present, remove it and return HK_SUCCESS. Otherwise return HK_FAILURE.
  52. hkResult remove( hkUlong key );
  53. /// Return the number of keys.
  54. int getSize() const { return m_numElems; }
  55. /// Perform an internal consistency check.
  56. hkBool isOk() const;
  57. /// Assignment operator. Will copy the memory chunk.
  58. hkCachedHashMap* operator=(const hkCachedHashMap* other);
  59. /// Remove all keys from the map.
  60. void clear();
  61. /// Swap all data with another map.
  62. void swap( hkCachedHashMap& other );
  63. /// Insert keys from other into this, overwriting duplicates.
  64. void merge( const hkCachedHashMap& other );
  65. protected:
  66. void resizeTable(int capacity);
  67. protected:
  68. hkUlong* m_elem;
  69. int m_numElems;
  70. int m_hashMod; // capacity - 1
  71. Operations m_ops;
  72. };
  73. #endif // HKBASE_CACHEDHASHMAP_H
  74. /*
  75. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  76. * Confidential Information of Havok.  (C) Copyright 1999-2009
  77. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  78. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  79. * rights, and intellectual property rights in the Havok software remain in
  80. * Havok and/or its suppliers.
  81. * Use of this software for evaluation purposes is subject to and indicates
  82. * acceptance of the End User licence Agreement for this product. A copy of
  83. * the license is included with this software and is also available at www.havok.com/tryhavok.
  84. */