< prev index next >

src/hotspot/share/gc/z/zGranuleMap.inline.hpp

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 19,84 **** * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ ! #ifndef SHARE_GC_Z_ZADDRESSRANGEMAP_INLINE_HPP ! #define SHARE_GC_Z_ZADDRESSRANGEMAP_INLINE_HPP #include "gc/z/zAddress.inline.hpp" - #include "gc/z/zAddressRangeMap.hpp" #include "gc/z/zGlobals.hpp" #include "memory/allocation.inline.hpp" ! template <typename T, size_t AddressRangeShift> ! ZAddressRangeMap<T, AddressRangeShift>::ZAddressRangeMap() : _map(MmapArrayAllocator<T>::allocate(size(), mtGC)) {} ! template <typename T, size_t AddressRangeShift> ! ZAddressRangeMap<T, AddressRangeShift>::~ZAddressRangeMap() { MmapArrayAllocator<T>::free(_map, size()); } ! template <typename T, size_t AddressRangeShift> ! size_t ZAddressRangeMap<T, AddressRangeShift>::index_for_addr(uintptr_t addr) const { assert(!ZAddress::is_null(addr), "Invalid address"); ! const size_t index = ZAddress::offset(addr) >> AddressRangeShift; assert(index < size(), "Invalid index"); return index; } ! template <typename T, size_t AddressRangeShift> ! size_t ZAddressRangeMap<T, AddressRangeShift>::size() const { ! return ZAddressOffsetMax >> AddressRangeShift; } ! template <typename T, size_t AddressRangeShift> ! T ZAddressRangeMap<T, AddressRangeShift>::get(uintptr_t addr) const { ! const uintptr_t index = index_for_addr(addr); return _map[index]; } ! template <typename T, size_t AddressRangeShift> ! void ZAddressRangeMap<T, AddressRangeShift>::put(uintptr_t addr, T value) { ! const uintptr_t index = index_for_addr(addr); _map[index] = value; } ! template <typename T, size_t AddressRangeShift> ! inline ZAddressRangeMapIterator<T, AddressRangeShift>::ZAddressRangeMapIterator(const ZAddressRangeMap<T, AddressRangeShift>* map) : _map(map), _next(0) {} ! template <typename T, size_t AddressRangeShift> ! inline bool ZAddressRangeMapIterator<T, AddressRangeShift>::next(T* value) { if (_next < _map->size()) { *value = _map->_map[_next++]; return true; } // End of map return false; } ! #endif // SHARE_GC_Z_ZADDRESSRANGEMAP_INLINE_HPP --- 19,84 ---- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ ! #ifndef SHARE_GC_Z_ZGRANULEMAP_INLINE_HPP ! #define SHARE_GC_Z_ZGRANULEMAP_INLINE_HPP #include "gc/z/zAddress.inline.hpp" #include "gc/z/zGlobals.hpp" + #include "gc/z/zGranuleMap.hpp" #include "memory/allocation.inline.hpp" ! template <typename T> ! inline ZGranuleMap<T>::ZGranuleMap() : _map(MmapArrayAllocator<T>::allocate(size(), mtGC)) {} ! template <typename T> ! inline ZGranuleMap<T>::~ZGranuleMap() { MmapArrayAllocator<T>::free(_map, size()); } ! template <typename T> ! inline size_t ZGranuleMap<T>::index_for_addr(uintptr_t addr) const { assert(!ZAddress::is_null(addr), "Invalid address"); ! const size_t index = ZAddress::offset(addr) >> ZGranuleSizeShift; assert(index < size(), "Invalid index"); return index; } ! template <typename T> ! inline size_t ZGranuleMap<T>::size() const { ! return ZAddressOffsetMax >> ZGranuleSizeShift; } ! template <typename T> ! inline T ZGranuleMap<T>::get(uintptr_t addr) const { ! const size_t index = index_for_addr(addr); return _map[index]; } ! template <typename T> ! inline void ZGranuleMap<T>::put(uintptr_t addr, T value) { ! const size_t index = index_for_addr(addr); _map[index] = value; } ! template <typename T> ! inline ZGranuleMapIterator<T>::ZGranuleMapIterator(const ZGranuleMap<T>* map) : _map(map), _next(0) {} ! template <typename T> ! inline bool ZGranuleMapIterator<T>::next(T* value) { if (_next < _map->size()) { *value = _map->_map[_next++]; return true; } // End of map return false; } ! #endif // SHARE_GC_Z_ZGRANULEMAP_INLINE_HPP
< prev index next >