Browse Source

[1176] Operator to combine FindOptions

Michal 'vorner' Vaner 13 years ago
parent
commit
3a838eb454
2 changed files with 14 additions and 4 deletions
  1. 2 4
      src/bin/auth/query.cc
  2. 12 0
      src/lib/datasrc/zone.h

+ 2 - 4
src/bin/auth/query.cc

@@ -67,7 +67,7 @@ Query::findAddrs(ZoneFinder& zone, const Name& qname,
     // Find A rrset
     if (qname_ != qname || qtype_ != RRType::A()) {
         ZoneFinder::FindResult a_result = zone.find(qname, RRType::A(), NULL,
-            static_cast<ZoneFinder::FindOptions>(options | dnssec_opt_));
+                                                    options);
         if (a_result.code == ZoneFinder::SUCCESS) {
             response_.addRRset(Message::SECTION_ADDITIONAL,
                     boost::const_pointer_cast<RRset>(a_result.rrset), dnssec_);
@@ -77,9 +77,7 @@ Query::findAddrs(ZoneFinder& zone, const Name& qname,
     // Find AAAA rrset
     if (qname_ != qname || qtype_ != RRType::AAAA()) {
         ZoneFinder::FindResult aaaa_result =
-            zone.find(qname, RRType::AAAA(), NULL,
-                      static_cast<ZoneFinder::FindOptions>(options |
-                                                           dnssec_opt_));
+            zone.find(qname, RRType::AAAA(), NULL, options | dnssec_opt_);
         if (aaaa_result.code == ZoneFinder::SUCCESS) {
             response_.addRRset(Message::SECTION_ADDITIONAL,
                     boost::const_pointer_cast<RRset>(aaaa_result.rrset),

+ 12 - 0
src/lib/datasrc/zone.h

@@ -205,6 +205,18 @@ public:
     //@}
 };
 
+/// \brief Operator to combine FindOptions
+///
+/// We would need to manually static-cast the options if we put or
+/// between them, which is undesired with bit-flag options. Therefore
+/// we hide the cast here, which is the simplest solution and it still
+/// provides reasonable level of type safety.
+inline ZoneFinder::FindOptions operator |(ZoneFinder::FindOptions a,
+                                          ZoneFinder::FindOptions b)
+{
+    return (static_cast<ZoneFinder::FindOptions>(a | b));
+}
+
 /// \brief A pointer-like type pointing to a \c ZoneFinder object.
 typedef boost::shared_ptr<ZoneFinder> ZoneFinderPtr;