#ifndef _KV_ARRAY_H_
#define _KV_ARRAY_H_

#include <unistd.h>
#include <stdbool.h>
#include <sys/syscall.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>
#include <mqueue.h>
#include <pthread.h>
#include <time.h>
#include <sys/select.h>
#include <signal.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <stdarg.h>
#include <arpa/inet.h>
#include <sys/mman.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <net/if.h>
#include <linux/sockios.h>
#include <linux/ethtool.h>
#include <libubox/utils.h>
#include <pthread.h>

#define DATA_DEPTH 100

typedef struct
{
    char *key;           ///<匹配字段
    bool compared;
    time_t timestamp;
    void *data;
    int len;
} data_info_t;

struct _data_table_t
{
    data_info_t *data_info;
    int size;
    int index;
    pthread_rwlock_t rw_lock;
};

typedef struct
{
    struct _data_table_t table;
    int (*insert)(void *this, char *key, void *data, int len);
    data_info_t* (*get)(void *this, char *key);
    void* (*getdata)(void *this, char *key);
    int (*delete)(void *this, char *key);
} kv_array_t;

void kv_array_init(kv_array_t *obj, int size);
#endif
