41 lines
954 B
C
41 lines
954 B
C
|
#ifndef LST_H
|
|||
|
#define LST_H 1
|
|||
|
|
|||
|
/*
|
|||
|
Line Search Table
|
|||
|
线段搜索表
|
|||
|
*/
|
|||
|
|
|||
|
#include <types.h>
|
|||
|
|
|||
|
typedef struct __lst_line_t
|
|||
|
{
|
|||
|
usize left, right;
|
|||
|
} lst_line_t;
|
|||
|
|
|||
|
typedef struct __lst_iterator_t
|
|||
|
{
|
|||
|
lst_line_t line;
|
|||
|
struct __lst_iterator_t *next;
|
|||
|
} lst_iterator_t;
|
|||
|
|
|||
|
lst_iterator_t *lst_new(usize start, usize end);
|
|||
|
|
|||
|
lst_iterator_t *lst_next(lst_iterator_t *iterator);
|
|||
|
|
|||
|
/*
|
|||
|
在`lst`中移除一个线段[left,right)
|
|||
|
force=true时忽略不存在于`lst`中的线段
|
|||
|
force=false时若有不存在于`lst`中的线段,不移除任何线段,返回false,否则返回true
|
|||
|
*/
|
|||
|
bool lst_remove(lst_iterator_t *lst, usize left, usize right, bool force);
|
|||
|
|
|||
|
/*
|
|||
|
在`lst`中添加一个线段[left,right)
|
|||
|
force=true时忽略已经存在于`lst`中的线段
|
|||
|
force=false时若有存在于`lst`中的线段,只添加这些部分之外的线段,返回false,否则返回true
|
|||
|
*/
|
|||
|
bool lst_add(lst_iterator_t *lst, usize left, usize right, bool force);
|
|||
|
|
|||
|
#endif
|