wvmagicloopback.cc

00001 /*
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 1997-2004 Net Integration Technologies, Inc.
00004  */
00005  
00006 #include "wvmagicloopback.h"
00007 
00008 WvMagicLoopback::WvMagicLoopback(size_t size)
00009     : circle(size), loop()
00010 {
00011 }
00012 
00013 
00014 bool WvMagicLoopback::pre_select(SelectInfo &si)
00015 {
00016     loop.drain();
00017 
00018     loop.pre_select(si);
00019 
00020     if (si.wants.readable)
00021     {
00022         if (circle.used() > 0)
00023             return true;
00024     }
00025     
00026     if (si.wants.writable)
00027     {   
00028         if (circle.left() > 0)
00029             return true;
00030     }
00031 
00032     return false;
00033 }  
00034 
00035 size_t WvMagicLoopback::uread(void *buf, size_t len)
00036 {
00037     return circle.get(buf, len);
00038 }
00039 
00040 
00041 size_t WvMagicLoopback::uwrite(const void *buf, size_t len)
00042 {
00043     len = circle.put(buf, len);
00044     
00045     if (len > 0)
00046         loop.uwrite("", 1); // Make select wake up
00047 
00048     return len;
00049 }

Generated on Fri Oct 5 18:20:28 2007 for WvStreams by  doxygen 1.5.3