added quite some code to handle byte string I/O

This commit is contained in:
2019-04-21 05:44:53 +00:00
parent 07be5e22d7
commit eed3853765
18 changed files with 342 additions and 330 deletions

View File

@ -386,6 +386,7 @@ public:
virtual int close (Pipe& io) = 0;
virtual ssize_t read (Pipe& io, char_t* buf, size_t len) = 0;
virtual ssize_t write (Pipe& io, const char_t* buf, size_t len) = 0;
virtual ssize_t writeBytes (Pipe& io, const qse_mchar_t* buf, size_t len) = 0;
virtual int flush (Pipe& io) = 0;
};
@ -430,6 +431,7 @@ public:
virtual int close (File& io) = 0;
virtual ssize_t read (File& io, char_t* buf, size_t len) = 0;
virtual ssize_t write (File& io, const char_t* buf, size_t len) = 0;
virtual ssize_t writeBytes (File& io, const qse_mchar_t* buf, size_t len) = 0;
virtual int flush (File& io) = 0;
};
@ -493,6 +495,8 @@ public:
/// for failure.
virtual ssize_t write (Console& io, const char_t* buf, size_t len) = 0;
virtual ssize_t writeBytes (Console& io, const qse_mchar_t* buf, size_t len) = 0;
/// You may choose to buffer the data passed to the write()
/// function and perform actual writing when flush() is called.
/// It must return 0 for success and -1 for failure.
@ -1282,6 +1286,7 @@ protected:
virtual ssize_t readPipe (Pipe& io, char_t* buf, size_t len);
virtual ssize_t writePipe (Pipe& io, const char_t* buf, size_t len);
virtual ssize_t writePipeBytes (Pipe& io, const qse_mchar_t* buf, size_t len);
virtual int flushPipe (Pipe& io);
/// \}
@ -1295,6 +1300,7 @@ protected:
virtual int closeFile (File& io);
virtual ssize_t readFile (File& io, char_t* buf, size_t len);
virtual ssize_t writeFile (File& io, const char_t* buf, size_t len);
virtual ssize_t writeFileBytes (File& io, const qse_mchar_t* buf, size_t len);
virtual int flushFile (File& io);
/// \}
@ -1308,6 +1314,7 @@ protected:
virtual int closeConsole (Console& io);
virtual ssize_t readConsole (Console& io, char_t* buf, size_t len);
virtual ssize_t writeConsole (Console& io, const char_t* buf, size_t len);
virtual ssize_t writeConsoleBytes (Console& io, const qse_mchar_t* buf, size_t len);
virtual int flushConsole (Console& io);
virtual int nextConsole (Console& io);
/// \}
@ -1330,13 +1337,13 @@ protected:
static ssize_t pipeHandler (
rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod,
char_t* data, size_t count);
void* data, size_t count);
static ssize_t fileHandler (
rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod,
char_t* data, size_t count);
void* data, size_t count);
static ssize_t consoleHandler (
rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod,
char_t* data, size_t count);
void* data, size_t count);
static int functionHandler (rtx_t* rtx, const fnc_info_t* fi);

View File

@ -133,6 +133,7 @@ protected:
int closePipe (Pipe& io);
ssize_t readPipe (Pipe& io, char_t* buf, size_t len);
ssize_t writePipe (Pipe& io, const char_t* buf, size_t len);
ssize_t writePipeBytes (Pipe& io, const qse_mchar_t* buf, size_t len);
int flushPipe (Pipe& io);
// file io handlers
@ -140,6 +141,7 @@ protected:
int closeFile (File& io);
ssize_t readFile (File& io, char_t* buf, size_t len);
ssize_t writeFile (File& io, const char_t* buf, size_t len);
ssize_t writeFileBytes (File& io, const qse_mchar_t* buf, size_t len);
int flushFile (File& io);
// console io handlers
@ -147,6 +149,7 @@ protected:
int closeConsole (Console& io);
ssize_t readConsole (Console& io, char_t* buf, size_t len);
ssize_t writeConsole (Console& io, const char_t* buf, size_t len);
ssize_t writeConsoleBytes (Console& io, const qse_mchar_t* buf, size_t len);
int flushConsole (Console& io);
int nextConsole (Console& io);

View File

@ -586,13 +586,15 @@ typedef qse_ssize_t (*qse_awk_sio_impl_t) (
*/
enum qse_awk_rio_cmd_t
{
QSE_AWK_RIO_OPEN = 0, /**< open a stream */
QSE_AWK_RIO_CLOSE = 1, /**< close a stream */
QSE_AWK_RIO_READ = 2, /**< read a stream */
QSE_AWK_RIO_WRITE = 3, /**< write to a stream */
QSE_AWK_RIO_FLUSH = 4, /**< flush buffered data to a stream */
QSE_AWK_RIO_NEXT = 5 /**< close the current stream and
open the next stream (only for console) */
QSE_AWK_RIO_OPEN = 0, /**< open a stream */
QSE_AWK_RIO_CLOSE = 1, /**< close a stream */
QSE_AWK_RIO_READ = 2, /**< read a stream */
QSE_AWK_RIO_WRITE = 3, /**< write to a stream */
/*QSE_AWK_RIO_READ_BYTES = 4,*/
QSE_AWK_RIO_WRITE_BYTES = 5,
QSE_AWK_RIO_FLUSH = 6, /**< flush buffered data to a stream */
QSE_AWK_RIO_NEXT = 7 /**< close the current stream and
open the next stream (only for console) */
};
typedef enum qse_awk_rio_cmd_t qse_awk_rio_cmd_t;
@ -644,7 +646,7 @@ struct qse_awk_rio_arg_t
/* read-write. a user handler can do whatever it likes to do with these. */
void* handle; /**< I/O handle set by a handler */
int uflags; /**< flags set by a handler */
int uflags; /**< user-flags set by a handler */
/*-- from here down, internal use only --*/
int type;
@ -676,7 +678,7 @@ typedef qse_ssize_t (*qse_awk_rio_impl_t) (
qse_awk_rtx_t* rtx,
qse_awk_rio_cmd_t cmd,
qse_awk_rio_arg_t* arg,
qse_char_t* data,
void* data,
qse_size_t count
);

View File

@ -214,6 +214,12 @@ QSE_EXPORT qse_ssize_t qse_nwio_write (
qse_size_t size
);
QSE_EXPORT qse_ssize_t qse_nwio_writebytes (
qse_nwio_t* nwio,
const void* data,
qse_size_t size
);
#if defined(__cplusplus)
}
#endif

View File

@ -365,6 +365,13 @@ QSE_EXPORT qse_ssize_t qse_pio_write (
qse_size_t size /**< data size */
);
QSE_EXPORT qse_ssize_t qse_pio_writebytes (
qse_pio_t* pio, /**< pio object */
qse_pio_hid_t hid, /**< handle ID */
const void* data, /**< data to write */
qse_size_t size /**< data size */
);
/**
* The qse_pio_flush() flushes buffered data if #QSE_PIO_TEXT has been
* specified to qse_pio_open() and qse_pio_init().