// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "shill/ip_address_store.h"

namespace shill {

// This is a less than comparison so that IPAddress can be stored in a set.
// We do not care about a semantically meaningful comparison. This is
// deterministic, and that's all that matters.
bool IPAddressLTIgnorePrefix::operator () (const IPAddress& lhs,
                                           const IPAddress& rhs) const {
  return lhs.ToString() < rhs.ToString();
}

IPAddressStore::IPAddressStore() {}

IPAddressStore::~IPAddressStore() {}

void IPAddressStore::AddUnique(const IPAddress& ip) {
  ip_addresses_.insert(ip);
}

void IPAddressStore::Remove(const IPAddress& ip) {
  ip_addresses_.erase(ip);
}

void IPAddressStore::Clear() {
  ip_addresses_.clear();
}

bool IPAddressStore::Contains(const IPAddress& ip) const {
  return ip_addresses_.find(ip) != ip_addresses_.end();
}

size_t IPAddressStore::Count() const {
  return ip_addresses_.size();
}

bool IPAddressStore::Empty() const {
  return ip_addresses_.empty();
}

}  // namespace shill
