#ifndef __NV50_UNORDERED_SET_H__ #define __NV50_UNORDERED_SET_H__ #if (__cplusplus >= 201103L) || defined(ANDROID) #include #else #include #endif namespace nv50_ir { #if __cplusplus >= 201103L using std::unordered_set; #elif !defined(ANDROID) using std::tr1::unordered_set; #else // Android release before lollipop using std::isfinite; typedef std::tr1::unordered_set voidptr_unordered_set; template class unordered_set : public voidptr_unordered_set { public: typedef voidptr_unordered_set _base; typedef _base::iterator _biterator; typedef _base::const_iterator const_biterator; class iterator : public _biterator { public: iterator(const _biterator & i) : _biterator(i) {} V operator*() const { return reinterpret_cast(*_biterator(*this)); } }; class const_iterator : public const_biterator { public: const_iterator(const iterator & i) : const_biterator(i) {} const_iterator(const const_biterator & i) : const_biterator(i) {} const V operator*() const { return reinterpret_cast(*const_biterator(*this)); } }; iterator begin() { return _base::begin(); } iterator end() { return _base::end(); } const_iterator begin() const { return _base::begin(); } const_iterator end() const { return _base::end(); } }; #endif } // namespace nv50_ir #endif // __NV50_UNORDERED_SET_H__