]> git.tdb.fi Git - libs/core.git/blob - source/io/console.cpp
Use size_t for sizes in I/O classes
[libs/core.git] / source / io / console.cpp
1 #include "console.h"
2
3 using namespace std;
4
5 namespace Msp {
6 namespace IO {
7
8 Console::Console(Stream s):
9         stream(s)
10 {
11         mode = (stream==CIN ? M_READ : M_WRITE);
12
13         platform_init();
14
15         if(stream==CIN)
16                 set_events(P_INPUT);
17 }
18
19 void Console::set_block(bool b)
20 {
21         adjust_mode(mode, M_NONBLOCK, !b);
22         sys_set_blocking(handle, b);
23 }
24
25 void Console::set_inherit(bool i)
26 {
27         adjust_mode(mode, M_INHERIT, i);
28         sys_set_inherit(handle, i);
29 }
30
31 size_t Console::do_write(const char *buf, size_t len)
32 {
33         check_access(M_WRITE);
34
35         return sys_write(handle, buf, len);
36 }
37
38 size_t Console::do_read(char *buf, size_t len)
39 {
40         check_access(M_READ);
41
42         size_t ret = sys_read(handle, buf, len);
43         if(ret==0)
44                 set_eof();
45
46         return ret;
47 }
48
49 const Handle &Console::get_handle(Mode m)
50 {
51         check_access(m);
52         return handle;
53 }
54
55 Console &Console::instance(Stream s)
56 {
57         static Console in(CIN);
58         static Console out(COUT);
59         static Console err(CERR);
60
61         switch(s)
62         {
63         case CIN: return in;
64         case COUT: return out;
65         case CERR: return err;
66         }
67
68         throw invalid_argument("Console::instance");
69 }
70
71 Console &cin = Console::instance(Console::CIN);
72 Console &cout = Console::instance(Console::COUT);
73 Console &cerr = Console::instance(Console::CERR);
74
75 } // namespace IO
76 } // namespace Msp