Cleanup unused code in repository (#75)
* Remove unused forward_list
* Remove unused __read_clock function
* Replace wallClk code with hip function
* Remove unused unit test for ipc
* Remove slab heap
* Remove unused EBO spinlock
[ROCm/rocshmem commit: 0fd628458c]
This commit is contained in:
@@ -1,510 +0,0 @@
|
||||
/******************************************************************************
|
||||
* Copyright (c) 2024 Advanced Micro Devices, Inc. All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef LIBRARY_SRC_CONTAINERS_FORWARD_LIST_HPP_
|
||||
#define LIBRARY_SRC_CONTAINERS_FORWARD_LIST_HPP_
|
||||
|
||||
#include <hip/hip_runtime.h>
|
||||
|
||||
#include <initializer_list>
|
||||
#include <ostream>
|
||||
#include <string>
|
||||
|
||||
#include "../src/device_proxy.hpp"
|
||||
#include "../src/memory/hip_allocator.hpp"
|
||||
#include "../sync/abql_block_mutex.hpp"
|
||||
|
||||
namespace rocshmem {
|
||||
|
||||
/*****************************************************************************
|
||||
******************************* FORWARD LIST ********************************
|
||||
*****************************************************************************/
|
||||
|
||||
template <typename TYPE, typename ALLOC = HIPAllocator>
|
||||
class ForwardList {
|
||||
friend class ForwardListTestFixture;
|
||||
|
||||
struct Node {
|
||||
TYPE data;
|
||||
Node* next;
|
||||
};
|
||||
|
||||
template <bool CONST>
|
||||
class Iterator;
|
||||
|
||||
public:
|
||||
using iterator = Iterator<false>;
|
||||
using const_iterator = Iterator<true>;
|
||||
|
||||
/**
|
||||
* @brief Default constructor
|
||||
*/
|
||||
ForwardList() = default;
|
||||
|
||||
explicit ForwardList(const ALLOC& alloc);
|
||||
|
||||
/**
|
||||
* @brief Fill constructor
|
||||
*/
|
||||
explicit ForwardList(size_t n, const ALLOC& alloc = ALLOC());
|
||||
|
||||
explicit ForwardList(size_t n, const TYPE& val, const ALLOC& alloc = ALLOC());
|
||||
|
||||
/**
|
||||
* @brief Range constructor
|
||||
*/
|
||||
template <class InputIterator>
|
||||
ForwardList(InputIterator first, InputIterator last,
|
||||
const ALLOC& alloc = ALLOC());
|
||||
|
||||
/**
|
||||
* @brief Copy constructor
|
||||
*/
|
||||
ForwardList(const ForwardList& fwdlst);
|
||||
|
||||
ForwardList(const ForwardList& fwdlst, const ALLOC& alloc);
|
||||
|
||||
/**
|
||||
* @brief Move constructor
|
||||
*/
|
||||
ForwardList(ForwardList&& fwdlst);
|
||||
|
||||
ForwardList(ForwardList&& fwdlst, const ALLOC& alloc);
|
||||
|
||||
/**
|
||||
* @brief Initializer list constructor
|
||||
*/
|
||||
ForwardList(std::initializer_list<TYPE> il, const ALLOC& alloc = ALLOC());
|
||||
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
~ForwardList();
|
||||
|
||||
/**
|
||||
* @brief Copy assignment operator
|
||||
*/
|
||||
ForwardList& operator=(const ForwardList& fwdlst);
|
||||
|
||||
/**
|
||||
* @brief Move assignment operator
|
||||
*/
|
||||
ForwardList& operator=(ForwardList&& fwdlst);
|
||||
|
||||
/**
|
||||
* @brief Initializer list assignment
|
||||
*/
|
||||
ForwardList& operator=(std::initializer_list<TYPE> il);
|
||||
|
||||
/**
|
||||
* @brief Returns iterator pointing to position before first element.
|
||||
*
|
||||
* The iterator returned shall not be dereferenced:
|
||||
* It is meant to be used as an argument for member functions
|
||||
* emplace_after, insert_after, erase_after or splice_after, to specify
|
||||
* the beginning of the sequence as the location where the action is
|
||||
* performed.
|
||||
*/
|
||||
iterator before_begin() noexcept;
|
||||
|
||||
/**
|
||||
* @brief Returns iterator pointing to first element in ForwardList.
|
||||
*
|
||||
* Notice that, unlike member ForwardList::front, which returns a
|
||||
* reference to the first element, this function returns a forward iterator
|
||||
* pointing to it.
|
||||
*
|
||||
* If the container is empty, the returned iterator value shall not be
|
||||
* dereferenced.
|
||||
*/
|
||||
iterator begin() noexcept;
|
||||
|
||||
const_iterator begin() const noexcept;
|
||||
|
||||
/**
|
||||
* @brief Returns an iterator to past-the-end element in ForwardList.
|
||||
*/
|
||||
iterator end() noexcept;
|
||||
|
||||
const_iterator end() const noexcept;
|
||||
|
||||
/**
|
||||
* @brief Returns const_iterator pointing to position before first element.
|
||||
*/
|
||||
const_iterator cbefore_begin() const noexcept;
|
||||
|
||||
/**
|
||||
* @brief Returns const_iterator pointing to first element.
|
||||
*/
|
||||
const_iterator cbegin() const noexcept;
|
||||
|
||||
/**
|
||||
* @brief Returns const_iterator pointing to past-the-end element.
|
||||
*/
|
||||
const_iterator cend() const noexcept;
|
||||
|
||||
/**
|
||||
* @brief Returns bool indicating if ForwardList container is empty.
|
||||
*/
|
||||
bool empty() const noexcept;
|
||||
|
||||
/**
|
||||
* @brief Returns maximum number of elements that ForwardList can hold.
|
||||
*/
|
||||
size_t max_size() const noexcept;
|
||||
|
||||
/**
|
||||
* @brief Returns reference to first element in the ForwardList.
|
||||
*/
|
||||
ForwardList& front();
|
||||
|
||||
const ForwardList& front() const;
|
||||
|
||||
/**
|
||||
* @brief Assigns new values, replacing current contents, and modify size.
|
||||
*
|
||||
* In range version, the new contents are elements constructed from each
|
||||
* of the elements in the range between first and last, in the same order.
|
||||
*/
|
||||
template <class InputIterator>
|
||||
void assign(InputIterator first, InputIterator last);
|
||||
|
||||
/**
|
||||
* @brief Assigns new values, replacing current contents, and modify size.
|
||||
*
|
||||
* In fill version, the new contents are n elements, each initialized to
|
||||
* a copy of val.
|
||||
*/
|
||||
void assign(size_t n, const TYPE& val);
|
||||
|
||||
/**
|
||||
* @brief Assigns new values, replacing current contents, and modify size.
|
||||
*
|
||||
* In initializer list version, the new contents are copies of the values
|
||||
* passed as initializer list, in the same order.
|
||||
*/
|
||||
void assign(std::initializer_list<TYPE> il);
|
||||
|
||||
/**
|
||||
* @brief Inserts new element at beginning of the ForwardList.
|
||||
*
|
||||
* The element goes into the container right before its current first
|
||||
* element. This new element is constructed in place using args as the
|
||||
* arguments for its construction.
|
||||
*/
|
||||
template <class... Args>
|
||||
void emplace_front(Args&&... args);
|
||||
|
||||
/**
|
||||
* @brief Inserts new element at the beginning of the ForwardList.
|
||||
*
|
||||
* The element goes into the container right before its current first
|
||||
* element. The content of val is copied (or moved) to the inserted
|
||||
* element.
|
||||
*/
|
||||
void push_front(const TYPE& val);
|
||||
|
||||
void push_front(TYPE&& val);
|
||||
|
||||
/**
|
||||
* @brief Removes first element in ForwardList, reducing its size by one.
|
||||
*/
|
||||
void pop_front();
|
||||
|
||||
/**
|
||||
* @brief Inserts a new element after element at position.
|
||||
*
|
||||
* This new element is constructed in place using args as the arguments
|
||||
* for its construction.
|
||||
*/
|
||||
template <class... Args>
|
||||
iterator emplace_after(const_iterator position, Args&&... args);
|
||||
|
||||
/**
|
||||
* @brief Inserts new elements after the element at position.
|
||||
*/
|
||||
iterator insert_after(const_iterator position, const TYPE& val);
|
||||
|
||||
iterator insert_after(const_iterator position, TYPE&& val);
|
||||
|
||||
iterator insert_after(const_iterator position, size_t n, const TYPE& val);
|
||||
|
||||
template <class InputIterator>
|
||||
iterator insert_after(const_iterator position, InputIterator first,
|
||||
InputIterator last);
|
||||
|
||||
iterator insert_after(const_iterator position,
|
||||
std::initializer_list<TYPE> il);
|
||||
|
||||
/**
|
||||
* @brief Removes either a single element or a range of elements.
|
||||
*/
|
||||
iterator erase_after(const_iterator position);
|
||||
|
||||
iterator erase_after(const_iterator position, const_iterator last);
|
||||
|
||||
/**
|
||||
* @brief Exchanges content by the content of fwdlst.
|
||||
*
|
||||
* Sizes may differ.
|
||||
*/
|
||||
void swap(ForwardList& fwdlst);
|
||||
|
||||
/**
|
||||
* @brief Resizes the container to contain n elements.
|
||||
*/
|
||||
void resize(size_t n);
|
||||
|
||||
void resize(size_t n, const TYPE& val);
|
||||
|
||||
/**
|
||||
* @brief Removes all elements, all leaves container with size 0.
|
||||
*/
|
||||
void clear() noexcept;
|
||||
|
||||
/**
|
||||
* @brief Transfers all elements of fwdlist into container.
|
||||
*/
|
||||
void splice_after(const_iterator position, ForwardList& fwdlst); // NOLINT
|
||||
|
||||
void splice_after(const_iterator position, ForwardList&& fwdlst);
|
||||
|
||||
/**
|
||||
* @brief Transfers only elements pointed by from fwdlist into container.
|
||||
*/
|
||||
void splice_after(const_iterator position, ForwardList& fwdlst, // NOLINT
|
||||
const_iterator i);
|
||||
|
||||
void splice_after(const_iterator position, ForwardList&& fwdlst,
|
||||
const_iterator i);
|
||||
|
||||
/**
|
||||
* @brief Transfers the range (first,last) from fwdlist into container.
|
||||
*/
|
||||
void splice_after(const_iterator position, ForwardList& fwdlst, // NOLINT
|
||||
const_iterator first, const_iterator last);
|
||||
|
||||
void splice_after(const_iterator position, ForwardList&& fwdlst, // NOLINT
|
||||
const_iterator first, const_iterator last);
|
||||
|
||||
/**
|
||||
* @brief Removes all the elements that compare equal to val.
|
||||
*/
|
||||
void remove(const TYPE& val);
|
||||
|
||||
/**
|
||||
* @brief Removes all elements for which Predicate pred returns true.
|
||||
*/
|
||||
template <class Predicate>
|
||||
void remove_if(Predicate pred);
|
||||
|
||||
/**
|
||||
* @brief Removes all but first element from consecutive group equal elems.
|
||||
*/
|
||||
void unique();
|
||||
|
||||
/**
|
||||
* @brief Takes comparison func that determines "uniqueness" of elem.
|
||||
*/
|
||||
template <class BinaryPredicate>
|
||||
void unique(BinaryPredicate binary_pred);
|
||||
|
||||
/**
|
||||
* @brief Merges ForwardList by transferring all elements.
|
||||
*
|
||||
* Both containers shall already be ordered before calling merge.
|
||||
*/
|
||||
void merge(ForwardList& fwdlst); // NOLINT
|
||||
|
||||
void merge(ForwardList&& fwdlst); // NOLINT
|
||||
|
||||
/**
|
||||
* @brief Same as merge, but take specific predicate to perform comparison.
|
||||
*/
|
||||
template <class Compare>
|
||||
void merge(ForwardList& fwdlst, Compare comp); // NOLINT
|
||||
|
||||
template <class Compare>
|
||||
void merge(ForwardList&& fwdlst, Compare comp); // NOLINT
|
||||
|
||||
/**
|
||||
* @brief Sorts elements in ForwardList, altering position in container.
|
||||
*/
|
||||
void sort();
|
||||
|
||||
template <class Compare>
|
||||
void sort(Compare comp); // NOLINT
|
||||
|
||||
/**
|
||||
* @brief Reverses order of elements in the ForwardList container.
|
||||
*/
|
||||
void reverse() noexcept;
|
||||
|
||||
/**
|
||||
* @brief Returns a copy of the allocator object associated with container.
|
||||
*/
|
||||
ALLOC
|
||||
get_allocator() const noexcept;
|
||||
|
||||
private:
|
||||
/**
|
||||
* @brief Internal memory allocator used to create list nodes.
|
||||
*/
|
||||
MemoryAllocator allocator_{};
|
||||
|
||||
/**
|
||||
* @brief First element in the list.
|
||||
*/
|
||||
Node* head_{nullptr};
|
||||
|
||||
/**
|
||||
* @brief Last element in the list.
|
||||
*/
|
||||
Node* tail_{nullptr};
|
||||
|
||||
/**
|
||||
* @brief Size of the list.
|
||||
*/
|
||||
size_t size_{0};
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
********************************* ITERATOR **********************************
|
||||
*****************************************************************************/
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
template <bool CONST>
|
||||
class ForwardList<TYPE, ALLOC>::Iterator {
|
||||
using NodeT = typename ForwardList<TYPE, ALLOC>::Node;
|
||||
|
||||
public:
|
||||
using iterator_category = std::forward_iterator_tag;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using value_type = TYPE;
|
||||
using pointer = TYPE*;
|
||||
using reference = TYPE&;
|
||||
|
||||
Iterator(NodeT* ptr);
|
||||
|
||||
Iterator operator++();
|
||||
|
||||
Iterator operator++(int);
|
||||
|
||||
template <bool Q = CONST>
|
||||
typename std::enable_if<Q, const TYPE&>::type operator*();
|
||||
|
||||
template <bool Q = CONST>
|
||||
typename std::enable_if<!Q, TYPE&>::type operator*();
|
||||
|
||||
pointer operator->();
|
||||
|
||||
template <typename ITER_TYPE>
|
||||
friend bool operator==(ITER_TYPE& a, ITER_TYPE& b); // NOLINT
|
||||
|
||||
template <typename ITER_TYPE>
|
||||
friend bool operator==(ITER_TYPE& a, ITER_TYPE b); // NOLINT
|
||||
|
||||
template <typename ITER_TYPE>
|
||||
friend bool operator!=(ITER_TYPE& a, ITER_TYPE& b); // NOLINT
|
||||
|
||||
template <typename ITER_TYPE>
|
||||
friend bool operator!=(ITER_TYPE& a, ITER_TYPE b); // NOLINT
|
||||
|
||||
private:
|
||||
NodeT* node_ptr_;
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
******************************* COMPARATORS *********************************
|
||||
*****************************************************************************/
|
||||
|
||||
template <class TYPE, class ALLOC>
|
||||
bool operator==(const ForwardList<TYPE, ALLOC>& lhs,
|
||||
const ForwardList<TYPE, ALLOC>& rhs);
|
||||
|
||||
template <class TYPE, class ALLOC>
|
||||
bool operator==(const ForwardList<TYPE, ALLOC>& lhs, const std::string rhs);
|
||||
|
||||
template <class TYPE, class ALLOC>
|
||||
bool operator==(const std::string lhs, const ForwardList<TYPE, ALLOC>& rhs);
|
||||
|
||||
template <class TYPE, class ALLOC>
|
||||
bool operator!=(const ForwardList<TYPE, ALLOC>& lhs,
|
||||
const ForwardList<TYPE, ALLOC>& rhs);
|
||||
|
||||
template <class TYPE, class ALLOC>
|
||||
bool operator<(const ForwardList<TYPE, ALLOC>& lhs,
|
||||
const ForwardList<TYPE, ALLOC>& rhs);
|
||||
|
||||
template <class TYPE, class ALLOC>
|
||||
bool operator<=(const ForwardList<TYPE, ALLOC>& lhs,
|
||||
const ForwardList<TYPE, ALLOC>& rhs);
|
||||
|
||||
template <class TYPE, class ALLOC>
|
||||
bool operator>(const ForwardList<TYPE, ALLOC>& lhs,
|
||||
const ForwardList<TYPE, ALLOC>& rhs);
|
||||
|
||||
template <class TYPE, class ALLOC>
|
||||
bool operator>=(const ForwardList<TYPE, ALLOC>& lhs,
|
||||
const ForwardList<TYPE, ALLOC>& rhs);
|
||||
|
||||
template <class TYPE, class ALLOC>
|
||||
void swap(ForwardList<TYPE, ALLOC>& x, ForwardList<TYPE, ALLOC>& y); // NOLINT
|
||||
|
||||
/*****************************************************************************
|
||||
******************************** STRINGIFIERS *******************************
|
||||
*****************************************************************************/
|
||||
|
||||
template <class TYPE>
|
||||
std::ostream& operator<<(std::ostream& os, ForwardList<TYPE> const& list);
|
||||
|
||||
template <class TYPE, class ALLOC>
|
||||
std::string to_string(const ForwardList<TYPE, ALLOC>& list);
|
||||
|
||||
/*****************************************************************************
|
||||
*********************************** PROXY ***********************************
|
||||
*****************************************************************************/
|
||||
|
||||
template <typename ALLOC, typename TYPE>
|
||||
class ForwardListProxy {
|
||||
using ProxyT = DeviceProxy<ALLOC, ForwardList<TYPE, ALLOC>>;
|
||||
|
||||
public:
|
||||
ForwardList(size_t num_elems = 1) : proxy_{num_elems} {}
|
||||
|
||||
ForwardList(const ForwardList& other) = delete;
|
||||
|
||||
ForwardList& operator=(const ForwardList& other) = delete;
|
||||
|
||||
ForwardList(ForwardList&& other) = default;
|
||||
|
||||
ForwardList& operator=(ForwardList&& other) = default;
|
||||
|
||||
__host__ __device__ ForwardList<TYPE, ALLOC>* get() { return proxy_.get(); }
|
||||
|
||||
private:
|
||||
ProxyT proxy_{};
|
||||
};
|
||||
|
||||
} // namespace rocshmem
|
||||
|
||||
#endif // LIBRARY_SRC_CONTAINERS_FORWARD_LIST_HPP_
|
||||
@@ -1,233 +0,0 @@
|
||||
/******************************************************************************
|
||||
* Copyright (c) 2024 Advanced Micro Devices, Inc. All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef LIBRARY_SRC_CONTAINERS_FORWARD_LIST_IMPL_HPP_
|
||||
#define LIBRARY_SRC_CONTAINERS_FORWARD_LIST_IMPL_HPP_
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <string>
|
||||
|
||||
#include "forward_list.hpp"
|
||||
|
||||
namespace rocshmem {
|
||||
|
||||
/*****************************************************************************
|
||||
******************************* FORWARD LIST ********************************
|
||||
*****************************************************************************/
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
ForwardList<TYPE, ALLOC>::~ForwardList() {
|
||||
while (head_ != nullptr) {
|
||||
Node* temp{head_};
|
||||
head_ = head_->next;
|
||||
allocator_.deallocate(temp);
|
||||
}
|
||||
tail_ = nullptr;
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
ForwardList<TYPE, ALLOC>::ForwardList(const ForwardList& fwdlst) {}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
ForwardList<TYPE, ALLOC>::ForwardList(const ForwardList& fwdlst,
|
||||
const ALLOC& alloc) {}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
ForwardList<TYPE, ALLOC>::ForwardList(std::initializer_list<TYPE> il,
|
||||
const ALLOC& allocator) {
|
||||
allocator_ = allocator;
|
||||
assign(il);
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
typename ForwardList<TYPE, ALLOC>::iterator
|
||||
ForwardList<TYPE, ALLOC>::begin() noexcept {
|
||||
iterator i(head_);
|
||||
return i;
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
typename ForwardList<TYPE, ALLOC>::const_iterator
|
||||
ForwardList<TYPE, ALLOC>::begin() const noexcept {
|
||||
const_iterator i(head_);
|
||||
return i;
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
typename ForwardList<TYPE, ALLOC>::iterator
|
||||
ForwardList<TYPE, ALLOC>::end() noexcept {
|
||||
iterator i(tail_);
|
||||
return i;
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
typename ForwardList<TYPE, ALLOC>::const_iterator
|
||||
ForwardList<TYPE, ALLOC>::end() const noexcept {
|
||||
const_iterator i(tail_);
|
||||
return i;
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
void ForwardList<TYPE, ALLOC>::assign(std::initializer_list<TYPE> il) {
|
||||
resize(il.size());
|
||||
std::copy_n(il.begin(), il.size(), begin());
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
void ForwardList<TYPE, ALLOC>::resize(size_t n) {}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
void ForwardList<TYPE, ALLOC>::resize(size_t n, const TYPE& val) {}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
void ForwardList<TYPE, ALLOC>::clear() noexcept {}
|
||||
|
||||
/*****************************************************************************
|
||||
********************************* ITERATOR **********************************
|
||||
*****************************************************************************/
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
template <bool CONST>
|
||||
ForwardList<TYPE, ALLOC>::Iterator<CONST>::Iterator(NodeT* ptr)
|
||||
: node_ptr_(ptr) {}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
template <bool CONST>
|
||||
typename ForwardList<TYPE, ALLOC>::template Iterator<CONST>
|
||||
ForwardList<TYPE, ALLOC>::Iterator<CONST>::operator++() {
|
||||
if (node_ptr_) {
|
||||
node_ptr_ = node_ptr_->next;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
template <bool CONST>
|
||||
typename ForwardList<TYPE, ALLOC>::template Iterator<CONST>
|
||||
ForwardList<TYPE, ALLOC>::Iterator<CONST>::operator++(int) {
|
||||
Iterator iterator = *this;
|
||||
++*this;
|
||||
return iterator;
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
template <bool CONST>
|
||||
template <bool Q>
|
||||
typename std::enable_if<!Q, TYPE&>::type
|
||||
ForwardList<TYPE, ALLOC>::Iterator<CONST>::operator*() {
|
||||
return node_ptr_->data;
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
template <bool CONST>
|
||||
template <bool Q>
|
||||
typename std::enable_if<Q, const TYPE&>::type
|
||||
ForwardList<TYPE, ALLOC>::Iterator<CONST>::operator*() {
|
||||
return node_ptr_->data;
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
template <bool CONST>
|
||||
TYPE* ForwardList<TYPE, ALLOC>::Iterator<CONST>::operator->() {
|
||||
return &node_ptr_->data;
|
||||
}
|
||||
|
||||
template <typename ITER_TYPE>
|
||||
bool operator==(ITER_TYPE& a, ITER_TYPE& b) { // NOLINT
|
||||
return a.node_ptr_ == b.node_ptr_;
|
||||
}
|
||||
|
||||
template <typename ITER_TYPE>
|
||||
bool operator==(ITER_TYPE& a, ITER_TYPE b) { // NOLINT
|
||||
return a.node_ptr_ == b.node_ptr_;
|
||||
}
|
||||
|
||||
template <typename ITER_TYPE>
|
||||
bool operator!=(ITER_TYPE& a, ITER_TYPE& b) { // NOLINT
|
||||
return a.node_ptr_ != b.node_ptr_;
|
||||
}
|
||||
|
||||
template <typename ITER_TYPE>
|
||||
bool operator!=(ITER_TYPE& a, ITER_TYPE b) { // NOLINT
|
||||
return a.node_ptr_ != b.node_ptr_;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
******************************* COMPARATORS *********************************
|
||||
*****************************************************************************/
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
bool operator==(const ForwardList<TYPE, ALLOC>& lhs,
|
||||
const ForwardList<TYPE, ALLOC>& rhs) {
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
bool operator==(const ForwardList<TYPE, ALLOC>& lhs, const std::string rhs) {
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
bool operator==(const std::string lhs, const ForwardList<TYPE, ALLOC>& rhs) {
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
bool operator!=(const ForwardList<TYPE, ALLOC>& lhs,
|
||||
const ForwardList<TYPE, ALLOC>& rhs) {
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
bool operator!=(const ForwardList<TYPE, ALLOC>& lhs, const std::string rhs) {
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
bool operator!=(const std::string lhs, const ForwardList<TYPE, ALLOC>& rhs) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
******************************** STRINGIFIERS *******************************
|
||||
*****************************************************************************/
|
||||
|
||||
template <typename TYPE>
|
||||
std::ostream& operator<<(std::ostream& os, ForwardList<TYPE> const& list) {
|
||||
using CItr = typename ForwardList<TYPE>::const_iterator;
|
||||
for (CItr ci = list.begin(); ci != list.end(); ++ci) {
|
||||
os << *ci << " ";
|
||||
}
|
||||
return os;
|
||||
}
|
||||
|
||||
template <typename TYPE, typename ALLOC>
|
||||
std::string to_string(const ForwardList<TYPE, ALLOC>& list) {
|
||||
std::stringstream ss;
|
||||
ss << list;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
} // namespace rocshmem
|
||||
|
||||
#endif // LIBRARY_SRC_CONTAINERS_FORWARD_LIST_IMPL_HPP_
|
||||
Reference in New Issue
Block a user