Changeset 18340 for lang/c

Show
Ignore:
Timestamp:
08/27/08 22:02:39 (3 months ago)
Author:
frsyuki
Message:

lang/c/mpio: added mp::multiplex

Location:
lang/c/mpio/trunk/mp
Files:
7 added
6 modified

Legend:

Unmodified
Added
Removed
  • lang/c/mpio/trunk/mp/Makefile

    r18311 r18340  
    1212                  async.h async_impl.h \ 
    1313                  iothreads.h iothreads_impl.h \ 
     14                  multiplex.h multiplex_impl.h \ 
    1415                  zone.h zone_impl.h \ 
    1516                  serialize.h \ 
  • lang/c/mpio/trunk/mp/iothreads.pre.h

    r18311 r18340  
    2121 
    2222#include "mp/blocking_vector.h" 
     23#include "mp/pthread.h" 
    2324#include "mp/source.h" 
    2425#include "mp/zone.h" 
     
    2930namespace mp { 
    3031namespace iothreads { 
    31  
    32 template <typename IMPL> 
    33 class pthread_thread { 
    34 public: 
    35         pthread_thread(IMPL* pimpl); 
    36         virtual ~pthread_thread(); 
    37 private: 
    38         pthread_t m_thread; 
    39         static void* trampoline(void* obj); 
    40 private: 
    41         pthread_thread(); 
    42         pthread_thread(const pthread_thread&); 
    43 }; 
    44  
    45 template <typename IMPL> 
    46 pthread_thread<IMPL>::pthread_thread(IMPL* pimpl) 
    47 { 
    48         pthread_create(&m_thread, NULL, 
    49                         &pthread_thread<IMPL>::trampoline, 
    50                         reinterpret_cast<void*>(pimpl)); 
    51 } 
    52  
    53 template <typename IMPL> 
    54 pthread_thread<IMPL>::~pthread_thread() {}  // FIXME 
    55  
    56 template <typename IMPL> 
    57 void* pthread_thread<IMPL>::trampoline(void* obj) 
    58 { 
    59         // FIXME exception 
    60         reinterpret_cast<IMPL*>(obj)->operator()(); 
    61         return NULL; 
    62 } 
    6332 
    6433 
  • lang/c/mpio/trunk/mp/iothreads/listen.h

    r18311 r18340  
    3030 
    3131struct listener { 
    32         private: 
     32private: 
    3333        class listen_thread : public pthread_thread<listen_thread> { 
    3434        public: 
     
    4343                                        if(errno == EINTR || errno == EAGAIN) { continue; } 
    4444                                        // FIXME 
     45                                        throw std::runtime_error("socket broken"); 
     46                                } else if(sock == 0) { 
     47                                        // FIXME 
     48                                        throw std::runtime_error("socket broken"); 
    4549                                } 
    4650                                iothreads::submit(m_callback, m_obj, sock); 
     
    5660        }; 
    5761 
    58         public: 
     62public: 
    5963        template <typename T> 
    60         static void listen(int lsock, void (*callback)(T*, int fd), T* obj) 
     64        static void listen(int lsock, void (*callback)(void*, int fd), T* obj) 
    6165        { 
    6266                iothreads::manager::add_thread<listen_thread>(lsock, 
    63                                 reinterpret_cast<void (*)(void*,int)>(callback), 
    64                                 reinterpret_cast<void*>(obj)); 
     67                                callback, reinterpret_cast<void*>(obj)); 
    6568        } 
    6669 
    67         private: 
     70private: 
    6871        listener(); 
    6972}; 
     
    7174 
    7275template <typename T> 
    73 inline void listen(int lsock, void (*callback)(T*, int fd), T* obj) 
     76inline void listen(int lsock, void (*callback)(void*, int fd), T* obj) 
    7477{ 
    7578        listener::listen(lsock, callback, obj); 
  • lang/c/mpio/trunk/mp/iothreads/parallel_io.h

    r18311 r18340  
    3131                virtual ~handler(); 
    3232        public: 
    33                 virtual int read_event() = 0; 
    34                 virtual void unbind() = 0; 
     33                virtual void read_event() = 0; 
    3534                virtual void connected() {} 
    3635        public: 
     
    114113}; 
    115114 
     115typedef manager::handler handler; 
     116 
    116117template <typename Handler> 
    117118inline void add(int fd); 
     
    124125inline void send_data(int fd, char* buf, size_t len); 
    125126 
     127// FIXME interface 
    126128inline void send_message(int fd, callback_message* msg); 
    127129 
  • lang/c/mpio/trunk/mp/iothreads/timer.h

    r18311 r18340  
    2727 
    2828struct timer { 
    29         private: 
     29private: 
    3030        class timer_thread : public pthread_thread<timer_thread> { 
    3131        public: 
     
    5151        }; 
    5252 
    53         public: 
     53public: 
    5454        template <typename T> 
    5555        static void start(double interval_sec, void (*callback)(void*), T* obj) 
    5656        { 
    5757                iothreads::manager::add_thread<timer_thread>(interval_sec, 
    58                                 callback, 
    59                                 reinterpret_cast<void*>(obj)); 
     58                                callback, reinterpret_cast<void*>(obj)); 
    6059        } 
    6160}; 
  • lang/c/mpio/trunk/mp/pthread.h

    r18310 r18340  
    2323 
    2424namespace mp { 
     25 
     26 
     27template <typename IMPL> 
     28class pthread_thread { 
     29public: 
     30        pthread_thread(IMPL* pimpl); 
     31        virtual ~pthread_thread(); 
     32private: 
     33        pthread_t m_thread; 
     34        static void* trampoline(void* obj); 
     35private: 
     36        pthread_thread(); 
     37        pthread_thread(const pthread_thread&); 
     38}; 
     39 
     40 
     41template <typename IMPL> 
     42pthread_thread<IMPL>::pthread_thread(IMPL* pimpl) 
     43{ 
     44        pthread_create(&m_thread, NULL, 
     45                        &pthread_thread<IMPL>::trampoline, 
     46                        reinterpret_cast<void*>(pimpl)); 
     47} 
     48 
     49template <typename IMPL> 
     50pthread_thread<IMPL>::~pthread_thread() {}  // FIXME 
     51 
     52template <typename IMPL> 
     53void* pthread_thread<IMPL>::trampoline(void* obj) 
     54{ 
     55        // FIXME exception 
     56        reinterpret_cast<IMPL*>(obj)->operator()(); 
     57        return NULL; 
     58} 
    2559 
    2660