Files
2022-12-13 12:44:04 +01:00

88 lines
1.9 KiB
C++

//-----------------------------------------------------------------------------
// Copyright (c) 1994,1995 Southeastern Universities Research Association,
// Continuous Electron Beam Accelerator Facility
//
// This software was developed under a United States Government license
// described in the NOTICE file included as part of this distribution.
//
//-----------------------------------------------------------------------------
//
// Description:
// File Descriptor Mask Class (Based On ACE Handler_Set)
#ifndef _CDEV_HANDLE_SET_H_
#define _CDEV_HANDLE_SET_H_
#include <stdio.h>
#include <string.h>
#include "cdevPlatforms.h"
class CDEV_REACTOR_API cdevHandleSet
{
friend class cdevHandleSetIterator;
friend class cdevReactor;
public:
cdevHandleSet (void);
cdevHandleSet (const fd_set &mask);
void reset (void);
int is_set (int) const;
void set_bit (int);
void clr_bit (int);
int num_set (void) const;
int max_set (void) const;
int asciiDump (FILE * fp = stdout);
void sync (int max = FD_SETSIZE);
operator fd_set *( void ) { return &mask_; }
private:
int size_;
int max_handle_;
fd_set mask_;
enum {
#ifdef _WIN32
MAX_SIZE = FD_SETSIZE,
#else
MAX_SIZE = NOFILE,
WORD_SIZE = NFDBITS,
NUM_WORDS = howmany (NOFILE, NFDBITS),
#ifdef __DECCXX
MSB_MASK = ~(1U << (NFDBITS - 1))
#elif defined(CDEV_HAS_64BIT_LONGS)
MSB_MASK = ~(1UL << (NFDBITS - 1))
#else
MSB_MASK = ~(1 << (NFDBITS - 1))
#endif
#endif
};
int count_bits (unsigned long n) const;
void set_max (int max);
static const char nbits_[256];
};
class CDEV_REACTOR_API cdevHandleSetIterator
{
public:
cdevHandleSetIterator (cdevHandleSet &);
int operator ()(void);
void operator++ (void);
private:
cdevHandleSet &fds_;
int num_;
#ifdef _WIN32
unsigned int index_;
#else
int index_;
fd_mask val_;
#endif
};
#endif /* _CDEV_HANDLE_SET_H_ */