foobar2000 SDK  2015-01-14
nix-objects.h
Go to the documentation of this file.
1 #include <sys/select.h>
2 #include <sys/time.h>
3 
4 namespace pfc {
5 
6  void nixFormatError( string_base & str, int code );
7 
8  class exception_nix : public std::exception {
9  public:
10  exception_nix();
11  exception_nix(int code);
12 
13  ~exception_nix() throw() { }
14 
15  int code() const throw() {return m_code;}
16  const char * what() const throw() {return m_msg.get_ptr();}
17  private:
18  void _init(int code);
19  int m_code;
21  };
22 
23  // Toggles non-blocking mode on a file descriptor.
24  void setNonBlocking( int fd, bool bNonBlocking = true );
25 
26  // Toggles close-on-exec mode on a file descriptor.
27  void setCloseOnExec( int fd, bool bCloseOnExec = true );
28 
29  // Toggles inheritable mode on a file descriptor. Reverse of close-on-exec.
30  void setInheritable( int fd, bool bInheritable = true );
31 
32  // Creates a pipe. The pipe is NOT inheritable by default (close-on-exec set).
33  void createPipe( int fd[2], bool bInheritable = false );
34 
35  timeval makeTimeVal( double seconds );
36  double importTimeval(const timeval & tv);
37 
38  class fdSet {
39  public:
40  fdSet() : m_nfds() {FD_ZERO( &m_set );}
41 
42  void operator+=( int fd );
43  void operator-=( int fd );
44  bool operator[] (int fd );
45  void clear();
46 
47  fd_set m_set;
48  int m_nfds;
49  };
50 
51 
52  bool fdCanRead( int fd );
53  bool fdCanWrite( int fd );
54 
55  bool fdWaitRead( int fd, double timeOutSeconds );
56  bool fdWaitWrite( int fd, double timeOutSeconds );
57 
58  class fdSelect {
59  public:
60 
61  int Select();
62  int Select( double timeOutSeconds );
63  int Select( timeval * tv );
64 
66  };
67 
68  void nixSleep(double seconds);
69 
70  class nix_event {
71  public:
72  nix_event();
73  ~nix_event();
74 
75  void set_state( bool state );
76 
77  bool is_set( ) {return wait_for(0); }
78 
79  bool wait_for( double p_timeout_seconds );
80 
81  static bool g_wait_for( int p_event, double p_timeout_seconds );
82 
83  int get_handle() const {return m_fd[0]; }
84 
85  // Two-wait event functions, return 0 on timeout, 1 on evt1 set, 2 on evt2 set
86  static int g_twoEventWait( nix_event & ev1, nix_event & ev2, double timeout );
87  static int g_twoEventWait( int h1, int h2, double timeOut );
88 
89  private:
90  nix_event(nix_event const&);
91  void operator=(nix_event const&);
92  int m_fd[2];
93  };
94 
95  double nixGetTime();
96 
97  bool nixReadSymLink( string_base & strOut, const char * path );
98  bool nixSelfProcessPath( string_base & strOut );
99 
100  void nixGetRandomData( void * outPtr, size_t outBytes );
101 
102 #ifdef __APPLE__ // implemented only thru NSEvent in Obj-C code
103  bool isShiftKeyPressed();
104  bool isCtrlKeyPressed();
105  bool isAltKeyPressed();
106 #endif
107 }
108 
109 void uSleepSeconds( double seconds, bool );
void _init(int code)
Definition: nix-objects.cpp:57
void setNonBlocking(int fd, bool bNonBlocking)
Definition: nix-objects.cpp:19
bool nixSelfProcessPath(string_base &strOut)
void setCloseOnExec(int fd, bool bCloseOnExec)
Definition: nix-objects.cpp:27
void set_state(bool state)
void operator=(nix_event const &)
void nixGetRandomData(void *outPtr, size_t outBytes)
bool isShiftKeyPressed()
Definition: obj-c.mm:32
void nixFormatError(string_base &str, int code)
Definition: nix-objects.cpp:13
bool isCtrlKeyPressed()
Definition: obj-c.mm:39
bool isAltKeyPressed()
Definition: obj-c.mm:46
void uSleepSeconds(double seconds, bool)
void clear()
Definition: nix-objects.cpp:83
bool nixReadSymLink(string_base &strOut, const char *path)
double nixGetTime()
void operator+=(int fd)
Definition: nix-objects.cpp:73
const char * get_ptr() const
Definition: string_base.h:381
bool fdWaitRead(int fd, double timeOutSeconds)
bool fdCanRead(int fd)
bool fdWaitWrite(int fd, double timeOutSeconds)
void operator-=(int fd)
Definition: nix-objects.cpp:77
static int g_twoEventWait(nix_event &ev1, nix_event &ev2, double timeout)
std::exception exception
Definition: primitives.h:193
fd_set m_set
Definition: nix-objects.h:47
bool fdCanWrite(int fd)
timeval makeTimeVal(double timeSeconds)
Definition: nix-objects.cpp:62
void createPipe(int fd[2], bool bInheritable)
Definition: nix-objects.cpp:39
int code() const
Definition: nix-objects.h:15
int get_handle() const
Definition: nix-objects.h:83
bool operator[](int fd)
Definition: nix-objects.cpp:80
void setInheritable(int fd, bool bInheritable)
Definition: nix-objects.cpp:35
const char * what() const
Definition: nix-objects.h:16
static bool g_wait_for(int p_event, double p_timeout_seconds)
void nixSleep(double seconds)
bool wait_for(double p_timeout_seconds)
double importTimeval(const timeval &in)
Definition: nix-objects.cpp:69