00001 /* vim: set sw=4 sts=4 et foldmethod=syntax : */ 00002 00003 /* 00004 * Copyright (c) 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_ARGS_ARGS_SECTION_HH 00021 #define PALUDIS_GUARD_PALUDIS_ARGS_ARGS_SECTION_HH 1 00022 00023 #include <paludis/util/private_implementation_pattern.hh> 00024 #include <paludis/util/attributes.hh> 00025 #include <paludis/util/wrapped_forward_iterator-fwd.hh> 00026 #include <string> 00027 00028 namespace paludis 00029 { 00030 namespace args 00031 { 00032 struct ArgsGroup; 00033 struct ArgsHandler; 00034 00035 /** 00036 * Holds a number of ArgsGroup instances. 00037 * 00038 * \since 0.40 00039 * \ingroup g_args 00040 */ 00041 class PALUDIS_VISIBLE ArgsSection : 00042 private PrivateImplementationPattern<ArgsSection> 00043 { 00044 public: 00045 ArgsSection(ArgsHandler * const, const std::string &); 00046 ~ArgsSection(); 00047 00048 struct GroupsConstIteratorTag; 00049 typedef WrappedForwardIterator<GroupsConstIteratorTag, const ArgsGroup> GroupsConstIterator; 00050 GroupsConstIterator begin() const PALUDIS_ATTRIBUTE((warn_unused_result)); 00051 GroupsConstIterator end() const PALUDIS_ATTRIBUTE((warn_unused_result)); 00052 00053 ArgsHandler * handler() const PALUDIS_ATTRIBUTE((warn_unused_result)); 00054 const std::string name() const PALUDIS_ATTRIBUTE((warn_unused_result)); 00055 00056 void add(ArgsGroup * const); 00057 }; 00058 } 00059 00060 #ifdef PALUDIS_HAVE_EXTERN_TEMPLATE 00061 extern template class PrivateImplementationPattern<args::ArgsSection>; 00062 #endif 00063 } 00064 00065 #endif