Use vector<Entry> instead of iterator_adaptor to hide implementation details

pull/40/head
Vitaliy Filippov 2015-05-17 14:32:04 +03:00
parent dabaaac38f
commit 717a6a4793
2 changed files with 17 additions and 46 deletions

View File

@ -39,12 +39,12 @@ Feed::Feed( )
Feed::iterator Feed::begin() const
{
return iterator( m_entries.begin() ) ;
return m_entries.begin() ;
}
Feed::iterator Feed::end() const
{
return iterator( m_entries.end() ) ;
return m_entries.end() ;
}
void Feed::Start( http::Agent *http, const std::string& url )
@ -60,8 +60,13 @@ void Feed::Start( http::Agent *http, const std::string& url )
http->Get( url, &log, http::Header() ) ;
m_root = xrsp.Response() ;
m_entries = m_root["entry"] ;
m_root = xrsp.Response() ;
xml::NodeSet xe = m_root["entry"] ;
m_entries.clear() ;
for ( xml::NodeSet::iterator i = xe.begin() ; i != xe.end() ; ++i )
{
m_entries.push_back( Entry1( *i ) );
}
}
bool Feed::GetNext( http::Agent *http )
@ -78,28 +83,12 @@ bool Feed::GetNext( http::Agent *http )
return false ;
}
Feed::iterator::iterator( )
{
}
Feed::iterator::iterator( xml::Node::iterator i )
{
// for some reason, gcc 4.4.4 doesn't allow me to initialize the base class
// in the initializer. I have no choice but to initialize here.
base_reference() = i ;
}
Feed::iterator::reference Feed::iterator::dereference() const
{
return Entry1( *base_reference() ) ;
}
void Feed::EnableLog( const std::string& prefix, const std::string& suffix )
{
m_log.reset( new LogInfo ) ;
m_log->prefix = prefix ;
m_log->suffix = suffix ;
m_log->sequence = 0 ;
m_log->prefix = prefix ;
m_log->suffix = suffix ;
m_log->sequence = 0 ;
}
} } // end of namespace gr::v1

View File

@ -24,7 +24,7 @@
#include "xml/Node.hh"
#include "xml/NodeSet.hh"
#include <boost/iterator_adaptors.hpp>
#include <vector>
#include <string>
@ -40,13 +40,13 @@ namespace v1 {
class Feed
{
public :
class iterator ;
typedef std::vector<Entry> Entries;
typedef std::vector<Entry>::const_iterator iterator;
public :
Feed( ) ;
void Start( http::Agent *http, const std::string& url ) ;
bool GetNext( http::Agent *http ) ;
iterator begin() const ;
iterator end() const ;
@ -61,25 +61,7 @@ private :
std::auto_ptr<LogInfo> m_log ;
xml::Node m_root ;
xml::NodeSet m_entries ;
Entries m_entries ;
} ;
class Feed::iterator : public boost::iterator_adaptor<
Feed::iterator,
xml::Node::iterator,
Entry,
boost::random_access_traversal_tag,
Entry
>
{
public :
iterator() ;
explicit iterator( xml::Node::iterator i ) ;
private :
friend class boost::iterator_core_access;
reference dereference() const ;
} ;
} } // end of namespace
} } // end of namespace gr::v1