accept_visitor.hh

00001 /* vim: set sw=4 sts=4 et foldmethod=syntax : */
00002 
00003 /*
00004  * Copyright (c) 2006, 2007, 2008, 2009 Ciaran McCreesh
00005  *
00006  * This file is part of the Paludis package manager. Paludis is free software;
00007  * you can redistribute it and/or modify it under the terms of the GNU General
00008  * Public License version 2, as published by the Free Software Foundation.
00009  *
00010  * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
00011  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00012  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
00013  * details.
00014  *
00015  * You should have received a copy of the GNU General Public License along with
00016  * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
00017  * Place, Suite 330, Boston, MA  02111-1307  USA
00018  */
00019 
00020 #ifndef PALUDIS_GUARD_PALUDIS_UTIL_ACCEPT_VISITOR_HH
00021 #define PALUDIS_GUARD_PALUDIS_UTIL_ACCEPT_VISITOR_HH 1
00022 
00023 #include <paludis/util/attributes.hh>
00024 
00025 namespace paludis
00026 {
00027     /**
00028      * Used by accept_visitor.
00029      *
00030      * \nosubgrouping
00031      * \ingroup g_visitors
00032      */
00033     template <typename Visitor_>
00034     class PALUDIS_VISIBLE AcceptVisitor
00035     {
00036         private:
00037             Visitor_ & _v;
00038 
00039         public:
00040             typedef void result_type;
00041 
00042             ///\name Visitor operations
00043             ///\{
00044 
00045             AcceptVisitor(Visitor_ & v) :
00046                 _v(v)
00047             {
00048             }
00049 
00050             template <typename T_>
00051             void operator() (T_ & t) const
00052             {
00053                 t.accept(_v);
00054             }
00055 
00056             ///\}
00057     };
00058 
00059     /**
00060      * Convenience function for using a visitor with a standard algorithm.
00061      *
00062      * \ingroup g_visitors
00063      */
00064     template <typename Visitor_>
00065     AcceptVisitor<Visitor_> PALUDIS_VISIBLE accept_visitor(Visitor_ & v)
00066     {
00067         return AcceptVisitor<Visitor_>(v);
00068     }
00069 }
00070 
00071 #endif

Generated on Mon Sep 21 10:36:08 2009 for paludis by  doxygen 1.5.4