Browse Source

[trac978] Pass the loader to creator

Michal 'vorner' Vaner 14 years ago
parent
commit
85b06e8c21
2 changed files with 16 additions and 8 deletions
  1. 6 2
      src/lib/acl/loader.h
  2. 10 6
      src/lib/acl/tests/loader_test.cc

+ 6 - 2
src/lib/acl/loader.h

@@ -190,9 +190,12 @@ public:
          *     parameters might look like, they are not checked in any way.
          *     parameters might look like, they are not checked in any way.
          *     Therefore it's up to the creator (or the check being created)
          *     Therefore it's up to the creator (or the check being created)
          *     to validate the data and throw if it is bad.
          *     to validate the data and throw if it is bad.
+         * \param Current loader calling this creator. This can be used
+         *     to load subexpressions in case of compound check.
          */
          */
         virtual boost::shared_ptr<Check<Context> > create(
         virtual boost::shared_ptr<Check<Context> > create(
-            const std::string& name, data::ConstElementPtr definition) = 0;
+            const std::string& name, data::ConstElementPtr definition,
+            const Loader<Context, Action>& loader) = 0;
         /**
         /**
          * \brief Is list or-abbreviation allowed?
          * \brief Is list or-abbreviation allowed?
          *
          *
@@ -369,7 +372,8 @@ private:
                                 checkDesc->second);
                                 checkDesc->second);
                 }
                 }
                 // Create the check and return it
                 // Create the check and return it
-                return (creatorIt->second->create(name, checkDesc->second));
+                return (creatorIt->second->create(name, checkDesc->second,
+                                                  *this));
             }
             }
             default:
             default:
                 isc_throw_1(LoaderError,
                 isc_throw_1(LoaderError,

+ 10 - 6
src/lib/acl/tests/loader_test.cc

@@ -89,8 +89,8 @@ public:
     vector<string> names() const {
     vector<string> names() const {
         return (names_);
         return (names_);
     }
     }
-    shared_ptr<Check<Log> > create(const string& name,
-                                           ConstElementPtr data)
+    shared_ptr<Check<Log> > create(const string& name, ConstElementPtr data,
+                                   const Loader<Log>&)
     {
     {
         bool found(false);
         bool found(false);
         for (vector<string>::const_iterator i(names_.begin());
         for (vector<string>::const_iterator i(names_.begin());
@@ -123,7 +123,9 @@ public:
         result.push_back("throw");
         result.push_back("throw");
         return (result);
         return (result);
     }
     }
-    shared_ptr<Check<Log> > create(const string&, ConstElementPtr) {
+    shared_ptr<Check<Log> > create(const string&, ConstElementPtr,
+                                   const Loader<Log>&)
+    {
         throw TestCreatorError();
         throw TestCreatorError();
     }
     }
 };
 };
@@ -144,7 +146,9 @@ public:
         result.push_back("throwcheck");
         result.push_back("throwcheck");
         return (result);
         return (result);
     }
     }
-    shared_ptr<Check<Log> > create(const string&, ConstElementPtr) {
+    shared_ptr<Check<Log> > create(const string&, ConstElementPtr,
+                                   const Loader<Log>&)
+    {
         return (shared_ptr<Check<Log> >(new ThrowCheck()));
         return (shared_ptr<Check<Log> >(new ThrowCheck()));
     }
     }
 };
 };
@@ -161,8 +165,8 @@ public:
      * logging cell used, the second is result of the check. No error checking
      * logging cell used, the second is result of the check. No error checking
      * is done, if there's bug in the test, it will throw TypeError for us.
      * is done, if there's bug in the test, it will throw TypeError for us.
      */
      */
-    shared_ptr<Check<Log> > create(const string&,
-                                    ConstElementPtr definition)
+    shared_ptr<Check<Log> > create(const string&, ConstElementPtr definition,
+                                   const Loader<Log>&)
     {
     {
         vector<ConstElementPtr> list(definition->listValue());
         vector<ConstElementPtr> list(definition->listValue());
         int logpos(list[0]->intValue());
         int logpos(list[0]->intValue());