Finish SimpUSet implementation.
This commit is contained in:
parent
8ea78af90b
commit
89ea1fadf2
|
@ -62,6 +62,20 @@ check_simpuset(void)
|
||||||
ods::SimpUSet<int> us;
|
ods::SimpUSet<int> us;
|
||||||
|
|
||||||
assert(us.add(1));
|
assert(us.add(1));
|
||||||
|
assert(us.size() == 1);
|
||||||
|
assert(us.find(1));
|
||||||
|
assert(!us.add(1));
|
||||||
|
assert(us.size() == 1);
|
||||||
|
assert(us.add(2));
|
||||||
|
assert(us.find(2));
|
||||||
|
assert(us.add(3));
|
||||||
|
assert(us.size() == 3);
|
||||||
|
assert(us.find(3));
|
||||||
|
|
||||||
|
auto removed = us.remove(2);
|
||||||
|
assert(removed == 2);
|
||||||
|
assert(us.size() == 2);
|
||||||
|
assert(!us.find(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
|
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
#include <ods/simplist.h>
|
||||||
#include <ods/uset.h>
|
#include <ods/uset.h>
|
||||||
|
|
||||||
namespace ods {
|
namespace ods {
|
||||||
|
@ -15,6 +16,8 @@ public:
|
||||||
bool add(T);
|
bool add(T);
|
||||||
std::optional<T> remove(T);
|
std::optional<T> remove(T);
|
||||||
std::optional<T> find(T);
|
std::optional<T> find(T);
|
||||||
|
private:
|
||||||
|
SimpList<T> list;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@ -32,22 +35,35 @@ template<typename T>
|
||||||
std::size_t
|
std::size_t
|
||||||
SimpUSet<T>::size()
|
SimpUSet<T>::size()
|
||||||
{
|
{
|
||||||
return 0;
|
return this->list.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
bool
|
bool
|
||||||
SimpUSet<T>::add(T value)
|
SimpUSet<T>::add(T value)
|
||||||
{
|
{
|
||||||
assert(value);
|
for (std::size_t i = 0; i < this->list.size(); i++) {
|
||||||
|
if (this->list.get(i) == value) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this->list.add(this->list.size(), value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
std::optional<T>
|
std::optional<T>
|
||||||
SimpUSet<T>::remove(T value)
|
SimpUSet<T>::remove(T value)
|
||||||
{
|
{
|
||||||
assert(value);
|
for (std::size_t i = 0; i < this->list.size(); i++) {
|
||||||
|
if (this->list.get(i) == value) {
|
||||||
|
auto removed = this->list.get(i);
|
||||||
|
this->list.remove(i);
|
||||||
|
return removed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,7 +71,12 @@ template<typename T>
|
||||||
std::optional<T>
|
std::optional<T>
|
||||||
SimpUSet<T>::find(T value)
|
SimpUSet<T>::find(T value)
|
||||||
{
|
{
|
||||||
assert(value);
|
for (std::size_t i = 0; i < this->list.size(); i++) {
|
||||||
|
if (this->list.get(i) == value) {
|
||||||
|
return this->list.get(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue