index_fst_automation.h 2.3 KB
Newer Older
dengyihao's avatar
dengyihao 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/*
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
 *
 * This program is free software: you can use, redistribute, and/or modify
 * it under the terms of the GNU Affero General Public License, version 3
 * or later ("AGPL"), as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
#ifndef __INDEX_FST_AUTAOMATION_H__
#define __INDEX_FST_AUTAOMATION_H__

dengyihao's avatar
dengyihao 已提交
18 19 20 21
#ifdef __cplusplus
extern "C" {
#endif

S
Shengliang Guan 已提交
22
#include "indexInt.h"
dengyihao's avatar
dengyihao 已提交
23
#include "index_fst_util.h"
dengyihao's avatar
dengyihao 已提交
24

dengyihao's avatar
dengyihao 已提交
25
typedef struct AutomationCtx AutomationCtx;
dengyihao's avatar
dengyihao 已提交
26

dengyihao's avatar
dengyihao 已提交
27
typedef enum AutomationType { AUTOMATION_ALWAYS, AUTOMATION_PREFIX, AUTMMATION_MATCH } AutomationType;
dengyihao's avatar
dengyihao 已提交
28

dengyihao's avatar
dengyihao 已提交
29
typedef struct StartWith {
dengyihao's avatar
dengyihao 已提交
30
  AutomationCtx* autoSelf;
dengyihao's avatar
dengyihao 已提交
31 32 33
} StartWith;

typedef struct Complement {
dengyihao's avatar
dengyihao 已提交
34
  AutomationCtx* autoSelf;
dengyihao's avatar
dengyihao 已提交
35 36
} Complement;

37
// automation
dengyihao's avatar
dengyihao 已提交
38
typedef struct AutomationCtx {
39
  AutomationType type;
dengyihao's avatar
dengyihao 已提交
40 41
  void*          stdata;
  char*          data;
dengyihao's avatar
dengyihao 已提交
42 43
} AutomationCtx;

44 45
typedef enum ValueType { FST_INT, FST_CHAR, FST_ARRAY } ValueType;
typedef enum StartWithStateKind { Done, Running } StartWithStateKind;
dengyihao's avatar
dengyihao 已提交
46 47 48

typedef struct StartWithStateValue {
  StartWithStateKind kind;
49
  ValueType          type;
dengyihao's avatar
dengyihao 已提交
50
  union {
51
    int     val;
dengyihao's avatar
dengyihao 已提交
52 53
    char*   ptr;
    SArray* arr;
dengyihao's avatar
dengyihao 已提交
54
    // add more type
55
  };
dengyihao's avatar
dengyihao 已提交
56 57
} StartWithStateValue;

dengyihao's avatar
dengyihao 已提交
58 59 60
StartWithStateValue* startWithStateValueCreate(StartWithStateKind kind, ValueType ty, void* val);
StartWithStateValue* startWithStateValueDump(StartWithStateValue* sv);
void                 startWithStateValueDestroy(void* sv);
dengyihao's avatar
dengyihao 已提交
61

dengyihao's avatar
dengyihao 已提交
62
typedef struct AutomationFunc {
dengyihao's avatar
dengyihao 已提交
63 64 65 66 67 68
  void* (*start)(AutomationCtx* ctx);
  bool (*isMatch)(AutomationCtx* ctx, void*);
  bool (*canMatch)(AutomationCtx* ctx, void* data);
  bool (*willAlwaysMatch)(AutomationCtx* ctx, void* state);
  void* (*accept)(AutomationCtx* ctx, void* state, uint8_t byte);
  void* (*acceptEof)(AutomationCtx* ct, void* state);
69
} AutomationFunc;
dengyihao's avatar
dengyihao 已提交
70

dengyihao's avatar
dengyihao 已提交
71 72
AutomationCtx* automCtxCreate(void* data, AutomationType atype);
void           automCtxDestroy(AutomationCtx* ctx);
dengyihao's avatar
dengyihao 已提交
73

74
extern AutomationFunc automFuncs[];
dengyihao's avatar
dengyihao 已提交
75 76 77
#ifdef __cplusplus
}
#endif
dengyihao's avatar
dengyihao 已提交
78 79

#endif