Thread: [S11n-cvs] SF.net SVN: s11n:[202] trunk/src
Brought to you by:
sgbeal
From: <sg...@us...> - 2008-08-11 09:20:46
|
Revision: 202 http://s11n.svn.sourceforge.net/s11n/?rev=202&view=rev Author: sgbeal Date: 2008-08-11 09:20:40 +0000 (Mon, 11 Aug 2008) Log Message: ----------- fixed empty if() kludge to avoid another warning message :/ Modified Paths: -------------- trunk/src/proxy/reg_s11n_traits_template1.hpp trunk/src/proxy/reg_s11n_traits_template2.hpp trunk/src/proxy/reg_s11n_traits_template3.hpp trunk/src/proxy/reg_s11n_traits_template4.hpp trunk/src/s11n/factory_reg.hpp Modified: trunk/src/proxy/reg_s11n_traits_template1.hpp =================================================================== --- trunk/src/proxy/reg_s11n_traits_template1.hpp 2008-06-13 13:58:10 UTC (rev 201) +++ trunk/src/proxy/reg_s11n_traits_template1.hpp 2008-08-11 09:20:40 UTC (rev 202) @@ -57,7 +57,7 @@ static const bool cl_reg_placeholder; static const std::string class_name( const serializable_type * ) { - if( cl_reg_placeholder == true ); // just to reference it. w/o this cl reg never happens :( + if( cl_reg_placeholder == true ){} // just to reference it. w/o this cl reg never happens :( return S11N_TEMPLATE_TYPE_NAME; } Modified: trunk/src/proxy/reg_s11n_traits_template2.hpp =================================================================== --- trunk/src/proxy/reg_s11n_traits_template2.hpp 2008-06-13 13:58:10 UTC (rev 201) +++ trunk/src/proxy/reg_s11n_traits_template2.hpp 2008-08-11 09:20:40 UTC (rev 202) @@ -66,7 +66,7 @@ static bool cl_reg_placeholder; static const std::string class_name( const serializable_type * ) { - if( cl_reg_placeholder == true ); // just to reference it. w/o this cl reg never happens :( + if( cl_reg_placeholder == true ){} // just to reference it. w/o this cl reg never happens :( return S11N_TEMPLATE_TYPE_NAME; } }; Modified: trunk/src/proxy/reg_s11n_traits_template3.hpp =================================================================== --- trunk/src/proxy/reg_s11n_traits_template3.hpp 2008-06-13 13:58:10 UTC (rev 201) +++ trunk/src/proxy/reg_s11n_traits_template3.hpp 2008-08-11 09:20:40 UTC (rev 202) @@ -66,7 +66,7 @@ static bool cl_reg_placeholder; static const std::string class_name( const serializable_type * ) { - if( cl_reg_placeholder == true ); // just to reference it. w/o this cl reg never happens :( + if( cl_reg_placeholder == true ){} // just to reference it. w/o this cl reg never happens :( return S11N_TEMPLATE_TYPE_NAME; } }; Modified: trunk/src/proxy/reg_s11n_traits_template4.hpp =================================================================== --- trunk/src/proxy/reg_s11n_traits_template4.hpp 2008-06-13 13:58:10 UTC (rev 201) +++ trunk/src/proxy/reg_s11n_traits_template4.hpp 2008-08-11 09:20:40 UTC (rev 202) @@ -70,7 +70,7 @@ static bool cl_reg_placeholder; static const std::string class_name( const serializable_type * ) { - if( cl_reg_placeholder == true ); // just to reference it. w/o this cl reg never happens :( + if( cl_reg_placeholder == true ){} // just to reference it. w/o this cl reg never happens :( return S11N_TEMPLATE_TYPE_NAME; } }; Modified: trunk/src/s11n/factory_reg.hpp =================================================================== --- trunk/src/s11n/factory_reg.hpp 2008-06-13 13:58:10 UTC (rev 201) +++ trunk/src/s11n/factory_reg.hpp 2008-08-11 09:20:40 UTC (rev 202) @@ -80,7 +80,7 @@ { s11n_factory_reg_context() { - if( true == placeholder ); // weird workaround, just to reference the var. + if( true == placeholder ){} // weird workaround, just to reference the var. } /** Placeholder variable for automatic factory This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sg...@us...> - 2008-09-23 12:14:16
|
Revision: 218 http://s11n.svn.sourceforge.net/s11n/?rev=218&view=rev Author: sgbeal Date: 2008-09-23 12:14:07 +0000 (Tue, 23 Sep 2008) Log Message: ----------- removed the parallel compilation 'fix' b/c it causes a rebuild on every make due to a non-file dep. Modified Paths: -------------- trunk/src/io/expat/Makefile trunk/src/io/js/Makefile trunk/src/io/serializer_lex.make trunk/src/lite/Makefile trunk/src/plugin/Makefile trunk/src/s11n/Makefile Modified: trunk/src/io/expat/Makefile =================================================================== --- trunk/src/io/expat/Makefile 2008-09-19 15:57:30 UTC (rev 217) +++ trunk/src/io/expat/Makefile 2008-09-23 12:14:07 UTC (rev 218) @@ -23,7 +23,6 @@ #expat_serializer_so_VERSION = $(package.version) #include $(TOC_MAKESDIR)/SHARED_LIBS.make -expat_serializer.o: symlink-files -all: expat_serializer.o +all: symlink-files expat_serializer.o # $(expat_serializer_so_OBJECTS) # SHARED_LIBS Modified: trunk/src/io/js/Makefile =================================================================== --- trunk/src/io/js/Makefile 2008-09-19 15:57:30 UTC (rev 217) +++ trunk/src/io/js/Makefile 2008-09-23 12:14:07 UTC (rev 218) @@ -24,7 +24,6 @@ #include $(TOC_MAKESDIR)/SHARED_LIBS.make -js_serializer.o: symlink-files -all: js_serializer.o +all: symlink-files js_serializer.o # $(js_serializer_so_OBJECTS) # SHARED_LIBS Modified: trunk/src/io/serializer_lex.make =================================================================== --- trunk/src/io/serializer_lex.make 2008-09-19 15:57:30 UTC (rev 217) +++ trunk/src/io/serializer_lex.make 2008-09-23 12:14:07 UTC (rev 218) @@ -106,5 +106,4 @@ # ^^^^ local flex support ######################################################################## -$(OBJECTS): $(SERIALIZER_FlexLexer_hpp) symlink-files -serializer: $(OBJECTS) +serializer: symlink-files $(SERIALIZER_FlexLexer_hpp) $(OBJECTS) Modified: trunk/src/lite/Makefile =================================================================== --- trunk/src/lite/Makefile 2008-09-19 15:57:30 UTC (rev 217) +++ trunk/src/lite/Makefile 2008-09-23 12:14:07 UTC (rev 218) @@ -23,5 +23,4 @@ symlink-files.dest = $(toc2.top_srcdir)/include/s11n.net/s11n include $(toc2.dirs.makefiles)/symlink-files.make -$(OBJECTS): symlink-files -all: $(OBJECTS) +all: symlink-files $(OBJECTS) Modified: trunk/src/plugin/Makefile =================================================================== --- trunk/src/plugin/Makefile 2008-09-19 15:57:30 UTC (rev 217) +++ trunk/src/plugin/Makefile 2008-09-23 12:14:07 UTC (rev 218) @@ -32,5 +32,4 @@ symlink-files.dest := $(toc2.top_srcdir)/$(HEADERS_RELPATH) include $(toc2.dirs.makefiles)/symlink-files.make -$(OBJECTS): symlink-files -all: $(OBJECTS) +all: symlink-files $(OBJECTS) Modified: trunk/src/s11n/Makefile =================================================================== --- trunk/src/s11n/Makefile 2008-09-19 15:57:30 UTC (rev 217) +++ trunk/src/s11n/Makefile 2008-09-23 12:14:07 UTC (rev 218) @@ -67,8 +67,7 @@ symlink-files.dest := $(toc2.top_srcdir)/$(HEADERS_RELPATH) include $(toc2.dirs.makefiles)/symlink-files.make -$(OBJECTS): symlink-files -all: $(OBJECTS) +all: symlink-files $(OBJECTS) ######################################################################## # Reminder: set package.subdirs so that cleanup rules will work. # And make sure subdirs are built AFTER everything else. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sg...@us...> - 2008-11-04 16:47:14
|
Revision: 224 http://s11n.svn.sourceforge.net/s11n/?rev=224&view=rev Author: sgbeal Date: 2008-11-04 16:47:09 +0000 (Tue, 04 Nov 2008) Log Message: ----------- Undid recent deps-related changes which caused always-rebuild behaviour. Now only rebuilds symlinks properly for the 'all' target :(. Modified Paths: -------------- trunk/src/io/Makefile trunk/src/s11n/Makefile Modified: trunk/src/io/Makefile =================================================================== --- trunk/src/io/Makefile 2008-10-03 12:54:28 UTC (rev 223) +++ trunk/src/io/Makefile 2008-11-04 16:47:09 UTC (rev 224) @@ -41,5 +41,5 @@ symlink-files.dest = $(toc2.top_srcdir)/$(IOINCLUDES_PATH) include $(toc2.dirs.makefiles)/symlink-files.make -$(OBJECTS): symlink-files -all: $(OBJECTS) subdirs +#$(OBJECTS): symlink-files # causes always-rebuild +all: symlink-files $(OBJECTS) subdirs Modified: trunk/src/s11n/Makefile =================================================================== --- trunk/src/s11n/Makefile 2008-10-03 12:54:28 UTC (rev 223) +++ trunk/src/s11n/Makefile 2008-11-04 16:47:09 UTC (rev 224) @@ -66,10 +66,11 @@ symlink-files.dest := $(toc2.top_srcdir)/$(HEADERS_RELPATH) include $(toc2.dirs.makefiles)/symlink-files.make -$(OBJECTS): symlink-files -all: $(OBJECTS) +#$(OBJECTS): symlink-files +#%.o: symlink-files +#all: $(OBJECTS) ######################################################################## # Reminder: set package.subdirs so that cleanup rules will work. # And make sure subdirs are built AFTER everything else. package.subdirs := 0x -all: $(addprefix subdir-,$(package.subdirs)) +all: symlink-files $(OBJECTS) $(addprefix subdir-,$(package.subdirs)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sg...@us...> - 2009-04-13 18:56:55
|
Revision: 270 http://s11n.svn.sourceforge.net/s11n/?rev=270&view=rev Author: sgbeal Date: 2009-04-13 18:56:42 +0000 (Mon, 13 Apr 2009) Log Message: ----------- Added experimental s11n::node_query class. Modified Paths: -------------- trunk/src/client/sample/experimental.cpp trunk/src/s11n/Makefile Added Paths: ----------- trunk/src/s11n/s11n_node_query.hpp Modified: trunk/src/client/sample/experimental.cpp =================================================================== --- trunk/src/client/sample/experimental.cpp 2009-04-13 18:55:33 UTC (rev 269) +++ trunk/src/client/sample/experimental.cpp 2009-04-13 18:56:42 UTC (rev 270) @@ -27,12 +27,16 @@ #include <s11n.net/s11n/proxy/pod/string.hpp> #include <s11n.net/s11n/proxy/std/vector.hpp> +#if 0 #define S11N_MAP_TYPE_PROXY ::s11n::map::serialize_streamable_map_f #define S11N_MAP_TYPE_DESER_PROXY ::s11n::map::deserialize_streamable_map_f #include <s11n.net/s11n/proxy/std/map.hpp> // ^^^^ those #defines are consumed and undefined by the map reg supermacro +#else +#include <s11n.net/s11n/proxy/std/map.hpp> +#include <s11n.net/s11n/proxy/std/list.hpp> +#endif - //////////////////////////////////////////////////////////////////////// // misc util stuff #include <s11n.net/s11n/s11n_debuggering_macros.hpp> // CERR @@ -906,6 +910,91 @@ bindata_deser::deallocate( debin ); } +#include <s11n.net/s11n/s11n_node_query.hpp> +void do_query() +{ +#if 1 + using namespace s11nlite; + typedef s11nlite::node_type NT; + typedef s11nlite::node_traits NTR; + + NT n; + + typedef std::list<double> ListT; + typedef std::map<int,ListT> MapT; + + MapT map; + for( int i = 0; i < 3; ++i ) + { + ListT & l = map['a'+i]; + for( int x = 0; x < 3; ++x ) + { + l.push_back( x * i ); + } + } + s11nlite::serialize( n, map ); + s11nlite::save( n, std::cout ); + typedef s11n::node_query<NT> QT; + QT q(&n); + +#if 0 + q = q.copy() + .children() + .where( s11n::nq_name_is("pair") ) + .children() + .where( s11n::nq_name_is("first") ) + //.where( s11n::nq_has_prop("second") ) + ; +#else + q.children() + .where( s11n::nq_name_is("pair") ) + .children() + .where( s11n::nq_name_is("first") ) + //.where( s11n::nq_has_prop("second") ) + ; + +#endif + QT q2 = QT(&n) + .children() + .where( s11n::nq_name_is("pair") ) + .children() + //.where( s11n::nq_not( s11n::nq_name_is("first") ) ) + //.where( s11n::nq_name_is("second") ) + //.where( s11n::nq_class_name_is("list" ) ) + //.where( s11n::nq_class_name_is( (ListT const *)0 ) ) + //.where( s11n::nq_class_name_is::class_name<ListT>() ) + .where( s11n::nq_or( + //s11n::nq_class_name_is::class_name<ListT>(), + s11n::nq_name_is("second"), + s11n::nq_class_name_is::class_name<int>() + ) ) + //.copy() + //.children() + .append(q) + //.sort() + //.where( s11n::nq_has_prop("v") ) + ; + //q.intersect( q2 ); + q.onion( q2 ); + //q.append( q2 ) + //q = q2; + //q.sort(); + q.unique(); + QT::iterator it = q.results().begin(); + QT::iterator et = q.results().end(); + size_t count = 1; + COUT << "Matches:\n"; + for( ; et != it; ++it, ++count ) + { + NT const * N = *it; + COUT << "matching node #"<<count + << ": @"<< N + <<": " << NTR::name(*N) + << ':'<<NTR::class_name(*N)<< '\n'; + } +#endif +} + int main( int argc, char **argv ) { @@ -914,12 +1003,13 @@ s11nlite::serializer_class( "parens" ); try { - if(1) and_yet_MORE_TESTS(); + if(0) and_yet_MORE_TESTS(); if(0) do_some_tests(); if(0) do_some_more_tests(); if(0) do_even_more_tests(); if(0) do_version(); - if(1) do_bindata(); + if(0) do_bindata(); + if(1) do_query(); } catch( const std::exception & ex ) { Modified: trunk/src/s11n/Makefile =================================================================== --- trunk/src/s11n/Makefile 2009-04-13 18:55:33 UTC (rev 269) +++ trunk/src/s11n/Makefile 2009-04-13 18:56:42 UTC (rev 270) @@ -37,6 +37,7 @@ s11n_debuggering_macros.hpp \ s11n.hpp \ s11n_node.hpp \ + s11n_node_query.hpp \ serialize.hpp \ serialize.tpp \ tags.hpp \ Added: trunk/src/s11n/s11n_node_query.hpp =================================================================== --- trunk/src/s11n/s11n_node_query.hpp (rev 0) +++ trunk/src/s11n/s11n_node_query.hpp 2009-04-13 18:56:42 UTC (rev 270) @@ -0,0 +1,481 @@ +#ifndef s11n_S11N_NODE_QUERY_HPP_INCLUDED +#define s11n_S11N_NODE_QUERY_HPP_INCLUDED + +//////////////////////////////////////////////////////////////////////// +// s11n_node_query.hpp +// Experimental. Don't use. +// +// License: Public Domain +// Author: st...@s1... +//////////////////////////////////////////////////////////////////////// +#include <string> + +#include <vector> +#include <set> +#include <algorithm> +#include <iterator> +#include <s11n.net/s11n/export.hpp> +#include <s11n.net/s11n/exception.hpp> +#include <s11n.net/s11n/s11n_node.hpp> +#include <s11n.net/s11n/traits.hpp> + +namespace s11n { + + /** + EXPERIMENTAL - do not use! + + This class is for fetching s11n nodes matching certain + criteria. It is somewhat like using an SQL query builder, but + is much more limited in what it can do. + + Notable limitations: + + - Can only work on const nodes. It would seem to be impossible + to consolidate const- and non-const nodes in one API here, + partly because of the "inherited" constness of child nodes. + + - It does a lot of list copying, and it is conceivable that it + may use quite a lot of memory. We could use reference counting + of the internal result sets to reduce this, and may do so if + this class gets any appreciable use. + + + Added in versions 1.3.2/1.2.10. + */ + template <typename NodeType> + class node_query + { + public: + /** The templatized S11nNode type. */ + typedef NodeType node_t; + /** + s11n node traits type. + */ + typedef node_traits<NodeType> traits; + + /** + We cannot re-use traits::child_list_type here b/c we can + only work with const NodeType objects from here. + Additionally, some list operations require sorted lists and + the associated standard routines require random-access + iterators. + */ + typedef std::vector<NodeType const *> node_list; + + /** Internal convenience typedef. */ + typedef std::less<NodeType const *> compare_func; + + /** + Result set iterator type. + */ + typedef typename node_list::const_iterator iterator; + + /** + Creates a new query object which uses src for its + searching. If src is null then it acts like the no-arg + ctor. + */ + explicit node_query( node_t const * src ) + : m_li() + { + if( src ) m_li.push_back(src); + } + + /** + Creates an empty query object, useful only as the target + of assignment. + */ + node_query() + : m_li() + { + } + + /** + The current result list. + */ + node_list const & results() const { return m_li; } + + /** + The current result list. This non-const form + can be used by non-member algorithms to + manipulate a result set. + */ + node_list & results() { return m_li; } + + /** + Modifies this result set in place to contain all results() + items for which clause(item) returns true. + */ + template <typename Ftor> + node_query & where( Ftor clause ) + { + node_query res; + iterator it( m_li.begin() ); + typename node_list::const_iterator et( m_li.end() ); + for( ; et != it; ++it ) + { + if( clause( *it ) ) + { + res.results().push_back(*it); + } + } + m_li.swap( res.m_li ); + return *this; + } + + template <typename Ftor> + node_query where( Ftor clause ) const + { + node_query res; + iterator it( m_li.begin() ); + typename node_list::const_iterator et( m_li.end() ); + for( ; et != it; ++it ) + { + if( clause( *it ) ) + { + res.results().push_back(*it); + } + } + return res; + } + + /** + Modifies this result set in place to contain all child + nodes of all items in in the current result set. + */ + node_query & children() + { + node_query res; + iterator it( m_li.begin() ); + iterator et( m_li.end() ); + node_list & rli( res.results() ); + typedef typename traits::child_list_type NCL; + for( ; et != it; ++it ) + { + node_t const * n = *it; + NCL const & childs( traits::children( *n ) ); + typename NCL::const_iterator cit( childs.begin() ); + typename NCL::const_iterator cet( childs.end() ); + for( ; cit != cet; ++cit ) + { + rli.push_back(*cit); + } + } + m_li.swap( res.m_li ); + return *this; + } + + /** + Creates returns a copy of this object. This may be useful + in certain call-chaining contexts where we don't want to + edit a given query object in-place. + */ + node_query copy() const + { + return *this; + } + + /** + Assigns this object's results to be those from rhs. This + may be useful in certain complex call-chaining contexts. + */ + node_query & assign( node_query const & rhs ) + { + if( this != &rhs ) *this = rhs; + return *this; + } + + /** + Appends rhs.results() to the end of this result set. + */ + node_query & append( node_query const & rhs ) + { + std::copy( rhs.m_li.begin(), rhs.m_li.end(), + std::back_inserter( this->m_li ) + ); + return *this; + } + + /** + Sorts results() in-place using the given comparison + operator, which must follow the conventions required by + std::sort(). + */ + template <typename Compare> + node_query & sort( Compare cmp ) + { + std::sort( this->m_li.begin(), this->m_li.end(), cmp ); + return *this; + } + + /** + Sorts results() in-place using the default comparison + algorithm (which simply compares nodes by their pointer + values). + */ + node_query & sort() + { + return this->sort( compare_func() ); + } + + /** + Sorts this list in-place and removes any duplicate + entries. See sort() for the requirements of the Compare + functor. + */ + template <typename Compare> + node_query & unique( Compare cmp ) + { + this->sort( cmp ); + typedef typename node_list::iterator IT; + IT it = std::unique( this->m_li.begin(), this->m_li.end() ); + if( m_li.end() != it ) m_li.erase( it, m_li.end() ); + return *this; + } + + /** + Equivalent to unique(compre_func()). + */ + node_query & unique() + { + return this->unique( compare_func() ); + } + + + /** + Modifies this result set to include only items which are + both in this set and in rhs, using cmp to do the comparison + (which must conform to the requirements of std::sort() + comparison functions). This set gets sorted as a + side-effect. + */ + template <typename CompFunc> + node_query & intersect( node_query const & rhs, CompFunc cmp ) + { + if( &rhs == this ) return *this; + node_list l1( this->m_li ); + this->m_li.clear(); + std::sort( l1.begin(), l1.end(), cmp ); + node_list l2( rhs.m_li ); + std::sort( l2.begin(), l2.end(), cmp ); + std::set_intersection( l1.begin(), l1.end(), + l2.begin(), l2.end(), + std::back_inserter( this->m_li ), + cmp ); + return *this; + } + + /** + Equivalent to intersect( rhs, compare_func() ). + */ + node_query & intersect( node_query const & rhs ) + { + return this->intersect( rhs, compare_func() ); + } + + /** + Modifies this result set to include any items which are + either in this set or rhs (a union). It uses cmp to do the + comparison (which must conform to the requirements of + std::sort() comparison functions). This set gets sorted as + a side-effect. + + The result set may have duplicate entries. + + It is called onion() instead of union() because union() + is a reserved word in C++. + */ + template <typename CompFunc> + node_query & onion( node_query const & rhs, CompFunc cmp ) + { + if( &rhs == this ) return *this; + node_list l1( this->m_li ); + this->m_li.clear(); + std::sort( l1.begin(), l1.end(), cmp ); + node_list l2( rhs.m_li ); + std::sort( l2.begin(), l2.end(), cmp ); + std::set_union( l1.begin(), l1.end(), + l2.begin(), l2.end(), + std::back_inserter( this->m_li ), + cmp ); + return *this; + } + + /** + Equivalent to union(rhs,compare_func()). + */ + node_query & onion( node_query const & rhs ) + { + return this->onion( rhs, compare_func() ); + } + + private: + /** Result set. */ + node_list m_li; + }; + + /** + A Concept class which exists only to document the query + interface required by node_query. + */ + struct nq_concept + { + /** + Must determine whether n conforms to specific criteria + and return true on success, else false. + */ + template <typename NodeType> + bool operator()( NodeType const * n ) const; + }; + + /** + An nq_concept implementation for querying nodes + which have a specific node name. + */ + struct nq_name_is + { + std::string name; + explicit nq_name_is( std::string const & n ) :name(n) + {} + template <typename NodeType> + bool operator()( NodeType const * n ) const + { + typedef node_traits<NodeType> NTR; + return n + ? (this->name == NTR::name(*n)) + : false; + } + }; + + /** + An nq_concept implementation for querying nodes + which have a specific property. + */ + struct nq_has_prop + { + std::string key; + explicit nq_has_prop( std::string const & n ) : key(n) + {} + template <typename NodeType> + bool operator()( NodeType const * n ) const + { + typedef node_traits<NodeType> NTR; + return n + ? (NTR::is_set( *n, this->key )) + : false; + } + }; + + /** + An nq_concept implementation for querying nodes + which have a specific s11n class name. + */ + struct nq_class_name_is + { + std::string name; + explicit nq_class_name_is( std::string const & n ) :name(n) + {} +#if 0 // awkward to use + template <typename SerT> + nq_class_name_is( SerT const * ) : name(s11n_traits<SerT>::class_name(0)) + { + } +#endif + template <typename NodeType> + bool operator()( NodeType const * n ) const + { + typedef node_traits<NodeType> NTR; + return n + ? (this->name == NTR::class_name(*n)) + : false; + } + + /** + Convenience routine. It is + */ + template <typename SerT> + static nq_class_name_is class_name() + { + return nq_class_name_is( s11n_traits<SerT>::class_name(0) ); + } + }; + + + /** + Negates another node query functor. Ftor must conform to + */ + template <typename Ftor> + struct nq_negate_ftor + { + Ftor func; + nq_negate_ftor( Ftor f ) : func(f) + {} + template <typename NodeType> + bool operator()( NodeType const * n ) const + { + typedef node_traits<NodeType> NTR; + //if( ! n ) throw s11n_exception( S11N_SOURCEINFO, "ng_negate_ftor cannot sensibly react to null nodes!"); + return !func(n); + } + }; + + /** + Convenience routine to create an ng_negate_ftor object. + */ + template <typename Ftor> + nq_negate_ftor<Ftor> nq_not( Ftor f ) + { + typedef nq_negate_ftor<Ftor> x; + return x(f); + } + + /** + A node_query search functor which performs a logical + OR or AND of two nc_concept-compatible functors. + */ + template <typename Ftor1,typename Ftor2,bool IsAnd> + struct nq_andor_ftor + { + Ftor1 func1; + Ftor2 func2; + nq_andor_ftor( Ftor1 f, Ftor2 f2 ) : func1(f),func2(f2) + {} + /** + If IsAnd then returns (func1(n) && func2(n)) + else it returns (func1(n) || func2(n)). + */ + template <typename NodeType> + bool operator()( NodeType const * n ) const + { + return IsAnd + ? (func1(n) && func2(n)) + : (func1(n) || func2(n)); + } + }; + + /** + Convenience function to return a functor for performing + OR-style searches on node_query objects. + */ + template <typename Ftor1, typename Ftor2> + nq_andor_ftor<Ftor1,Ftor2,false> nq_or( Ftor1 f, Ftor2 f2 ) + { + typedef nq_andor_ftor<Ftor1,Ftor2,false> x; + return x(f,f2); + } + + + /** + Convenience function to return a functor for performing + AND-style searches on node_query objects. + */ + template <typename Ftor1, typename Ftor2> + nq_andor_ftor<Ftor1,Ftor2,true> nq_and( Ftor1 f, Ftor2 f2 ) + { + typedef nq_andor_ftor<Ftor1,Ftor2,true> x; + return x(f,f2); + } + +} // namespace s11n + +#endif // s11n_S11N_NODE_QUERY_HPP_INCLUDED This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sg...@us...> - 2010-06-09 19:54:42
|
Revision: 286 http://s11n.svn.sourceforge.net/s11n/?rev=286&view=rev Author: sgbeal Date: 2010-06-09 19:54:35 +0000 (Wed, 09 Jun 2010) Log Message: ----------- pulled in gcc 4.4x compatibility fixes from the 1.2.x tree. Modified Paths: -------------- trunk/src/io/compact/compact.flex trunk/src/io/compact/compact.flex.cpp trunk/src/io/funtxt/funtxt.flex trunk/src/io/funtxt/funtxt.flex.cpp trunk/src/io/funxml/funxml.flex.cpp trunk/src/io/parens/parens.flex.cpp trunk/src/io/simplexml/simplexml.flex.cpp trunk/src/io/wesnoth/wesnoth.flex trunk/src/io/wesnoth/wesnoth.flex.cpp trunk/src/s11n/vappendf.cpp Modified: trunk/src/io/compact/compact.flex =================================================================== --- trunk/src/io/compact/compact.flex 2010-06-09 19:43:37 UTC (rev 285) +++ trunk/src/io/compact/compact.flex 2010-06-09 19:54:35 UTC (rev 286) @@ -8,12 +8,12 @@ #define YY_SKIP_YYWRAP 1 int yywrap() { return 1; } -#include <stdio.h> // only for EOF definition +// #include <stdio.h> #include <cassert> #include <iostream> #include <string> #include <deque> - +#include <stdio.h> // only for EOF definition #include <s11n.net/s11n/s11n_debuggering_macros.hpp> // CERR #define PCERR if( 0 ) CERR << "compact.flex error:" Modified: trunk/src/io/compact/compact.flex.cpp =================================================================== --- trunk/src/io/compact/compact.flex.cpp 2010-06-09 19:43:37 UTC (rev 285) +++ trunk/src/io/compact/compact.flex.cpp 2010-06-09 19:54:35 UTC (rev 286) @@ -4,7 +4,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ + * $Header: /cvsroot/s11n/1.1/s11n/src/io/compact/compact.flex.cpp,v 1.8 2009/11/03 18:13:48 sgbeal Exp $ */ #define FLEX_SCANNER @@ -345,7 +345,7 @@ #include <iostream> #include <string> #include <deque> - +#include <stdio.h> // only for EOF definition #include <s11n.net/s11n/s11n_debuggering_macros.hpp> // CERR #define PCERR if( 0 ) CERR << "compact.flex error:" Modified: trunk/src/io/funtxt/funtxt.flex =================================================================== --- trunk/src/io/funtxt/funtxt.flex 2010-06-09 19:43:37 UTC (rev 285) +++ trunk/src/io/funtxt/funtxt.flex 2010-06-09 19:54:35 UTC (rev 286) @@ -1,7 +1,6 @@ %option c++ %{ - namespace { // to get doxygen to ignore these comments :/ /** my first lex :) @@ -62,11 +61,11 @@ # undef NDEBUG // force assert() #endif -#include <stdio.h> // only for EOF definition #include <iostream> #include <string> #include <deque> #include <cassert> +#include <stdio.h> // only for EOF definition #include <s11n.net/s11n/io/strtool.hpp> // translate_entities() Modified: trunk/src/io/funtxt/funtxt.flex.cpp =================================================================== --- trunk/src/io/funtxt/funtxt.flex.cpp 2010-06-09 19:43:37 UTC (rev 285) +++ trunk/src/io/funtxt/funtxt.flex.cpp 2010-06-09 19:54:35 UTC (rev 286) @@ -4,7 +4,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ + * $Header: /cvsroot/s11n/1.1/s11n/src/io/funtxt/funtxt.flex.cpp,v 1.5 2009/11/03 18:15:59 sgbeal Exp $ */ #define FLEX_SCANNER @@ -478,7 +478,6 @@ #define INITIAL 0 #line 3 "funtxt.flex" - namespace { // to get doxygen to ignore these comments :/ /** my first lex :) @@ -543,6 +542,7 @@ #include <string> #include <deque> #include <cassert> +#include <stdio.h> // only for EOF definition #include <s11n.net/s11n/io/strtool.hpp> // translate_entities() Modified: trunk/src/io/funxml/funxml.flex.cpp =================================================================== --- trunk/src/io/funxml/funxml.flex.cpp 2010-06-09 19:43:37 UTC (rev 285) +++ trunk/src/io/funxml/funxml.flex.cpp 2010-06-09 19:54:35 UTC (rev 286) @@ -4,7 +4,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ + * $Header: /cvsroot/s11n/1.1/s11n/src/io/funxml/funxml.flex.cpp,v 1.5 2009/11/03 18:15:59 sgbeal Exp $ */ #define FLEX_SCANNER @@ -379,7 +379,7 @@ #define YY_SKIP_YYWRAP 1 int yywrap() { return 1; } -// #include <stdio.h> +#include <stdio.h> // only for EOF definition #include <cassert> #include <iostream> #include <string> Modified: trunk/src/io/parens/parens.flex.cpp =================================================================== --- trunk/src/io/parens/parens.flex.cpp 2010-06-09 19:43:37 UTC (rev 285) +++ trunk/src/io/parens/parens.flex.cpp 2010-06-09 19:54:35 UTC (rev 286) @@ -4,7 +4,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ + * $Header: /cvsroot/s11n/1.1/s11n/src/io/parens/parens.flex.cpp,v 1.5 2009/11/03 18:15:59 sgbeal Exp $ */ #define FLEX_SCANNER @@ -511,6 +511,7 @@ #define YY_SKIP_YYWRAP 1 int yywrap() { return 1; } +#include <stdio.h> // only for EOF definition #include <iostream> #include <string> #include <stdexcept> @@ -697,7 +698,7 @@ register char *yy_cp, *yy_bp; register int yy_act; -#line 136 "parens.flex" +#line 137 "parens.flex" @@ -781,14 +782,14 @@ case 1: YY_RULE_SETUP -#line 138 "parens.flex" +#line 139 "parens.flex" { // (* comment blocks *) BEGIN IN_COMMENT_BLOCK; } YY_BREAK case 2: YY_RULE_SETUP -#line 142 "parens.flex" +#line 143 "parens.flex" { PCERR << "hit EOF in a (*comment block*)." << std::endl; throw std::runtime_error( "hit EOF in a (*comment block*)" ); @@ -797,17 +798,17 @@ YY_BREAK case 3: YY_RULE_SETUP -#line 147 "parens.flex" +#line 148 "parens.flex" { /* this match isn't 100% correct.*/ BEGIN 0; } YY_BREAK case 4: YY_RULE_SETUP -#line 148 "parens.flex" +#line 149 "parens.flex" { continue;} YY_BREAK case 5: YY_RULE_SETUP -#line 149 "parens.flex" +#line 150 "parens.flex" { continue;} YY_BREAK case 6: @@ -815,19 +816,19 @@ yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 151 "parens.flex" +#line 152 "parens.flex" {;} // comment lines YY_BREAK case 7: YY_RULE_SETUP -#line 155 "parens.flex" +#line 156 "parens.flex" { BEGIN IN_PROPERTY; } YY_BREAK case 8: YY_RULE_SETUP -#line 159 "parens.flex" +#line 160 "parens.flex" { // key name of property std::string propname = YYText(); @@ -879,7 +880,7 @@ YY_BREAK case 9: YY_RULE_SETUP -#line 208 "parens.flex" +#line 209 "parens.flex" { std::string tmpstr = YYText(); METADATA(nodename) = tmpstr.substr( 0, tmpstr.find( "=" ) ); @@ -889,12 +890,12 @@ YY_BREAK case 10: YY_RULE_SETUP -#line 216 "parens.flex" +#line 217 "parens.flex" {;} YY_BREAK case 11: YY_RULE_SETUP -#line 218 "parens.flex" +#line 219 "parens.flex" { // special case: empty node: --METADATA(internaldepth); BEGIN 0; @@ -902,12 +903,12 @@ YY_BREAK case 12: YY_RULE_SETUP -#line 222 "parens.flex" +#line 223 "parens.flex" {;} YY_BREAK case 13: YY_RULE_SETUP -#line 224 "parens.flex" +#line 225 "parens.flex" { std::string & nodename = METADATA(nodename); std::string & nodeclass = METADATA(nodeclass); @@ -939,7 +940,7 @@ YY_BREAK case 14: YY_RULE_SETUP -#line 253 "parens.flex" +#line 254 "parens.flex" { std::string & nodename = METADATA(nodename); std::string errmsg = "did not find class name after '" + nodename + "'."; @@ -950,7 +951,7 @@ YY_BREAK case 15: YY_RULE_SETUP -#line 261 "parens.flex" +#line 262 "parens.flex" { PCERR << METADATA(internaldepth)<< " Closing node" << std::endl; BuilderContext::close_node( this ); @@ -965,22 +966,22 @@ YY_BREAK case 16: YY_RULE_SETUP -#line 274 "parens.flex" +#line 275 "parens.flex" { continue;} // magic cookie YY_BREAK case 17: YY_RULE_SETUP -#line 276 "parens.flex" +#line 277 "parens.flex" {;} YY_BREAK case 18: YY_RULE_SETUP -#line 278 "parens.flex" +#line 279 "parens.flex" { PCERR << "Unexpected token: [" << YYText()<<"]"<<std::endl;} YY_BREAK case 19: YY_RULE_SETUP -#line 281 "parens.flex" +#line 282 "parens.flex" ECHO; YY_BREAK case YY_STATE_EOF(INITIAL): @@ -1796,7 +1797,7 @@ return 0; } #endif -#line 281 "parens.flex" +#line 282 "parens.flex" // ^{SPACE}*[#;].*$ {;} // comment lines // [#;][^{OPENER}]* {;} // comments trailing after node closures Modified: trunk/src/io/simplexml/simplexml.flex.cpp =================================================================== --- trunk/src/io/simplexml/simplexml.flex.cpp 2010-06-09 19:43:37 UTC (rev 285) +++ trunk/src/io/simplexml/simplexml.flex.cpp 2010-06-09 19:54:35 UTC (rev 286) @@ -4,7 +4,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ + * $Header: /cvsroot/s11n/1.1/s11n/src/io/simplexml/simplexml.flex.cpp,v 1.5 2009/11/03 18:15:59 sgbeal Exp $ */ #define FLEX_SCANNER @@ -752,7 +752,7 @@ #define YY_SKIP_YYWRAP 1 int yywrap() { return 1; } -// #include <stdio.h> +#include <stdio.h> // only for EOF definition #include <cassert> #include <iostream> #include <string> Modified: trunk/src/io/wesnoth/wesnoth.flex =================================================================== --- trunk/src/io/wesnoth/wesnoth.flex 2010-06-09 19:43:37 UTC (rev 285) +++ trunk/src/io/wesnoth/wesnoth.flex 2010-06-09 19:54:35 UTC (rev 286) @@ -10,6 +10,7 @@ #ifdef NDEBUG # undef NDEBUG // force assert() #endif + #include <stdio.h> // only for EOF definition #include <iostream> #include <string> Modified: trunk/src/io/wesnoth/wesnoth.flex.cpp =================================================================== --- trunk/src/io/wesnoth/wesnoth.flex.cpp 2010-06-09 19:43:37 UTC (rev 285) +++ trunk/src/io/wesnoth/wesnoth.flex.cpp 2010-06-09 19:54:35 UTC (rev 286) @@ -4,7 +4,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ + * $Header: /cvsroot/s11n/1.1/s11n/src/io/wesnoth/wesnoth.flex.cpp,v 1.5 2009/11/03 18:15:59 sgbeal Exp $ */ #define FLEX_SCANNER @@ -413,6 +413,7 @@ # undef NDEBUG // force assert() #endif +#include <stdio.h> // only for EOF definition #include <iostream> #include <string> #include <deque> @@ -624,7 +625,7 @@ register char *yy_cp, *yy_bp; register int yy_act; -#line 140 "wesnoth.flex" +#line 141 "wesnoth.flex" @@ -708,12 +709,12 @@ case 1: YY_RULE_SETUP -#line 142 "wesnoth.flex" +#line 143 "wesnoth.flex" { continue; /* single-line comment */ } YY_BREAK case 2: YY_RULE_SETUP -#line 144 "wesnoth.flex" +#line 145 "wesnoth.flex" { // node opener std::string foo = YYText(); @@ -739,7 +740,7 @@ YY_BREAK case 3: YY_RULE_SETUP -#line 167 "wesnoth.flex" +#line 168 "wesnoth.flex" { size_t & bracedepth = METADATA(internaldepth); if( bracedepth == BuilderContext::node_depth(this) ) @@ -760,24 +761,24 @@ YY_BREAK case 4: YY_RULE_SETUP -#line 186 "wesnoth.flex" +#line 187 "wesnoth.flex" {;} YY_BREAK case 5: YY_RULE_SETUP -#line 187 "wesnoth.flex" +#line 188 "wesnoth.flex" { METADATA(property) += YYText(); } YY_BREAK case 6: YY_RULE_SETUP -#line 190 "wesnoth.flex" +#line 191 "wesnoth.flex" {;} // swallow it YY_BREAK case 7: YY_RULE_SETUP -#line 191 "wesnoth.flex" +#line 192 "wesnoth.flex" { // end of line std::string pname; std::string pval; @@ -798,7 +799,7 @@ YY_BREAK case 8: YY_RULE_SETUP -#line 210 "wesnoth.flex" +#line 211 "wesnoth.flex" { // read property if( METADATA(internaldepth) != BuilderContext::node_depth(this) ) { return 1; } @@ -808,12 +809,12 @@ YY_BREAK case 9: YY_RULE_SETUP -#line 218 "wesnoth.flex" +#line 219 "wesnoth.flex" {;} YY_BREAK case 10: YY_RULE_SETUP -#line 220 "wesnoth.flex" +#line 221 "wesnoth.flex" ECHO; YY_BREAK case YY_STATE_EOF(INITIAL): @@ -1626,7 +1627,7 @@ return 0; } #endif -#line 220 "wesnoth.flex" +#line 221 "wesnoth.flex" #undef METADATA Modified: trunk/src/s11n/vappendf.cpp =================================================================== --- trunk/src/s11n/vappendf.cpp 2010-06-09 19:43:37 UTC (rev 285) +++ trunk/src/s11n/vappendf.cpp 2010-06-09 19:54:35 UTC (rev 286) @@ -23,7 +23,7 @@ #include <string.h> /* strlen() */ #include <stdlib.h> /* free/malloc() */ #include <ctype.h> - +#include <stdio.h> /* sprintf(), fwrite() */ #include <s11n.net/s11n/vappendf.hpp> #ifdef __cplusplus This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |