summaryrefslogtreecommitdiff
path: root/utils/tfstats/regexp/include/jm/re_kmp.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /utils/tfstats/regexp/include/jm/re_kmp.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'utils/tfstats/regexp/include/jm/re_kmp.h')
-rw-r--r--utils/tfstats/regexp/include/jm/re_kmp.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/utils/tfstats/regexp/include/jm/re_kmp.h b/utils/tfstats/regexp/include/jm/re_kmp.h
new file mode 100644
index 0000000..65d1e90
--- /dev/null
+++ b/utils/tfstats/regexp/include/jm/re_kmp.h
@@ -0,0 +1,112 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//=============================================================================//
+/*
+ *
+ * Copyright (c) 1998-9
+ * Dr John Maddock
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Dr John Maddock makes no representations
+ * about the suitability of this software for any purpose.
+ * It is provided "as is" without express or implied warranty.
+ *
+ */
+
+ /*
+ * FILE re_kmp.h
+ * VERSION 2.12
+ * Knuth-Morris-Pratt search.
+ */
+
+
+#ifndef __RE_KMP_H
+#define __RE_KMP_H
+
+#ifdef JM_CFG_H
+#include <jm/jm_cfg.h>
+#endif
+
+
+JM_NAMESPACE(__JM)
+
+template <class charT>
+struct kmp_info
+{
+ unsigned int size;
+ unsigned int len;
+ const charT* pstr;
+ int kmp_next[1];
+};
+
+template <class charT, class Allocator>
+void kmp_free(kmp_info<charT>* pinfo, Allocator a)
+{
+ typedef JM_MAYBE_TYPENAME REBIND_TYPE(char, Allocator) atype;
+ atype(a).deallocate((char*)pinfo, pinfo->size);
+}
+
+template <class iterator, class charT, class Trans, class Allocator>
+kmp_info<charT>* kmp_compile(iterator first, iterator last, charT, Trans translate, Allocator a
+#ifdef RE_LOCALE_CPP
+ , const __JM_STD::locale& l
+#endif
+ )
+{
+ typedef JM_MAYBE_TYPENAME REBIND_TYPE(char, Allocator) atype;
+ int i, j, m;
+ i = 0;
+ m = 0;
+ JM_DISTANCE(first, last, m);
+ ++m;
+ unsigned int size = sizeof(kmp_info<charT>) + sizeof(int)*m + sizeof(charT)*m;
+ --m;
+ //
+ // allocate struct and fill it in:
+ //
+ kmp_info<charT>* pinfo = (kmp_info<charT>*)atype(a).allocate(size);
+ pinfo->size = size;
+ pinfo->len = m;
+ charT* p = (charT*)((char*)pinfo + sizeof(kmp_info<charT>) + sizeof(int)*(m+1));
+ pinfo->pstr = p;
+ while(first != last)
+ {
+ *p = translate(*first MAYBE_PASS_LOCALE(l));
+ ++first;
+ ++p;
+ }
+ *p = 0;
+ //
+ // finally do regular kmp compile:
+ //
+ j = pinfo->kmp_next[0] = -1;
+ while (i < m)
+ {
+ while ((j > -1) && (pinfo->pstr[i] != pinfo->pstr[j]))
+ j = pinfo->kmp_next[j];
+ ++i;
+ ++j;
+ if (pinfo->pstr[i] == pinfo->pstr[j])
+ pinfo->kmp_next[i] = pinfo->kmp_next[j];
+ else
+ pinfo->kmp_next[i] = j;
+ }
+
+ return pinfo;
+}
+
+
+JM_END_NAMESPACE // namespace regex
+
+#endif // __RE_KMP_H
+
+
+
+