renamed qse_lda_t to qse_arr_t

This commit is contained in:
2016-09-23 14:53:51 +00:00
parent dfdc6ae045
commit 7f24950536
19 changed files with 1777 additions and 1777 deletions

View File

@ -2,6 +2,7 @@ pkgincludedir = $(includedir)/qse/cmn
pkginclude_HEADERS = \
alg.h \
arr.h \
chr.h \
cp949.h \
cp950.h \
@ -13,7 +14,6 @@ pkginclude_HEADERS = \
htb.h \
hton.h \
ipad.h \
lda.h \
main.h \
map.h \
mb8.h \

View File

@ -122,8 +122,8 @@ am__can_run_installinfo = \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__pkginclude_HEADERS_DIST = alg.h chr.h cp949.h cp950.h dll.h env.h \
fma.h fmt.h gdl.h htb.h hton.h ipad.h lda.h main.h map.h mb8.h \
am__pkginclude_HEADERS_DIST = alg.h arr.h chr.h cp949.h cp950.h dll.h \
env.h fma.h fmt.h gdl.h htb.h hton.h ipad.h main.h map.h mb8.h \
mbwc.h mem.h oht.h opt.h path.h pma.h rbt.h rex.h sll.h slmb.h \
str.h time.h tmr.h tre.h uni.h uri.h utf8.h xma.h Mmgr.hpp \
StdMmgr.hpp HeapMmgr.hpp Mmged.hpp ScopedPtr.hpp SharedPtr.hpp \
@ -355,8 +355,8 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
pkginclude_HEADERS = alg.h chr.h cp949.h cp950.h dll.h env.h fma.h \
fmt.h gdl.h htb.h hton.h ipad.h lda.h main.h map.h mb8.h \
pkginclude_HEADERS = alg.h arr.h chr.h cp949.h cp950.h dll.h env.h \
fma.h fmt.h gdl.h htb.h hton.h ipad.h main.h map.h mb8.h \
mbwc.h mem.h oht.h opt.h path.h pma.h rbt.h rex.h sll.h slmb.h \
str.h time.h tmr.h tre.h uni.h uri.h utf8.h xma.h \
$(am__append_1)

View File

