indexFstRegex.c 1.7 KB
Newer Older
dengyihao's avatar
add UT  
dengyihao 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/*
 * 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/>.
 */

dengyihao's avatar
dengyihao 已提交
16
#include "indexFstRegex.h"
dengyihao's avatar
dengyihao 已提交
17
#include "indexFstDfa.h"
dengyihao's avatar
dengyihao 已提交
18
#include "indexFstSparse.h"
dengyihao's avatar
dengyihao 已提交
19

dengyihao's avatar
dengyihao 已提交
20 21 22 23 24 25 26 27
FstRegex *regexCreate(const char *str) {
  FstRegex *regex = taosMemoryCalloc(1, sizeof(FstRegex));
  if (regex == NULL) {
    return NULL;
  }
  int32_t sz = (int32_t)strlen(str);
  char *  orig = taosMemoryCalloc(1, sz);
  memcpy(orig, str, sz);
dengyihao's avatar
add UT  
dengyihao 已提交
28

dengyihao's avatar
dengyihao 已提交
29
  regex->orig = orig;
dengyihao's avatar
add UT  
dengyihao 已提交
30

dengyihao's avatar
dengyihao 已提交
31 32 33 34 35 36
  // construct insts based on str
  SArray *insts = NULL;

  FstDfaBuilder *builder = dfaBuilderCreate(insts);
  regex->dfa = dfaBuilderBuild(builder);
  return regex;
dengyihao's avatar
dengyihao 已提交
37
}
dengyihao's avatar
dengyihao 已提交
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

uint32_t regexAutomStart(FstRegex *regex) {
  ///// no nothing
  return 0;
}
bool regexAutomIsMatch(FstRegex *regex, uint32_t state) {
  if (regex->dfa != NULL && dfaIsMatch(regex->dfa, state)) {
    return true;
  } else {
    return false;
  }
}

bool regexAutomCanMatch(FstRegex *regex, uint32_t state, bool null) {
  // make frame happy
  return null;
}

bool regexAutomAccept(FstRegex *regex, uint32_t state, uint8_t byte, uint32_t *result) {
  if (regex->dfa == NULL) {
    return false;
  }
  return dfaAccept(regex->dfa, state, byte, result);
}