posix/interface: move data holding into the container
This commit is contained in:
parent
a64e721cf0
commit
0349d24473
@ -19,13 +19,8 @@ namespace cruft::posix {
|
||||
interface (void)
|
||||
{
|
||||
struct iterator {
|
||||
iterator ()
|
||||
{
|
||||
error::try_call (getifaddrs, &cursor);
|
||||
}
|
||||
|
||||
iterator (ifaddrs *_cursor):
|
||||
cursor (_cursor)
|
||||
explicit iterator (ifaddrs *_cursor) noexcept
|
||||
: cursor (_cursor)
|
||||
{ ; }
|
||||
|
||||
ifaddrs *cursor;
|
||||
@ -44,9 +39,37 @@ namespace cruft::posix {
|
||||
};
|
||||
|
||||
|
||||
struct container {
|
||||
auto begin (void) { return iterator ( ); }
|
||||
class container {
|
||||
public:
|
||||
container ()
|
||||
{
|
||||
error::try_call (getifaddrs, &m_data);
|
||||
}
|
||||
|
||||
~container ()
|
||||
{
|
||||
if (m_data)
|
||||
freeifaddrs (m_data);
|
||||
}
|
||||
|
||||
|
||||
container (container &&rhs) noexcept:
|
||||
m_data (std::exchange (rhs.m_data, nullptr))
|
||||
{ ; }
|
||||
|
||||
container& operator= (container &&rhs) noexcept
|
||||
{
|
||||
std::swap (m_data, rhs.m_data);
|
||||
return *this;
|
||||
}
|
||||
|
||||
container (container const&) = delete;
|
||||
container& operator= (container const&) = delete;
|
||||
|
||||
auto begin (void) { return iterator (m_data); }
|
||||
auto end (void) { return iterator (nullptr); }
|
||||
|
||||
ifaddrs *m_data;
|
||||
};
|
||||
|
||||
return container ();
|
||||
|
Loading…
Reference in New Issue
Block a user