30 #ifndef _UCOMMON_PROTOCOLS_H_
31 #define _UCOMMON_PROTOCOLS_H_
33 #ifndef _UCOMMON_CPR_H_
41 class __EXPORT MemoryProtocol
44 friend class MemoryRedirect;
52 virtual void *_alloc(
size_t size) = 0;
55 virtual ~MemoryProtocol();
62 inline void *alloc(
size_t size)
63 {
return _alloc(size);};
72 void *zalloc(
size_t size);
80 char *
dup(
const char *
string);
88 void *
dup(
void *memory,
size_t size);
99 MemoryProtocol *target;
104 virtual void *_alloc(
size_t size);
117 virtual void _lock(
void);
118 virtual void _unlock(
void);
136 virtual int _getch(
void) = 0;
143 virtual int _putch(
int code) = 0;
160 inline int put(
int code)
161 {
return _putch(code);};
175 typedef enum {BUF_RD, BUF_WR, BUF_RDWR} type_t;
180 char *input, *output;
181 size_t bufsize, bufpos, insize, outsize;
211 inline void seteol(
const char *
string)
220 void allocate(
size_t size, type_t
access = BUF_RDWR);
234 char *request(
size_t size);
242 char *gather(
size_t size);
251 virtual size_t _push(
const char *address,
size_t size) = 0;
260 virtual size_t _pull(
char *address,
size_t size) = 0;
266 virtual int _err(
void)
const = 0;
271 virtual void _clear(
void) = 0;
276 virtual bool _blocking(
void);
281 virtual bool _pending(
void);
286 virtual bool _flush(
void);
293 inline size_t unread(
void)
300 inline size_t unsaved(
void)
311 size_t get(
char *address,
size_t count);
321 size_t put(
const char *address,
size_t count = 0);
341 size_t printf(
const char *format, ...) __PRINTF(2, 3);
347 inline
bool flush(
void)
370 size_t getline(
char *
string,
size_t size);
381 size_t getline(
string& buffer);
389 size_t putline(
const char *
string);
401 inline operator bool()
402 {
return buffer != NULL;}
408 inline bool operator!()
409 {
return buffer == NULL;}
415 inline bool is_open(
void)
416 {
return buffer != NULL;}
422 inline bool is_input(
void)
423 {
return input != NULL;}
429 inline bool is_output(
void)
430 {
return output != NULL;}
436 inline bool is_pending(
void)
442 inline void seteof(
void)