Boost logo

Boost-Commit :

From: lists.drrngrvy_at_[hidden]
Date: 2007-08-20 21:18:50


Author: drrngrvy
Date: 2007-08-20 21:18:48 EDT (Mon, 20 Aug 2007)
New Revision: 38813
URL: http://svn.boost.org/trac/boost/changeset/38813

Log:
Local conflicts should be resolved now.
Text files modified:
   sandbox/SOC/2007/cgi/boost/cgi/basic_request_acceptor.hpp | 47 +++---------------
   sandbox/SOC/2007/cgi/boost/cgi/io_service.hpp | 2
   sandbox/SOC/2007/cgi/boost/cgi/io_service_provider.hpp | 102 ++++++++++++++++++++++++++++++---------
   sandbox/SOC/2007/cgi/boost/cgi/io_service_provider_fwd.hpp | 4 +
   sandbox/SOC/2007/cgi/boost/cgi/request_acceptor_service.hpp | 30 +++++++++--
   sandbox/SOC/2007/cgi/boost/cgi/scgi.hpp | 14 +++++
   sandbox/SOC/2007/cgi/boost/cgi/tags.hpp | 4 +
   7 files changed, 132 insertions(+), 71 deletions(-)

Modified: sandbox/SOC/2007/cgi/boost/cgi/basic_request_acceptor.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/boost/cgi/basic_request_acceptor.hpp (original)
+++ sandbox/SOC/2007/cgi/boost/cgi/basic_request_acceptor.hpp 2007-08-20 21:18:48 EDT (Mon, 20 Aug 2007)
@@ -12,15 +12,15 @@
 #include <boost/noncopyable.hpp>
 #include <boost/system/error_code.hpp>
 
-#include "basic_io_object.hpp"
-#include "is_async.hpp"
+#include <boost/asio/basic_io_object.hpp>
+#include "detail/throw_error.hpp"
 
 namespace cgi {
 
   template<typename RequestAcceptorService>
   class basic_request_acceptor
     : private boost::noncopyable
- , public basic_io_object<RequestAcceptorService, is_async<RequestAcceptorService::protocol_type>::value>
+ , public boost::asio::basic_io_object<RequestAcceptorService>
   {
   public:
     // typedef impl_type;
@@ -28,66 +28,35 @@
     typedef service_type::protocol_type protocol_type;
 
     explicit basic_request_acceptor(basic_protocol_service<protocol_type>& s)
- : boost::asio::use_service<RequestAcceptorService>(s.io_service())
+ : boost::asio::basic_io_object<RequestAcceptorService>(s.io_service())
     {
     }
 
     ~basic_request_acceptor()
     {
- this->service.cancel();
     }
 
     template<typename CommonGatewayRequest>
     void accept(CommonGatewayRequest& request)
     {
       boost::system::error_code ec;
- this->service.accept(request, ec);
- boost::throw_error(ec);
+ this->service.accept(this->implementation, request, ec);
+ detail::throw_error(ec);
     }
 
     template<typename CommonGatewayRequest> boost::system::error_code&
     accept(CommonGatewayRequest& request, boost::system::error_code& ec)
     {
- return this->service.accept(request, ec);
+ return this->service.accept(this->implementation, request, ec);
     }
 
     template<typename CommonGatewayRequest, typename Handler>
     void async_accept(CommonGatewayRequest& request, Handler handler)
     {
- this->service.async_accept(request, handler);
+ this->service.async_accept(this->implementation, request, handler);
     }
-
- private:
- service_type& service_;
   };
 
-
-
- /*
- /// Specialisation for the CGI protocol
- template<>
- class basic_acceptor<protocol::cgi>
- : private boost::noncopyable
- {
- public:
- /// Accept a connection
- /*
- * For CGI, the connection is just a std::cin/cout wrapper, so is always
- * connected
-
- void accept() { }
-
- /// Asynchronously accept a connection
- /*
- * Ask the service to asynchronously accept a connection. When one is accepted
- * the handler is invoked (in a thread calling basic_service<>::run() ?).
-
- template<typename Handler>
- void async_accept(Handler handler)
- {
- handler();
- }
- */
 } // namespace cgi
 
 #endif // CGI_BASIC_REQUEST_ACCEPTOR_HPP_INCLUDED__

Modified: sandbox/SOC/2007/cgi/boost/cgi/io_service.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/boost/cgi/io_service.hpp (original)
+++ sandbox/SOC/2007/cgi/boost/cgi/io_service.hpp 2007-08-20 21:18:48 EDT (Mon, 20 Aug 2007)
@@ -13,7 +13,7 @@
 
 namespace cgi {
 
- using boost::asio::io_service;
+ typedef boost::asio::io_service io_service;
 
 } // namespace cgi
 

