rib: turn RibUpdate into an aggregate

And move it together with RibUpdateList and RibUpdateBatch.
Also remove a few unused functions from RibEntry.

Change-Id: Id4f79fda27d3bffb8411e2a95c24154e2cb80c4f
diff --git a/daemon/rib/rib-update-batch.cpp b/daemon/rib/rib-update-batch.cpp
index 12284f7..0444d8e 100644
--- a/daemon/rib/rib-update-batch.cpp
+++ b/daemon/rib/rib-update-batch.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  Regents of the University of California,
+ * Copyright (c) 2014-2025,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -27,6 +27,26 @@
 
 namespace nfd::rib {
 
+std::ostream&
+operator<<(std::ostream& os, RibUpdate::Action action)
+{
+  switch (action) {
+  case RibUpdate::REGISTER:
+    return os << "REGISTER";
+  case RibUpdate::UNREGISTER:
+    return os << "UNREGISTER";
+  case RibUpdate::REMOVE_FACE:
+    return os << "REMOVE_FACE";
+  }
+  return os;
+}
+
+std::ostream&
+operator<<(std::ostream& os, const RibUpdate& update)
+{
+  return os << "RibUpdate{" << update.action << ", " << update.name << ", " << update.route << "}";
+}
+
 RibUpdateBatch::RibUpdateBatch(uint64_t faceId)
   : m_faceId(faceId)
 {
@@ -35,27 +55,8 @@
 void
 RibUpdateBatch::add(const RibUpdate& update)
 {
-  BOOST_ASSERT(m_faceId == update.getRoute().faceId);
-
+  BOOST_ASSERT(m_faceId == update.route.faceId);
   m_updates.push_back(update);
 }
 
-RibUpdateBatch::const_iterator
-RibUpdateBatch::begin() const
-{
-  return m_updates.begin();
-}
-
-RibUpdateBatch::const_iterator
-RibUpdateBatch::end() const
-{
-  return m_updates.end();
-}
-
-size_t
-RibUpdateBatch::size() const
-{
-  return m_updates.size();
-}
-
 } // namespace nfd::rib