X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FParseListS.hh;h=87b708253adf3e88cf1982aebbff6e7c9a4a361b;hb=5d62f84a80b2c72cc0aa5cabc3ddad752e87fcc8;hp=a480be6afeaf4a36c31f2f86d43fad904ecf8e23;hpb=ac6a813d9d99f7add4e13aff7a4bcd314d5604a6;p=senf.git diff --git a/Packets/ParseListS.hh b/Packets/ParseListS.hh index a480be6..87b7082 100644 --- a/Packets/ParseListS.hh +++ b/Packets/ParseListS.hh @@ -20,6 +20,36 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +/** \file + + \idea Add an optional state to the sentinel and an optional + transition function. See ParseListS.hh for more. + + We should write a baseclass for sentinels which has no \c check() + member, en empty \c next() member and \c void as the state + type. This simplifies writing simple sentinels. + + The parse_listS iterator will have to pass the state in addition + to the current list element to \c check(). The \c next() member + will be invoked to advance the iterator. It is passer the current + element and a (non-const) reference to the state which it may + update. The Parse_ListS constructor must take an arbitrary number + of additional arguments which are forwarded to the state + initialization. + + This structure makes it simple to optimize away the overhead if + the state type is void. If we would always instantiate the + sentinel, this will always take up space. + + Another possibility would be to always instantiate the sentinel + and make the baseclass mandatory. The baseclass would then hold + the current raw iterator. The iterator itself would ONLY include a + single sentinel instance .. I think, this is the best solution, + sentinel members then have intrinsic access to the + state. Arguments are forwarded from the list constructor to the + Sentinel constructor. + */ + #ifndef HH_ParseListS_ #define HH_ParseListS_ 1