Modified: sandbox/SOC/2007/cgi/boost/cgi/io_service_provider.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/boost/cgi/io_service_provider.hpp (original)
+++ sandbox/SOC/2007/cgi/boost/cgi/io_service_provider.hpp 2007-08-20 21:18:48 EDT (Mon, 20 Aug 2007)
@@ -9,18 +9,19 @@
 #ifndef CGI_IO_SERVICE_PROVIDER_HPP_INCLUDED__
 #define CGI_IO_SERVICE_PROVIDER_HPP_INCLUDED__
 
-
-#include "detail/push_options.hpp"
-
+#include <list>
 #include <boost/ref.hpp>
 #include <boost/bind.hpp>
 #include <boost/thread.hpp>
 #include <boost/shared_ptr.hpp>
 #include <boost/noncopyable.hpp>
-#include <boost/asio/io_service.hpp>
+//#include <boost/asio/io_service.hpp>
 //#include <boost/asio/strand.hpp>
 
 #include "tags.hpp"
+#include "io_service.hpp"
+#include "detail/push_options.hpp"
+
 
 namespace cgi {
 
@@ -39,37 +40,91 @@
    * each call to io_service() can get an io_service, call io_service::run() on
    * it and then return it.
    */
- template<int IoServiceCount, typename Policy = tags::round_robin>
+ template<typename PoolingPolicy>
   class io_service_provider
     : private boost::noncopyable
   {
   public:
     io_service_provider(int)
- // : pos_(0)
- // , io_services_()
- // , strand_(io_services_[0])
+ : io_service_()
     {
     }
 
- // void run()
- //{
- // boost::shared_ptr<boost:thread>
- // thread(boost::bind(
- //}
+ io_service_provider()
+ : io_service_()
+ {
+ }
 
- // NOT THREAD-SAFE (but should be)
- //boost::asio::io_service& io_service()
- //{
- // return io_services_[pos_++];
- //}
+ cgi::io_service& io_service()
+ {
+ return io_service_;
+ }
+
+ void run()
+ {
+ io_service_.run();
+ }
+
+ void stop()
+ {
+ io_service_.stop();
+ }
+
+ void reset()
+ {
+ io_service_.reset();
+ }
   private:
- //int pos_;
- //boost::asio::io_service io_services_[IoServiceCount];
- //boost::asio::io_service::work works_[IoServiceCount];
- //boost::asio::io_service::strand strand_;
+ cgi::io_service io_service_;
   };
 
 
+ /*
+ template<>
+ class io_service_provider<tags::service_pool>
+ {
+ public:
+ typedef std::list<cgi::io_service> impl_type;
+
+ io_service_provider(int pool_size)
+ : io_services_(pool_size)
+ , current_(io_services_.begin())
+ {
+ }
+
+ cgi::io_service& io_service()
+ {
+ return boost::ref(*current_++);
+ }
+
+ void run()
+ {
+ std::for_each(io_services_.begin(), io_services_.end()
+ , boost::bind(&cgi::io_service::run, boost::ref(_1)));
+ }
+
+ void stop()
+ {
+ std::for_each(io_services_.begin(), io_services_.end()
+ , boost::bind(&cgi::io_service::stop, boost::ref(_1)));
+ }
+
+ void reset()
+ {
+ std::for_each(io_services_.begin(), io_services_.end()
+ , boost::bind(&cgi::io_service::reset, boost::ref(_1)));
+ }
+
+ impl_type& impl()
+ {
+ return io_services_;
+ }
+
+ private:
+ impl_type io_services_;
+ impl_type::iterator current_;
+ };
+ */
 
   /// Specialization for multi-queue/single-io_service strategy
   /**
@@ -112,7 +167,7 @@
   };
 ********************************/
 
-
+ /*
   /// Specialization for io_service-per-queue strategy
   template<typename Policy>
   class io_service_provider<1, Policy>//tags::>
@@ -209,6 +264,7 @@
 
     //boost::asio::io_service::strand strand_;
   };
+ */
 
 } // namespace cgi
 

Modified: sandbox/SOC/2007/cgi/boost/cgi/io_service_provider_fwd.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/boost/cgi/io_service_provider_fwd.hpp (original)
+++ sandbox/SOC/2007/cgi/boost/cgi/io_service_provider_fwd.hpp 2007-08-20 21:18:48 EDT (Mon, 20 Aug 2007)
@@ -9,9 +9,11 @@
 #ifndef CGI_IO_SERVICE_PROVIDER_FWD_HPP_INCLUDED__
 #define CGI_IO_SERVICE_PROVIDER_FWD_HPP_INCLUDED__
 
+#include "tags.hpp"
+
 namespace cgi {
 
- template<int, typename>
+ template<typename = tags::single_service>
   class io_service_provider;
 
 } // namespace cgi