@ -24,8 +24,8 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _QSE_CMN_LDA_H_
#define _QSE_CMN_LDA_H_
#ifndef _QSE_CMN_ARR_H_
#define _QSE_CMN_ARR_H_
#include <qse/types.h>
#include <qse/macros.h>
@ -35,60 +35,60 @@
* are added.
*/
enum qse_lda_walk_t
enum qse_arr_walk_t
{
QSE_LDA_WALK_STOP = 0,
QSE_LDA_WALK_FORWARD = 1,
QSE_LDA_WALK_BACKWARD = 2
QSE_ARR_WALK_STOP = 0,
QSE_ARR_WALK_FORWARD = 1,
QSE_ARR_WALK_BACKWARD = 2
};
typedef struct qse_lda_t qse_lda_t;
typedef struct qse_lda_slot_t qse_lda_slot_t;
typedef enum qse_lda_walk_t qse_lda_walk_t;
typedef struct qse_arr_t qse_arr_t;
typedef struct qse_arr_slot_t qse_arr_slot_t;
typedef enum qse_arr_walk_t qse_arr_walk_t;
#define QSE_LDA_COPIER_SIMPLE ((qse_lda_copier_t)1)
#define QSE_LDA_COPIER_INLINE ((qse_lda_copier_t)2)
#define QSE_ARR_COPIER_SIMPLE ((qse_arr_copier_t)1)
#define QSE_ARR_COPIER_INLINE ((qse_arr_copier_t)2)
#define QSE_LDA_NIL ((qse_size_t)-1)
#define QSE_ARR_NIL ((qse_size_t)-1)
#define QSE_LDA_SIZE(lda) (*(const qse_size_t*)&(lda)->size)
#define QSE_LDA_CAPA(lda) (*(const qse_size_t*)&(lda)->capa)
#define QSE_ARR_SIZE(arr) (*(const qse_size_t*)&(arr)->size)
#define QSE_ARR_CAPA(arr) (*(const qse_size_t*)&(arr)->capa)
#define QSE_LDA_SLOT(lda,index) ((lda)->slot[index])
#define QSE_LDA_DPTL(lda,index) ((const qse_xptl_t*)&(lda)->slot[index]->val)
#define QSE_LDA_DPTR(lda,index) ((lda)->slot[index]->val.ptr)
#define QSE_LDA_DLEN(lda,index) ((lda)->slot[index]->val.len)
#define QSE_ARR_SLOT(arr,index) ((arr)->slot[index])
#define QSE_ARR_DPTL(arr,index) ((const qse_xptl_t*)&(arr)->slot[index]->val)
#define QSE_ARR_DPTR(arr,index) ((arr)->slot[index]->val.ptr)
#define QSE_ARR_DLEN(arr,index) ((arr)->slot[index]->val.len)
/**
* The qse_lda_copier_t type defines a callback function for slot construction.
* The qse_arr_copier_t type defines a callback function for slot construction.
* A slot is contructed when a user adds data to an array. The user can
* define how the data to add can be maintained in the array. A dynamic
* array not specified with any copiers stores the data pointer and
* the data length into a slot. A special copier QSE_LDA_COPIER_INLINE copies
* the data length into a slot. A special copier QSE_ARR_COPIER_INLINE copies
* the contents of the data a user provided into the slot. You can use the
* qse_lda_setcopier() function to change the copier.
* qse_arr_setcopier() function to change the copier.
*
* A copier should return the pointer to the copied data. If it fails to copy
* data, it may return QSE_NULL. You need to set a proper freeer to free up
* memory allocated for copy.
*/
typedef void* (*qse_lda_copier_t) (
qse_lda_t* lda /**< array */,
typedef void* (*qse_arr_copier_t) (
qse_arr_t* arr /**< array */,
void* dptr /**< pointer to data to copy */,
qse_size_t dlen /**< length of data to copy */
);
/**
* The qse_lda_freeer_t type defines a slot destruction callback.
* The qse_arr_freeer_t type defines a slot destruction callback.
*/
typedef void (*qse_lda_freeer_t) (
qse_lda_t* lda /**< array */,
typedef void (*qse_arr_freeer_t) (
qse_arr_t* arr /**< array */,
void* dptr /**< pointer to data to free */,
qse_size_t dlen /**< length of data to free */
);
/**
* The qse_lda_comper_t type defines a key comparator that is called when
* The qse_arr_comper_t type defines a key comparator that is called when
* the arry needs to compare data. A linear dynamic array is created with a
* default comparator that performs bitwise comparison.
*
@ -97,8 +97,8 @@ typedef void (*qse_lda_freeer_t) (
* integer otherwise.
*
*/
typedef int (*qse_lda_comper_t) (
qse_lda_t* lda /* array */,
typedef int (*qse_arr_comper_t) (
qse_arr_t* arr /* array */,
const void* dptr1 /* data pointer */,
qse_size_t dlen1 /* data length */,
const void* dptr2 /* data pointer */,
@ -106,53 +106,53 @@ typedef int (*qse_lda_comper_t) (
);
/**
* The qse_lda_keeper_t type defines a value keeper that is called when
* The qse_arr_keeper_t type defines a value keeper that is called when
* a value is retained in the context that it should be destroyed because
* it is identical to a new value. Two values are identical if their beginning
* pointers and their lengths are equal.
*/
typedef void (*qse_lda_keeper_t) (
qse_lda_t* lda /**< array */,
typedef void (*qse_arr_keeper_t) (
qse_arr_t* arr /**< array */,
void* vptr /**< pointer to a value */,
qse_size_t vlen /**< length of a value */
);
/**
* The qse_lda_sizer_t type defines an array size claculator that is called
* The qse_arr_sizer_t type defines an array size claculator that is called
* when the array needs to be resized.
*/
typedef qse_size_t (*qse_lda_sizer_t) (
qse_lda_t* lda, /**< array */
typedef qse_size_t (*qse_arr_sizer_t) (
qse_arr_t* arr, /**< array */
qse_size_t hint /**< sizing hint */
);
typedef qse_lda_walk_t (*qse_lda_walker_t) (
qse_lda_t* lda /* array */,
typedef qse_arr_walk_t (*qse_arr_walker_t) (
qse_arr_t* arr /* array */,
qse_size_t index /* index to the visited slot */,
void* ctx /* user-defined context */
);
/**
* The qse_lda_t type defines a linear dynamic array.
* The qse_arr_t type defines a linear dynamic array.
*/
struct qse_lda_t
struct qse_arr_t
{
qse_mmgr_t* mmgr;
qse_lda_copier_t copier; /* data copier */
qse_lda_freeer_t freeer; /* data freeer */
qse_lda_comper_t comper; /* data comparator */
qse_lda_keeper_t keeper; /* data keeper */
qse_lda_sizer_t sizer; /* size calculator */
qse_arr_copier_t copier; /* data copier */
qse_arr_freeer_t freeer; /* data freeer */
qse_arr_comper_t comper; /* data comparator */
qse_arr_keeper_t keeper; /* data keeper */
qse_arr_sizer_t sizer; /* size calculator */
qse_byte_t scale; /* scale factor */
qse_size_t size; /* number of items */
qse_size_t capa; /* capacity */
qse_lda_slot_t** slot;
qse_arr_slot_t** slot;
};
/**
* The qse_lda_slot_t type defines a linear dynamic array slot
* The qse_arr_slot_t type defines a linear dynamic array slot
*/
struct qse_lda_slot_t
struct qse_arr_slot_t
{
qse_xptl_t val;
};
@ -162,270 +162,270 @@ extern "C" {
#endif
/**
* The qse_lda_open() function creates a linear dynamic array.
* The qse_arr_open() function creates a linear dynamic array.
*/
QSE_EXPORT qse_lda_t* qse_lda_open (
QSE_EXPORT qse_arr_t* qse_arr_open (
qse_mmgr_t* mmgr, /**< memory manager */
qse_size_t ext, /**< extension size in bytes */
qse_size_t capa /**< initial array capacity */
);
/**
* The qse_lda_close() function destroys a linear dynamic array.
* The qse_arr_close() function destroys a linear dynamic array.
*/
QSE_EXPORT void qse_lda_close (
qse_lda_t* lda /**< array */
QSE_EXPORT void qse_arr_close (
qse_arr_t* arr /**< array */
);
/**
* The qse_lda_init() function initializes a linear dynamic array.
* The qse_arr_init() function initializes a linear dynamic array.
*/
QSE_EXPORT int qse_lda_init (
qse_lda_t* lda,
QSE_EXPORT int qse_arr_init (
qse_arr_t* arr,
qse_mmgr_t* mmgr,
qse_size_t capa
);
/**
* The qse_lda_fini() function finalizes a linear dynamic array.
* The qse_arr_fini() function finalizes a linear dynamic array.
*/
QSE_EXPORT void qse_lda_fini (
qse_lda_t* lda /**< array */
QSE_EXPORT void qse_arr_fini (
qse_arr_t* arr /**< array */
);
QSE_EXPORT qse_mmgr_t* qse_lda_getmmgr (
qse_lda_t* lda
QSE_EXPORT qse_mmgr_t* qse_arr_getmmgr (
qse_arr_t* arr
);
QSE_EXPORT void* qse_lda_getxtn (
qse_lda_t* lda
QSE_EXPORT void* qse_arr_getxtn (
qse_arr_t* arr
);
/**
* The qse_lda_getscale() function returns the scale factor
* The qse_arr_getscale() function returns the scale factor
*/
QSE_EXPORT int qse_lda_getscale (
qse_lda_t* lda /**< array */
QSE_EXPORT int qse_arr_getscale (
qse_arr_t* arr /**< array */
);
/**
* The qse_lda_setscale() function sets the scale factor of the length
* The qse_arr_setscale() function sets the scale factor of the length
* of a key and a value. A scale factor determines the actual length of
* a key and a value in bytes. A lda is created with a scale factor of 1.
* a key and a value in bytes. A arr is created with a scale factor of 1.
* The scale factor should be larger than 0 and less than 256.
* It is a bad idea to change the scale factor when @a lda is not empty.
* It is a bad idea to change the scale factor when @a arr is not empty.
*/
QSE_EXPORT void qse_lda_setscale (
qse_lda_t* lda /**< array */,
QSE_EXPORT void qse_arr_setscale (
qse_arr_t* arr /**< array */,
int scale /**< scale factor */
);
QSE_EXPORT qse_lda_copier_t qse_lda_getcopier (
qse_lda_t* lda /* array */
QSE_EXPORT qse_arr_copier_t qse_arr_getcopier (
qse_arr_t* arr /* array */
);
/**
* The qse_lda_setcopier() specifies how to clone an element. The special
* copier #QSE_LDA_COPIER_INLINE copies the data inline to the internal slot.
* The qse_arr_setcopier() specifies how to clone an element. The special
* copier #QSE_ARR_COPIER_INLINE copies the data inline to the internal slot.
* No freeer is invoked when the slot is freeed. You may set the copier to
* #QSE_LDA_COPIER_SIMPLE to perform no special operation when the data
* #QSE_ARR_COPIER_SIMPLE to perform no special operation when the data
* pointer is stored.
*/
QSE_EXPORT void qse_lda_setcopier (
qse_lda_t* lda /** lda */,
qse_lda_copier_t copier /** element copier */
QSE_EXPORT void qse_arr_setcopier (
qse_arr_t* arr /** arr */,
qse_arr_copier_t copier /** element copier */
);
/**
* The qse_lda_getfreeer() function returns a custom element destroyer.
* The qse_arr_getfreeer() function returns a custom element destroyer.
*/
QSE_EXPORT qse_lda_freeer_t qse_lda_getfreeer (
qse_lda_t* lda /**< lda */
QSE_EXPORT qse_arr_freeer_t qse_arr_getfreeer (
qse_arr_t* arr /**< arr */
);
/**
* The qse_lda_setfreeer() function specifies how to destroy an element.
* The qse_arr_setfreeer() function specifies how to destroy an element.
* The @a freeer is called when a slot containing the element is destroyed.
*/
QSE_EXPORT void qse_lda_setfreeer (
qse_lda_t* lda /**< lda */,
qse_lda_freeer_t freeer /**< element freeer */
QSE_EXPORT void qse_arr_setfreeer (
qse_arr_t* arr /**< arr */,
qse_arr_freeer_t freeer /**< element freeer */
);
QSE_EXPORT qse_lda_comper_t qse_lda_getcomper (
qse_lda_t* lda /**< lda */
QSE_EXPORT qse_arr_comper_t qse_arr_getcomper (
qse_arr_t* arr /**< arr */
);
/**
* The qse_lda_setcomper() function specifies how to compare two elements
* The qse_arr_setcomper() function specifies how to compare two elements
* for equality test. The comparator @a comper must return 0 if two elements
* compared are equal, or a non-zero number otherwise.
*/
QSE_EXPORT void qse_lda_setcomper (
qse_lda_t* lda /**< lda */,
qse_lda_comper_t comper /**< comparator */
QSE_EXPORT void qse_arr_setcomper (
qse_arr_t* arr /**< arr */,
qse_arr_comper_t comper /**< comparator */
);
QSE_EXPORT qse_lda_keeper_t qse_lda_getkeeper (
qse_lda_t* lda
QSE_EXPORT qse_arr_keeper_t qse_arr_getkeeper (
qse_arr_t* arr
);
QSE_EXPORT void qse_lda_setkeeper (
qse_lda_t* lda,
qse_lda_keeper_t keeper
QSE_EXPORT void qse_arr_setkeeper (
qse_arr_t* arr,
qse_arr_keeper_t keeper
);
QSE_EXPORT qse_lda_sizer_t qse_lda_getsizer (
qse_lda_t* lda
QSE_EXPORT qse_arr_sizer_t qse_arr_getsizer (
qse_arr_t* arr
);
QSE_EXPORT void qse_lda_setsizer (
qse_lda_t* lda,
qse_lda_sizer_t sizer
QSE_EXPORT void qse_arr_setsizer (
qse_arr_t* arr,
qse_arr_sizer_t sizer
);
QSE_EXPORT qse_size_t qse_lda_getsize (
qse_lda_t* lda
QSE_EXPORT qse_size_t qse_arr_getsize (
qse_arr_t* arr
);
QSE_EXPORT qse_size_t qse_lda_getcapa (
qse_lda_t* lda
QSE_EXPORT qse_size_t qse_arr_getcapa (
qse_arr_t* arr
);
QSE_EXPORT qse_lda_t* qse_lda_setcapa (
qse_lda_t* lda,
QSE_EXPORT qse_arr_t* qse_arr_setcapa (
qse_arr_t* arr,
qse_size_t capa
);
QSE_EXPORT qse_size_t qse_lda_search (
qse_lda_t* lda,
QSE_EXPORT qse_size_t qse_arr_search (
qse_arr_t* arr,
qse_size_t pos,
const void* dptr,
qse_size_t dlen
);
QSE_EXPORT qse_size_t qse_lda_rsearch (
qse_lda_t* lda,
QSE_EXPORT qse_size_t qse_arr_rsearch (
qse_arr_t* arr,
qse_size_t pos,
const void* dptr,
qse_size_t dlen
);
QSE_EXPORT qse_size_t qse_lda_upsert (
qse_lda_t* lda,
QSE_EXPORT qse_size_t qse_arr_upsert (
qse_arr_t* arr,
qse_size_t index,
void* dptr,
qse_size_t dlen
);
QSE_EXPORT qse_size_t qse_lda_insert (
qse_lda_t* lda,
QSE_EXPORT qse_size_t qse_arr_insert (
qse_arr_t* arr,
qse_size_t index,
void* dptr,
qse_size_t dlen
);
QSE_EXPORT qse_size_t qse_lda_update (
qse_lda_t* lda,
QSE_EXPORT qse_size_t qse_arr_update (
qse_arr_t* arr,
qse_size_t pos,
void* dptr,
qse_size_t dlen
);
/**
* The qse_lda_delete() function deletes the as many data as the count
* The qse_arr_delete() function deletes the as many data as the count
* from the index. It returns the number of data deleted.
*/
QSE_EXPORT qse_size_t qse_lda_delete (
qse_lda_t* lda,
QSE_EXPORT qse_size_t qse_arr_delete (
qse_arr_t* arr,
qse_size_t index,
qse_size_t count
);
/**
* The qse_lda_uplete() function deletes data slot without compaction.
* The qse_arr_uplete() function deletes data slot without compaction.
* It returns the number of data affected.
*/
QSE_EXPORT qse_size_t qse_lda_uplete (
qse_lda_t* lda,
QSE_EXPORT qse_size_t qse_arr_uplete (
qse_arr_t* arr,
qse_size_t index,
qse_size_t count
);
QSE_EXPORT void qse_lda_clear (
qse_lda_t* lda
QSE_EXPORT void qse_arr_clear (
qse_arr_t* arr
);
/**
* The qse_lda_walk() function calls the @a walker function for each
* The qse_arr_walk() function calls the @a walker function for each
* element in the array beginning from the first. The @a walker function
* should return one of #QSE_LDA_WALK_FORWARD, #QSE_LDA_WALK_BACKWARD,
* #QSE_LDA_WALK_STOP.
* should return one of #QSE_ARR_WALK_FORWARD, #QSE_ARR_WALK_BACKWARD,
* #QSE_ARR_WALK_STOP.
* @return number of calls to the @a walker fucntion made
*/
QSE_EXPORT qse_size_t qse_lda_walk (
qse_lda_t* lda,
qse_lda_walker_t walker,
QSE_EXPORT qse_size_t qse_arr_walk (
qse_arr_t* arr,
qse_arr_walker_t walker,
void* ctx
);
/**
* The qse_lda_rwalk() function calls the @a walker function for each
* The qse_arr_rwalk() function calls the @a walker function for each
* element in the array beginning from the last. The @a walker function
* should return one of #QSE_LDA_WALK_FORWARD, #QSE_LDA_WALK_BACKWARD,
* #QSE_LDA_WALK_STOP.
* should return one of #QSE_ARR_WALK_FORWARD, #QSE_ARR_WALK_BACKWARD,
* #QSE_ARR_WALK_STOP.
* @return number of calls to the @a walker fucntion made
*/
QSE_EXPORT qse_size_t qse_lda_rwalk (
qse_lda_t* lda,
qse_lda_walker_t walker,
QSE_EXPORT qse_size_t qse_arr_rwalk (
qse_arr_t* arr,
qse_arr_walker_t walker,
void* ctx
);
/**
* The qse_lda_pushstack() function appends data to the array. It is a utility
* The qse_arr_pushstack() function appends data to the array. It is a utility
* function to allow stack-like operations over an array. To do so, you should
* not play with other non-stack related functions.
*/
QSE_EXPORT qse_size_t qse_lda_pushstack (
qse_lda_t* lda,
QSE_EXPORT qse_size_t qse_arr_pushstack (
qse_arr_t* arr,
void* dptr,
qse_size_t dlen
);
/**
* The qse_lda_popstack() function deletes the last array data. It is a utility
* The qse_arr_popstack() function deletes the last array data. It is a utility
* function to allow stack-like operations over an array. To do so, you should
* not play with other non-stack related functions.
* @note You must not call this function if @a lda is empty.
* @note You must not call this function if @a arr is empty.
*/
QSE_EXPORT void qse_lda_popstack (
qse_lda_t* lda
QSE_EXPORT void qse_arr_popstack (
qse_arr_t* arr
);
/**
* The qse_lda_pushheap() function inserts data to an array while keeping the
* The qse_arr_pushheap() function inserts data to an array while keeping the
* largest data at position 0. It is a utiltiy funtion to implement a binary
* max-heap over an array. Inverse the comparator to implement a min-heap.
* @return number of array elements
* @note You must not mess up the array with other non-heap related functions
* to keep the heap property.
*/
QSE_EXPORT qse_size_t qse_lda_pushheap (
qse_lda_t* lda,
QSE_EXPORT qse_size_t qse_arr_pushheap (
qse_arr_t* arr,
void* dptr,
qse_size_t dlen
);
/**
* The qse_lda_popheap() function deletes data at position 0 while keeping
* The qse_arr_popheap() function deletes data at position 0 while keeping
* the largest data at positon 0. It is a utiltiy funtion to implement a binary
* max-heap over an array.
* @note You must not mess up the array with other non-heap related functions
* to keep the heap property.
*/
QSE_EXPORT void qse_lda_popheap (
qse_lda_t* lda
QSE_EXPORT void qse_arr_popheap (
qse_arr_t* arr
);
#if defined(__cplusplus)