added qse_awk_rtx_isnilval().

enhanced the qse_awk_sio_t core functions so that the implementaion can set the stream name
added export specifiers to some functions
This commit is contained in:
2012-11-29 14:03:59 +00:00
parent 2f96252ddd
commit 7dd9e67cd8
36 changed files with 889 additions and 792 deletions

View File

@ -205,32 +205,44 @@ public:
public:
Mode getMode() const
{
return mode;
return this->mode;
}
int getFlags () const
{
return arg->flags;
}
const char_t* getName() const
{
return arg->name;
return this->arg->name;
}
// since it doesn't copy the contents,
// it should point to something that outlives this object.
void setName (const char_t* name)
{
this->arg->name = name;
}
void* getHandle () const
{
return arg->handle;
return this->arg->handle;
}
void setHandle (void* handle)
{
arg->handle = handle;
this->arg->handle = handle;
}
operator Awk* () const
{
return awk;
return this->awk;
}
operator awk_t* () const
{
return awk->awk;
return this->awk->awk;
}
protected:

View File

@ -499,11 +499,39 @@ struct qse_awk_sio_lxc_t
};
typedef struct qse_awk_sio_lxc_t qse_awk_sio_lxc_t;
enum qse_awk_sio_arg_flag_t
{
QSE_AWK_SIO_INCLUDED = (1 << 0)
};
typedef struct qse_awk_sio_arg_t qse_awk_sio_arg_t;
struct qse_awk_sio_arg_t
{
const qse_char_t* name; /**< [IN] name of I/O object */
void* handle; /**< [OUT] I/O handle set by a handler */
/**
* [IN] bitwise-ORed of #qse_awk_sio_arg_flag_t.
* The field is set with #QSE_AWK_SIO_INCLUDED if an included file
* is handled.
*/
int flags;
/**
* [IN/OUT] name of I/O object.
* if #QSE_AWK_SIO_INCLUDED is not set, the name is set to #QSE_NULL.
* the source stream handler(#qse_awk_sio_impl_t) can change this field
* to give useful information back to the parser.
*
* if #QSE_AWK_SIO_INCLUDED is set in the flags field,
* the name field is set to the name of the included file.
*/
const qse_char_t* name;
/**
* [OUT] I/O handle set by a handler.
* The source stream handler can set this field when it opens a stream.
* All subsequent operations on the stream see this field as set
* during opening.
*/
void* handle;
/*-- from here down, internal use only --*/
struct
@ -1378,21 +1406,6 @@ typedef struct qse_awk_nrflt_t qse_awk_nrflt_t;
extern "C" {
#endif
/** represents a nil value */
QSE_EXPORT extern qse_awk_val_t* qse_awk_val_nil;
/** represents an empty string */
QSE_EXPORT extern qse_awk_val_t* qse_awk_val_zls;
/** represents a numeric value -1 */
QSE_EXPORT extern qse_awk_val_t* qse_awk_val_negone;
/** represents a numeric value 0 */
QSE_EXPORT extern qse_awk_val_t* qse_awk_val_zero;
/** represents a numeric value 1 */
QSE_EXPORT extern qse_awk_val_t* qse_awk_val_one;
/**
* The qse_awk_open() function creates a new qse_awk_t object. The object
* created can be passed to other qse_awk_xxx() functions and is valid until
@ -2190,7 +2203,16 @@ QSE_EXPORT int qse_awk_rtx_setrec (
);
/**
* The qse_awk_rtx_makenilval() function create a nil value.
* The qse_awk_rtx_isnilval(0 function determines if a value
* is a nil value.
*/
QSE_EXPORT int qse_awk_rtx_isnilval (
qse_awk_rtx_t* rtx,
qse_awk_val_t* val
);
/**
* The qse_awk_rtx_makenilval() function creates a nil value.
* It always returns the pointer to the statically allocated
* nil value. So it never fails.
*/

View File

@ -90,7 +90,7 @@ extern "C" {
* }
* @endcode
*/
void* qse_bsearch (
QSE_EXPORT void* qse_bsearch (
const void* key,
const void* base,
qse_size_t nmemb,
@ -102,7 +102,7 @@ void* qse_bsearch (
/**
* The qse_lsearch() function performs linear search over an array.
*/
void* qse_lsearch (
QSE_EXPORT void* qse_lsearch (
const void* key,
const void* base,
qse_size_t nmemb,
@ -115,7 +115,7 @@ void* qse_lsearch (
/**
* The qse_qsort() function performs quick-sorting over an array.
*/
void qse_qsort (
QSE_EXPORT void qse_qsort (
void* base,
qse_size_t nmemb,
qse_size_t size,
@ -128,7 +128,7 @@ void qse_qsort (
* The qse_rand31() function implements Park-Miller's minimal standard
* 32 bit pseudo-random number generator.
*/
qse_uint32_t qse_rand31 (
QSE_EXPORT qse_uint32_t qse_rand31 (
qse_uint32_t seed
);
@ -138,7 +138,7 @@ qse_uint32_t qse_rand31 (
* The qse_randxs32() function implements the xorshift random number generator
* by George Marsaglia.
*/
qse_uint32_t qse_randxs32 (
QSE_EXPORT qse_uint32_t qse_randxs32 (
qse_uint32_t seed
);
#endif
@ -148,7 +148,7 @@ qse_uint32_t qse_randxs32 (
* The qse_randxs64() function implements the xorshift random number generator
* by George Marsaglia.
*/
qse_uint64_t qse_randxs64 (
QSE_EXPORT qse_uint64_t qse_randxs64 (
qse_uint64_t seed
);
#endif
@ -169,8 +169,7 @@ qse_uint64_t qse_randxs64 (
# error Unsupported
#endif
qse_size_t qse_enbase64 (
QSE_EXPORT qse_size_t qse_enbase64 (
const void* in,
qse_size_t isz,
qse_mchar_t* out,
@ -178,7 +177,7 @@ qse_size_t qse_enbase64 (
qse_size_t* xsz
);
qse_size_t qse_debase64 (
QSE_EXPORT qse_size_t qse_debase64 (
const qse_mchar_t* in,
qse_size_t isz,
void* out,

View File

@ -166,43 +166,43 @@ typedef qse_ctype_t qse_wctype_t;
extern "C" {
#endif
int qse_ismctype (
QSE_EXPORT int qse_ismctype (
qse_mcint_t c,
qse_mctype_t type
);
int qse_iswctype (
QSE_EXPORT int qse_iswctype (
qse_wcint_t c,
qse_wctype_t type
);
qse_mcint_t qse_tomctype (
QSE_EXPORT qse_mcint_t qse_tomctype (
qse_mcint_t c,
qse_mctype_t type
);
qse_wcint_t qse_towctype (
QSE_EXPORT qse_wcint_t qse_towctype (
qse_wcint_t c,
qse_wctype_t type
);
int qse_mbstoctype (
QSE_EXPORT int qse_mbstoctype (
const qse_mchar_t* name,
qse_mctype_t* id
);
int qse_mbsntoctype (
QSE_EXPORT int qse_mbsntoctype (
const qse_mchar_t* name,
qse_size_t len,
qse_mctype_t* id
);
int qse_wcstoctype (
QSE_EXPORT int qse_wcstoctype (
const qse_wchar_t* name,
qse_wctype_t* id
);
int qse_wcsntoctype (
QSE_EXPORT int qse_wcsntoctype (
const qse_wchar_t* name,
qse_size_t len,
qse_wctype_t* id

View File

@ -52,7 +52,7 @@ extern "C" {
* This function doesn't check invalid unicode code points and performs
* conversion compuationally.
*/
qse_size_t qse_uctocp949 (
QSE_EXPORT qse_size_t qse_uctocp949 (
qse_wchar_t uc,
qse_mchar_t* cp949,
qse_size_t size
@ -66,7 +66,7 @@ qse_size_t qse_uctocp949 (
* not complete.
* - An integer between 1 and size inclusive is returned in all other cases.
*/
qse_size_t qse_cp949touc (
QSE_EXPORT qse_size_t qse_cp949touc (
const qse_mchar_t* cp949,
qse_size_t size,
qse_wchar_t* uc
@ -82,7 +82,7 @@ qse_size_t qse_cp949touc (
* not complete.
* - An integer between 1 and size inclusive is returned in all other cases.
*/
qse_size_t qse_cp949len (
QSE_EXPORT qse_size_t qse_cp949len (
const qse_mchar_t* cp949,
qse_size_t size
);
@ -92,7 +92,7 @@ qse_size_t qse_cp949len (
* to form a single unicode character. Use #QSE_CP949LEN_MAX if you need a
* compile-time constant.
*/
qse_size_t qse_cp949lenmax (
QSE_EXPORT qse_size_t qse_cp949lenmax (
void
);

View File

@ -52,7 +52,7 @@ extern "C" {
* This function doesn't check invalid unicode code points and performs
* conversion compuationally.
*/
qse_size_t qse_uctocp950 (
QSE_EXPORT qse_size_t qse_uctocp950 (
qse_wchar_t uc,
qse_mchar_t* cp950,
qse_size_t size
@ -66,7 +66,7 @@ qse_size_t qse_uctocp950 (
* not complete.
* - An integer between 1 and size inclusive is returned in all other cases.
*/
qse_size_t qse_cp950touc (
QSE_EXPORT qse_size_t qse_cp950touc (
const qse_mchar_t* cp950,
qse_size_t size,
qse_wchar_t* uc
@ -82,7 +82,7 @@ qse_size_t qse_cp950touc (
* not complete.
* - An integer between 1 and size inclusive is returned in all other cases.
*/
qse_size_t qse_cp950len (
QSE_EXPORT qse_size_t qse_cp950len (
const qse_mchar_t* cp950,
qse_size_t size
);
@ -92,7 +92,7 @@ qse_size_t qse_cp950len (
* to form a single unicode character. Use #QSE_CP950LEN_MAX if you need a
* compile-time constant.
*/
qse_size_t qse_cp950lenmax (
QSE_EXPORT qse_size_t qse_cp950lenmax (
void
);

View File

@ -72,31 +72,31 @@ struct qse_dir_ent_t
extern "C" {
#endif
qse_dir_t* qse_dir_open (
QSE_EXPORT qse_dir_t* qse_dir_open (
qse_mmgr_t* mmgr,
qse_size_t xtnsize,
const qse_char_t* path,
int flags
);
void qse_dir_close (
QSE_EXPORT void qse_dir_close (
qse_dir_t* dir
);
qse_mmgr_t* qse_dir_getmmgr (
QSE_EXPORT qse_mmgr_t* qse_dir_getmmgr (
qse_dir_t* dir
);
void* qse_dir_getxtn (
QSE_EXPORT void* qse_dir_getxtn (
qse_dir_t* dir
);
int qse_dir_reset (
QSE_EXPORT int qse_dir_reset (
qse_dir_t* dir,
const qse_char_t* path
);
int qse_dir_read (
QSE_EXPORT int qse_dir_read (
qse_dir_t* dir,
qse_dir_ent_t* ent
);

View File

@ -50,7 +50,7 @@ typedef struct qse_env_t qse_env_t;
struct qse_env_t
{
QSE_DEFINE_COMMON_FIELDS(env)
qse_mmgr_t* mmgr;
struct
{
@ -72,37 +72,43 @@ struct qse_env_t
extern "C" {
#endif
QSE_DEFINE_COMMON_FUNCTIONS(env)
qse_env_t* qse_env_open (
QSE_EXPORT qse_env_t* qse_env_open (
qse_mmgr_t* mmgr,
qse_size_t xtnsize,
int fromcurenv
);
void qse_env_close (
QSE_EXPORT void qse_env_close (
qse_env_t* env
);
int qse_env_init (
QSE_EXPORT int qse_env_init (
qse_env_t* env,
qse_mmgr_t* mmgr,
int fromcurenv
);
void qse_env_fini (
QSE_EXPORT void qse_env_fini (
qse_env_t* env
);
void qse_env_clear (
QSE_EXPORT qse_mmgr_t* qse_env_getmmgr (
qse_env_t* env
);
const qse_env_char_t* qse_env_getstr (
QSE_EXPORT void* qse_env_getxtn (
qse_env_t* env
);
qse_env_char_t** qse_env_getarr (
QSE_EXPORT void qse_env_clear (
qse_env_t* env
);
QSE_EXPORT const qse_env_char_t* qse_env_getstr (
qse_env_t* env
);
QSE_EXPORT qse_env_char_t** qse_env_getarr (
qse_env_t* env
);
@ -113,36 +119,36 @@ qse_env_char_t** qse_env_getarr (
*
* @return 0 on success, -1 on failure
*/
int qse_env_insertwcs (
QSE_EXPORT int qse_env_insertwcs (
qse_env_t* env,
const qse_wchar_t* name,
const qse_wchar_t* value
);
int qse_env_insertwcsa (
QSE_EXPORT int qse_env_insertwcsa (
qse_env_t* env,
const qse_wchar_t* name,
const qse_wchar_t* value[]
);
int qse_env_insertmbs (
QSE_EXPORT int qse_env_insertmbs (
qse_env_t* env,
const qse_mchar_t* name,
const qse_mchar_t* value
);
int qse_env_insertmbsa (
QSE_EXPORT int qse_env_insertmbsa (
qse_env_t* env,
const qse_mchar_t* name,
const qse_mchar_t* value[]
);
int qse_env_deletewcs (
QSE_EXPORT int qse_env_deletewcs (
qse_env_t* env,
const qse_wchar_t* name
);
int qse_env_deletembs (
QSE_EXPORT int qse_env_deletembs (
qse_env_t* env,
const qse_mchar_t* name
);

View File

@ -141,7 +141,7 @@ typedef struct qse_fio_lck_t qse_fio_lck_t;
struct qse_fio_t
{
QSE_DEFINE_COMMON_FIELDS (fio)
qse_mmgr_t* mmgr;
qse_fio_errnum_t errnum;
qse_fio_hnd_t handle;
int status;
@ -161,8 +161,6 @@ struct qse_fio_lck_t
extern "C" {
#endif
QSE_DEFINE_COMMON_FUNCTIONS (fio)
/**
* The qse_fio_open() function opens a file.
* To open a file, you should set the flags with at least one of
@ -178,7 +176,7 @@ QSE_DEFINE_COMMON_FUNCTIONS (fio)
* returns. So, you must not pass a constant string to the @a path
* parameter when #QSE_FIO_TEMPORARY is set.
*/
qse_fio_t* qse_fio_open (
QSE_EXPORT qse_fio_t* qse_fio_open (
qse_mmgr_t* mmgr,
qse_size_t ext,
const qse_char_t* path,
@ -189,14 +187,14 @@ qse_fio_t* qse_fio_open (
/**
* The qse_fio_close() function closes a file.
*/
void qse_fio_close (
QSE_EXPORT void qse_fio_close (
qse_fio_t* fio
);
/**
* The qse_fio_close() function opens a file into @a fio.
*/
int qse_fio_init (
QSE_EXPORT int qse_fio_init (
qse_fio_t* fio,
qse_mmgr_t* mmgr,
const qse_char_t* path,
@ -208,29 +206,37 @@ int qse_fio_init (
* The qse_fio_close() function finalizes a file by closing the handle
* stored in @a fio.
*/
void qse_fio_fini (
QSE_EXPORT void qse_fio_fini (
qse_fio_t* fio
);
qse_fio_errnum_t qse_fio_geterrnum (
QSE_EXPORT qse_mmgr_t* qse_fio_getmmgr (
qse_fio_t* fio
);
QSE_EXPORT void* qse_fio_getxtn (
qse_fio_t* fio
);
QSE_EXPORT qse_fio_errnum_t qse_fio_geterrnum (
const qse_fio_t* fio
);
/**
* The qse_fio_gethandle() function returns the native file handle.
*/
qse_fio_hnd_t qse_fio_gethandle (
QSE_EXPORT qse_fio_hnd_t qse_fio_gethandle (
const qse_fio_t* fio
);
qse_ubi_t qse_fio_gethandleasubi (
QSE_EXPORT qse_ubi_t qse_fio_gethandleasubi (
const qse_fio_t* fio
);
/**
* The qse_fio_seek() function changes the current file position.
*/
qse_fio_off_t qse_fio_seek (
QSE_EXPORT qse_fio_off_t qse_fio_seek (
qse_fio_t* fio,
qse_fio_off_t offset,
qse_fio_ori_t origin
@ -239,7 +245,7 @@ qse_fio_off_t qse_fio_seek (
/**
* The qse_fio_truncate() function truncates a file to @a size.
*/
int qse_fio_truncate (
QSE_EXPORT int qse_fio_truncate (
qse_fio_t* fio,
qse_fio_off_t size
);
@ -247,7 +253,7 @@ int qse_fio_truncate (
/**
* The qse_fio_read() function reads data.
*/
qse_ssize_t qse_fio_read (
QSE_EXPORT qse_ssize_t qse_fio_read (
qse_fio_t* fio,
void* buf,
qse_size_t size
@ -256,7 +262,7 @@ qse_ssize_t qse_fio_read (
/**
* The qse_fio_write() function writes data.
*/
qse_ssize_t qse_fio_write (
QSE_EXPORT qse_ssize_t qse_fio_write (
qse_fio_t* fio,
const void* data,
qse_size_t size
@ -271,7 +277,7 @@ qse_ssize_t qse_fio_write (
* - The file size is 0.
* - The file is opened without #QSE_FIO_READ.
*/
int qse_fio_chmod (
QSE_EXPORT int qse_fio_chmod (
qse_fio_t* fio,
int mode
);
@ -281,26 +287,25 @@ int qse_fio_chmod (
* It is useful in determining the media error, without which qse_fio_close()
* may succeed despite such an error.
*/
int qse_fio_sync (
QSE_EXPORT int qse_fio_sync (
qse_fio_t* fio
);
/* TODO: qse_fio_lock, qse_fio_unlock */
int qse_fio_lock (
QSE_EXPORT int qse_fio_lock (
qse_fio_t* fio,
qse_fio_lck_t* lck,
int flags
);
int qse_fio_unlock (
QSE_EXPORT int qse_fio_unlock (
qse_fio_t* fio,
qse_fio_lck_t* lck,
int flags
);
int qse_getstdfiohandle (
QSE_EXPORT int qse_getstdfiohandle (
qse_fio_std_t std,
qse_fio_hnd_t* hnd
);

View File

@ -59,12 +59,6 @@
extern "C" {
#endif
/**
* The qse_mmgr global variable holds a pointer to the default memory
* manager. Use QSE_MMGR_GETDFL() and QSE_MMGR_SETDFL() to manipulate it.
*/
extern qse_mmgr_t* qse_mmgr;
/**
* The qse_memcpy() functions copies @a n bytes from the source memory block
* @a src to the destinaion memory block @a dst. The memory blocks must not

View File

@ -81,7 +81,7 @@ typedef struct qse_xma_blk_t qse_xma_blk_t;
struct qse_xma_t
{
QSE_DEFINE_COMMON_FIELDS (xma)
qse_mmgr_t* mmgr;
/** pointer to the first memory block */
qse_xma_blk_t* head;
@ -118,8 +118,6 @@ typedef int (*qse_xma_dumper_t) (
extern "C" {
#endif
QSE_DEFINE_COMMON_FUNCTIONS (xma)
/**
* The qse_xma_open() function creates a memory allocator. It obtains a memory
* zone of the @a zonesize bytes with the memory manager @a mmgr. It also makes
@ -128,7 +126,7 @@ QSE_DEFINE_COMMON_FUNCTIONS (xma)
*
* @return pointer to a memory allocator on success, #QSE_NULL on failure
*/
qse_xma_t* qse_xma_open (
QSE_EXPORT qse_xma_t* qse_xma_open (
qse_mmgr_t* mmgr, /**< memory manager */
qse_size_t xtnsize, /**< extension size in bytes */
qse_size_t zonesize /**< zone size in bytes */
@ -140,10 +138,18 @@ qse_xma_t* qse_xma_open (
* the zone. Call this function to destroy a memory allocator created with
* qse_xma_open().
*/
void qse_xma_close (
QSE_EXPORT void qse_xma_close (
qse_xma_t* xma /**< memory allocator */
);
QSE_EXPORT qse_mmgr_t* qse_xma_getmmgr (
qse_xma_t* xma
);
QSE_EXPORT void* qse_xma_getxtn (
qse_xma_t* xma
);
/**
* The qse_xma_init() initializes a memory allocator. If you have the qse_xma_t
* structure statically declared or already allocated, you may pass the pointer
@ -152,7 +158,7 @@ void qse_xma_close (
* it does not accept the extension size, thus not creating an extention area.
* @return 0 on success, -1 on failure
*/
int qse_xma_init (
QSE_EXPORT int qse_xma_init (
qse_xma_t* xma, /**< memory allocator */
qse_mmgr_t* mmgr, /**< memory manager */
qse_size_t zonesize /**< zone size in bytes */
@ -162,7 +168,7 @@ int qse_xma_init (
* The qse_xma_fini() function finalizes a memory allocator. Call this
* function to finalize a memory allocator initialized with qse_xma_init().
*/
void qse_xma_fini (
QSE_EXPORT void qse_xma_fini (
qse_xma_t* xma /**< memory allocator */
);
@ -170,12 +176,12 @@ void qse_xma_fini (
* The qse_xma_alloc() function allocates @a size bytes.
* @return pointer to a memory block on success, #QSE_NULL on failure
*/
void* qse_xma_alloc (
QSE_EXPORT void* qse_xma_alloc (
qse_xma_t* xma, /**< memory allocator */
qse_size_t size /**< size in bytes */
);
void* qse_xma_calloc (
QSE_EXPORT void* qse_xma_calloc (
qse_xma_t* xma,
qse_size_t size
);
@ -184,7 +190,7 @@ void* qse_xma_calloc (
* The qse_xma_alloc() function resizes the memory block @a b to @a size bytes.
* @return pointer to a resized memory block on success, #QSE_NULL on failure
*/
void* qse_xma_realloc (
QSE_EXPORT void* qse_xma_realloc (
qse_xma_t* xma, /**< memory allocator */
void* b, /**< memory block */
qse_size_t size /**< new size in bytes */
@ -193,7 +199,7 @@ void* qse_xma_realloc (
/**
* The qse_xma_alloc() function frees the memory block @a b.
*/
void qse_xma_free (
QSE_EXPORT void qse_xma_free (
qse_xma_t* xma, /**< memory allocator */
void* b /**< memory block */
);
@ -203,7 +209,7 @@ void qse_xma_free (
* with the output function @a dumper provided. The debug build shows
* more statistical counters.
*/
void qse_xma_dump (
QSE_EXPORT void qse_xma_dump (
qse_xma_t* xma, /**< memory allocator */
qse_xma_dumper_t dumper, /**< output function */
void* ctx /**< first parameter to output function */

View File

@ -69,6 +69,10 @@
# define QSE_EXPORT __attribute__((visibility("default")))
# define QSE_PRIVATE __attribute__((visibility("hidden")))
/*# define QSE_PRIVATE __attribute__((visibility("internal")))*/
#elif defined(__WATCOMC__)
# define QSE_IMPORT __declspec(dllimport)
# define QSE_EXPORT __declspec(dllexport)
# define QSE_PRIVATE
#else
# define QSE_IMPORT
# define QSE_EXPORT