// Copyright (C) 2015 Jérôme Leclercq // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp #include template NzSparsePtr::NzSparsePtr() { Reset(); } template NzSparsePtr::NzSparsePtr(T* ptr) { Reset(ptr); } template NzSparsePtr::NzSparsePtr(VoidPtr ptr, int stride) { Reset(ptr, stride); } template template NzSparsePtr::NzSparsePtr(const NzSparsePtr& ptr) { Reset(ptr); } template typename NzSparsePtr::VoidPtr NzSparsePtr::GetPtr() const { return m_ptr; } template int NzSparsePtr::GetStride() const { return m_stride; } template void NzSparsePtr::Reset() { SetPtr(nullptr); SetStride(0); } template void NzSparsePtr::Reset(T* ptr) { SetPtr(ptr); SetStride(sizeof(T)); } template void NzSparsePtr::Reset(VoidPtr ptr, int stride) { SetPtr(ptr); SetStride(stride); } template void NzSparsePtr::Reset(const NzSparsePtr& ptr) { SetPtr(ptr.GetPtr()); SetStride(ptr.GetStride()); } template template void NzSparsePtr::Reset(const NzSparsePtr& ptr) { static_assert(std::is_convertible::value, "Source type pointer cannot be implicitely converted to target type pointer"); SetPtr(static_cast(ptr.GetPtr())); SetStride(ptr.GetStride()); } template void NzSparsePtr::SetPtr(VoidPtr ptr) { m_ptr = reinterpret_cast(ptr); } template void NzSparsePtr::SetStride(int stride) { m_stride = stride; } template NzSparsePtr::operator bool() const { return m_ptr != nullptr; } template NzSparsePtr::operator T*() const { return reinterpret_cast(m_ptr); } template T& NzSparsePtr::operator*() const { return *reinterpret_cast(m_ptr); } template T* NzSparsePtr::operator->() const { return reinterpret_cast(m_ptr); } template T& NzSparsePtr::operator[](int index) const { return *reinterpret_cast(m_ptr + index*m_stride); } template NzSparsePtr NzSparsePtr::operator+(int count) const { return NzSparsePtr(m_ptr + count*m_stride, m_stride); } template NzSparsePtr NzSparsePtr::operator+(unsigned int count) const { return NzSparsePtr(m_ptr + count*m_stride, m_stride); } template NzSparsePtr NzSparsePtr::operator-(int count) const { return NzSparsePtr(m_ptr - count*m_stride, m_stride); } template NzSparsePtr NzSparsePtr::operator-(unsigned int count) const { return NzSparsePtr(m_ptr - count*m_stride, m_stride); } template std::ptrdiff_t NzSparsePtr::operator-(const NzSparsePtr& ptr) const { return (m_ptr - ptr.m_ptr)/m_stride; } template NzSparsePtr& NzSparsePtr::operator+=(int count) { m_ptr += count*m_stride; return *this; } template NzSparsePtr& NzSparsePtr::operator-=(int count) { m_ptr -= count*m_stride; return *this; } template NzSparsePtr& NzSparsePtr::operator++() { m_ptr += m_stride; return *this; } template NzSparsePtr NzSparsePtr::operator++(int) { // On fait une copie de l'objet NzSparsePtr tmp(*this); // On modifie l'objet operator++(); // On retourne la copie return tmp; } template NzSparsePtr& NzSparsePtr::operator--() { m_ptr -= m_stride; return *this; } template NzSparsePtr NzSparsePtr::operator--(int) { // On fait une copie de l'objet NzSparsePtr tmp(*this); // On modifie l'objet operator--(); // On retourne la copie return tmp; } template bool NzSparsePtr::operator==(const NzSparsePtr& ptr) const { return m_ptr == ptr.m_ptr; } template bool NzSparsePtr::operator!=(const NzSparsePtr& ptr) const { return m_ptr != ptr.m_ptr; } template bool NzSparsePtr::operator<(const NzSparsePtr& ptr) const { return m_ptr < ptr.m_ptr; } template bool NzSparsePtr::operator>(const NzSparsePtr& ptr) const { return m_ptr > ptr.m_ptr; } template bool NzSparsePtr::operator<=(const NzSparsePtr& ptr) const { return m_ptr <= ptr.m_ptr; } template bool NzSparsePtr::operator>=(const NzSparsePtr& ptr) const { return m_ptr >= ptr.m_ptr; } #include