Modified: sandbox/SOC/2007/cgi/boost/cgi/request_acceptor_service.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/boost/cgi/request_acceptor_service.hpp (original)
+++ sandbox/SOC/2007/cgi/boost/cgi/request_acceptor_service.hpp 2007-08-20 21:18:48 EDT (Mon, 20 Aug 2007)
@@ -9,17 +9,24 @@
 #ifndef CGI_REQUEST_ACCEPTOR_SERVICE_HPP_INCLUDED
 #define CGI_REQUEST_ACCEPTOR_SERVICE_HPP_INCLUDED
 
+#include "detail/throw_error.hpp"
+#include "detail/protocol_traits.hpp"
+#include "detail/service_base.hpp"
+
 namespace cgi {
 
   template<typename Protocol>
   class request_acceptor_service
+ : public detail::service_base<request_acceptor_service<Protocol> >
   {
+ typedef detail::protocol_traits<Protocol>::acceptor_service_impl
+ service_impl_type;
   public:
+ typedef typename service_impl_type::impl_type implementation_type;
     typedef Protocol protocol_type;
- typedef basic_request<Protocol, ...> implementation_type;
 
- explicit request_acceptor_service(basic_protocol_service<protocol_type>& s)
- : pservice_(s)
+ request_acceptor_service(basic_protocol_service<protocol_type>& s)
+ : detail::service_base<request_acceptor_service<Protocol>(s.io_service())
     {
     }
 
@@ -29,10 +36,12 @@
 
     void construct(implementation_type& impl)
     {
+ service_impl_.construct(impl);
     }
 
     void destroy(implementation_type& impl)
     {
+ service_impl_.destroy(impl);
     }
 
     /// Accept a request
@@ -42,8 +51,11 @@
      */
     template<typename CommonGatewayRequest>
     boost::system::error_code&
- accept(CommonGatewayRequest& request, boost::system::error_code& ec)
+ accept(implementation_type& impl, CommonGatewayRequest& request
+ , boost::system::error_code& ec)
     {
+ return service_impl_.accept(impl, request, ec);
+ /*
       boost::thread::mutex::scoped_lock lk(io_service_.mutex_);
       if( !io_service_.request_queue_.empty() )
       {
@@ -56,12 +68,16 @@
       pservice_.gateway_.accept(&request.connection(), ec);
             
       return ec;
+ */
     }
 
     /// Asynchronously accept a request
     template<typename CommonGatewayRequest, typename Handler>
- void async_accept(CommonGatewayRequest& request, Handler handler)
+ void async_accept(implementation_type& impl, CommonGatewayRequest& request
+ , Handler handler)
     {
+ service_impl_.async_accept(impl, request, handler);
+ /*
       boost::thread::mutex::scoped_lock lk(io_service_.mutex_);
       if( !io_service_.request_queue_.empty() )
       {
@@ -72,10 +88,12 @@
       }
       lk.unlock();
       pservice_.gateway_.async_accept(request.connection(), handler);
+ */
     }
 
   private:
- basic_protocol_service<protocol_type>& pservice_;
+ service_impl_type& service_impl_;
+ // basic_protocol_service<protocol_type>& pservice_;
   };
 
 } // namespace cgi

Modified: sandbox/SOC/2007/cgi/boost/cgi/scgi.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/boost/cgi/scgi.hpp (original)
+++ sandbox/SOC/2007/cgi/boost/cgi/scgi.hpp 2007-08-20 21:18:48 EDT (Mon, 20 Aug 2007)
@@ -10,5 +10,19 @@
 #define CGI_SCGI_HPP_INCLUDED__
 
 // #include all scgi-related headers only
+#include "scgi/service.hpp"
+#include "scgi/request_service.hpp"
+#include "scgi/request_acceptor_service.hpp"
+#include "detail/common_headers.hpp"
+
+namespace cgi {
+
+ typedef basic_request_acceptor<scgi_request_acceptor_service> scgi_acceptor;
+
+# ifndef CGI_NO_IMPLICIT_TYPEDEFS
+ typedef scgi_acceptor acceptor;
+# endif
+
+} // namespace cgi
 
 #endif // CGI_SCGI_HPP_INCLUDED__

Modified: sandbox/SOC/2007/cgi/boost/cgi/tags.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/boost/cgi/tags.hpp (original)
+++ sandbox/SOC/2007/cgi/boost/cgi/tags.hpp 2007-08-20 21:18:48 EDT (Mon, 20 Aug 2007)
@@ -22,7 +22,9 @@
    struct fcgi {};
    struct scgi {};
 
- // IoServiceProvider Policy types
+ // IoServiceProvider PoolingPolicy types
+ struct single_service {};
+ struct service_pool {};
    struct round_robin {};
 
    // Connection types


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk