LCUI 3.0 开发日志

2021年06月20日  ·  1679 字  ·  阅读

简介

3.0 版本计划将 LCUI 重构为一个由多个基础库组成的库,每个基础库具备风格统一、耦合度低、易于编译安装等特性。

此文章内容有待继续完善。

libevent

事件库,提供事件循环和事件订阅发布功能。

参考对象:

  • https://github.com/enki/libev
  • https://github.com/ithewei/libhv
  • https://vuejs.org/v2/api/index.html#Instance-Methods-Events

接口设计:

typedef struct event_emitter_t event_emitter_t;
typedef void(event_handler_t)(event_t*);

typedef int event_type_t;
typedef struct event_t event_t;
typedef struct event_listener_t event_listener_t;
typedef struct event_loop_t event_loop_t;

void event_emitter_on(event_emitter_t *emitter, event_type_t type, event_listener_t *listener);
void event_emitter_off(event_emitter_t *emitter, event_type_t type, event_handler_t *handler);
void event_emitter_emit(event_emitter_t *emitter, event_t *e);

void event_loop_new(event_loop_t **loop);
void event_loop_free(event_loop_t **loop);
void event_loop_run(event_loop_t *loop);
void event_loop_stop(event_loop_t *loop);
int event_loop_wait(event_loop_t *loop, unsigned int ms);

void event_loop_post_event(event_loop_t *loop, event_t *ev);
void event_loop_process_events(event_loop_t *loop);

创建事件循环:

void example(void)
{
    event_loop_t *loop;

    event_loop_new(&loop);
    event_loop_run(loop);
    event_loop_free(&loop);
}

自定义事件循环:

void example(void)
{
    event_loop_t *loop;

    event_loop_new(&loop);
    while (event_loop_running(loop)) {
        if (event_loop_wait(loop)) {
            event_loop_process_events(loop);
            // do something...
        }
    }
    event_loop_free(&loop);
}

问题:

  • 事件解绑接口如何设计?

libtest

单元测试库。

源码来自 test 目录中现有的 libtest.c。

参考对象:

  • https://mochajs.org/

接口设计:

void descrite(const char *text, void (*func)());

// test (int)
void test_i(const char *name, int actual, int expected);

// test (bool)
void test_b(const char *name, int actual, int expected);

// test (string)
void test_s(const char *name, const char *actual, const char *expected);

int print_test_result(void);

libcss

CSS 解析库。

文章版权归作者所有,未经许可不得转载。

问题反馈

对此文章有疑问?你可以点击 这里 反馈