security: Identity/Key comparison operators
This commit adds ==, !=, and stream insertion operators to
Identity and Key types, so that `ndnsec list` can display
default identity and key properly.
Also, a missing assignment is added to `ndnsec list` routine.
refs #4085
Change-Id: I025af1d6281acb9e9261461520bbd74af53b811e
diff --git a/src/security/pib/identity.cpp b/src/security/pib/identity.cpp
index 79cb090..0f7dc26 100644
--- a/src/security/pib/identity.cpp
+++ b/src/security/pib/identity.cpp
@@ -1,5 +1,5 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
* Copyright (c) 2013-2017 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
@@ -103,6 +103,24 @@
return impl;
}
+bool
+operator!=(const Identity& lhs, const Identity& rhs)
+{
+ return lhs.m_impl.owner_before(rhs.m_impl) || rhs.m_impl.owner_before(lhs.m_impl);
+}
+
+std::ostream&
+operator<<(std::ostream& os, const Identity& id)
+{
+ if (id) {
+ os << id.getName();
+ }
+ else {
+ os << "(empty)";
+ }
+ return os;
+}
+
} // namespace pib
} // namespace security
} // namespace ndn
diff --git a/src/security/pib/identity.hpp b/src/security/pib/identity.hpp
index cc46bfd..228ef16 100644
--- a/src/security/pib/identity.hpp
+++ b/src/security/pib/identity.hpp
@@ -1,5 +1,5 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
* Copyright (c) 2013-2017 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
@@ -100,6 +100,7 @@
/*
* @return True if the identity instance is valid
*/
+ explicit
operator bool() const;
/**
@@ -157,8 +158,21 @@
weak_ptr<detail::IdentityImpl> m_impl;
friend class v2::KeyChain;
+ friend bool operator!=(const Identity&, const Identity&);
};
+bool
+operator!=(const Identity& lhs, const Identity& rhs);
+
+inline bool
+operator==(const Identity& lhs, const Identity& rhs)
+{
+ return !(lhs != rhs);
+}
+
+std::ostream&
+operator<<(std::ostream& os, const Identity& id);
+
} // namespace pib
using pib::Identity;
diff --git a/src/security/pib/key.cpp b/src/security/pib/key.cpp
index 3d7b83c..7396a5a 100644
--- a/src/security/pib/key.cpp
+++ b/src/security/pib/key.cpp
@@ -123,6 +123,24 @@
return impl;
}
+bool
+operator!=(const Key& lhs, const Key& rhs)
+{
+ return lhs.m_impl.owner_before(rhs.m_impl) || rhs.m_impl.owner_before(lhs.m_impl);
+}
+
+std::ostream&
+operator<<(std::ostream& os, const Key& key)
+{
+ if (key) {
+ os << key.getName();
+ }
+ else {
+ os << "(empty)";
+ }
+ return os;
+}
+
} // namespace pib
namespace v2 {
diff --git a/src/security/pib/key.hpp b/src/security/pib/key.hpp
index 90f4f5c..fbbed24 100644
--- a/src/security/pib/key.hpp
+++ b/src/security/pib/key.hpp
@@ -1,5 +1,5 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
* Copyright (c) 2013-2017 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
@@ -125,6 +125,7 @@
/**
* @brief Check if the Key instance is valid.
*/
+ explicit
operator bool() const;
/**
@@ -181,8 +182,21 @@
weak_ptr<detail::KeyImpl> m_impl;
friend class v2::KeyChain;
+ friend bool operator!=(const Key&, const Key&);
};
+bool
+operator!=(const Key& lhs, const Key& rhs);
+
+inline bool
+operator==(const Key& lhs, const Key& rhs)
+{
+ return !(lhs != rhs);
+}
+
+std::ostream&
+operator<<(std::ostream& os, const Key& key);
+
} // namespace pib
using pib::Key;