// Description: Array of lists
// Documentation: undocumented.txt
#ifndef PASTELSYS_LISTARRAY_H
#define PASTELSYS_LISTARRAY_H
#include "pastel/sys/mytypes.h"
#include "pastel/sys/list.h"
#include "pastel/sys/allocator/pool_allocator.h"
namespace Pastel
{
template <typename Type>
class ListArray
{
private:
using ListContainer = List<Type, PoolAllocator>;
public:
typedef typename ListContainer::iterator
Iterator;
typedef typename ListContainer::const_iterator
ConstIterator;
// Using default destructor.
ListArray();
ListArray(const ListArray& that);
ListArray<Type>& operator=(const ListArray& that);
void swap(ListArray& that);
void setBuckets(integer buckets);
void push_back(integer bucket, const Type& that);
void pop_back(integer bucket);
Iterator begin();
ConstIterator begin() const;
Iterator end();
ConstIterator end() const;
Iterator begin(integer bucket);
ConstIterator begin(integer bucket) const;
Iterator end(integer bucket);
ConstIterator end(integer bucket) const;
integer bucketCount() const;
integer size() const;
private:
struct Range
{
Range()
: first_()
, last_()
{
}
Range(const Iterator& first,
const Iterator& last)
: first_(first)
, last_(last)
{
}
Iterator first_;
Iterator last_;
};
using RangeArray = std::vector<Range>;
RangeArray range_;
ListContainer data_;
};
}
#include "pastel/sys/listarray.hpp"
#endif