112a9d9c8Sopenharmony_ci// bindgen-flags: -- -std=c++14
212a9d9c8Sopenharmony_ci
312a9d9c8Sopenharmony_ciusing uint32_t = unsigned long;
412a9d9c8Sopenharmony_ciusing size_t = unsigned long long;
512a9d9c8Sopenharmony_ci
612a9d9c8Sopenharmony_citemplate<class KeyClass, class DataType>
712a9d9c8Sopenharmony_ciclass nsBaseHashtableET {
812a9d9c8Sopenharmony_ci};
912a9d9c8Sopenharmony_ci
1012a9d9c8Sopenharmony_citemplate<class Entry>
1112a9d9c8Sopenharmony_ciclass nsTHashtable {
1212a9d9c8Sopenharmony_ci};
1312a9d9c8Sopenharmony_ci
1412a9d9c8Sopenharmony_citemplate<class KeyClass, class DataType, class UserDataType>
1512a9d9c8Sopenharmony_ciclass nsBaseHashtable
1612a9d9c8Sopenharmony_ci  : protected nsTHashtable<nsBaseHashtableET<KeyClass, DataType>>
1712a9d9c8Sopenharmony_ci{
1812a9d9c8Sopenharmony_ci
1912a9d9c8Sopenharmony_cipublic:
2012a9d9c8Sopenharmony_ci  typedef typename KeyClass::KeyType KeyType;
2112a9d9c8Sopenharmony_ci  typedef nsBaseHashtableET<KeyClass, DataType> EntryType;
2212a9d9c8Sopenharmony_ci
2312a9d9c8Sopenharmony_ci  using nsTHashtable<EntryType>::Contains;
2412a9d9c8Sopenharmony_ci  using nsTHashtable<EntryType>::GetGeneration;
2512a9d9c8Sopenharmony_ci
2612a9d9c8Sopenharmony_ci  nsBaseHashtable() {}
2712a9d9c8Sopenharmony_ci  explicit nsBaseHashtable(uint32_t);
2812a9d9c8Sopenharmony_ci
2912a9d9c8Sopenharmony_ci  struct LookupResult {
3012a9d9c8Sopenharmony_ci  private:
3112a9d9c8Sopenharmony_ci    EntryType* mEntry;
3212a9d9c8Sopenharmony_ci    nsBaseHashtable& mTable;
3312a9d9c8Sopenharmony_ci
3412a9d9c8Sopenharmony_ci  public:
3512a9d9c8Sopenharmony_ci    LookupResult(EntryType*, nsBaseHashtable&);
3612a9d9c8Sopenharmony_ci  };
3712a9d9c8Sopenharmony_ci
3812a9d9c8Sopenharmony_ci  struct EntryPtr {
3912a9d9c8Sopenharmony_ci  private:
4012a9d9c8Sopenharmony_ci    EntryType& mEntry;
4112a9d9c8Sopenharmony_ci    bool mExistingEntry;
4212a9d9c8Sopenharmony_ci
4312a9d9c8Sopenharmony_ci  public:
4412a9d9c8Sopenharmony_ci    EntryPtr(nsBaseHashtable&, EntryType*, bool);
4512a9d9c8Sopenharmony_ci    ~EntryPtr();
4612a9d9c8Sopenharmony_ci  };
4712a9d9c8Sopenharmony_ci
4812a9d9c8Sopenharmony_ci};
49