WvStreams
|
00001 /* -*- Mode: C++ -*- 00002 * Worldvisions Weaver Software: 00003 * Copyright (C) 1997-2002 Net Integration Technologies, Inc. 00004 * 00005 * A circular queue that can be accessed across fork(). 00006 */ 00007 #ifndef __WVMAGICCIRCLE_H 00008 #define __WVMAGICCIRCLE_H 00009 00010 #include "wvshmzone.h" 00011 00012 00014 class WvMagicCircle : public WvErrorBase 00015 { 00016 public: 00022 WvMagicCircle(size_t size); 00023 ~WvMagicCircle(); 00024 00025 protected: 00026 WvShmZone shm; 00027 00028 volatile int &head, &tail; 00029 int size; 00030 char *circle; 00031 00032 public: 00033 size_t used(); 00034 size_t left() 00035 { return size - used() - 1; } 00036 size_t put(const void *data, size_t len); 00037 size_t get(void *data, size_t len); 00038 size_t skip(size_t len); 00039 00040 public: 00041 const char *wstype() const { return "WvMagicCircle"; } 00042 }; 00043 00044 00045 #endif // __WVMAGICCIRCLE_H