Class to track data flow and detect a specific pattern

Revision:
1:038d0018a542
Parent:
0:b8cca837d413
--- a/PatternFinder.cpp	Mon Jan 11 04:48:08 2016 +0000
+++ b/PatternFinder.cpp	Wed Jan 13 05:30:23 2016 +0000
@@ -1,39 +1,27 @@
 #include "PatternFinder.h"
-// make the linker aware of some possible types
-template class PatternFinder<uint8_t>;
-template class PatternFinder<int8_t>;
-template class PatternFinder<uint16_t>;
-template class PatternFinder<int16_t>;
-template class PatternFinder<uint32_t>;
-template class PatternFinder<int32_t>;
-template class PatternFinder<uint64_t>;
-template class PatternFinder<int64_t>;
-template class PatternFinder<char>;
-template class PatternFinder<wchar_t>;
-
-template <class T>
-PatternFinder<T>::PatternFinder(T* Pattern,uint32_t PatternSize)
+PatternFinder::PatternFinder(void* PatternData, uint32_t PatternLength, uint32_t PatternElementSize)
 {
-    m_PatternSize = PatternSize;
-    m_PatternReference = new T[PatternSize];
+    m_PatternSize = PatternLength;
+    m_PatternElementSize = PatternElementSize;
+    m_RefPattern = new uint8_t[m_PatternSize*m_PatternElementSize];
     
-    T *src = Pattern;
-    T *dst = &m_PatternReference[PatternSize-1];
+    uint8_t *src = (uint8_t*)PatternData;
+    uint8_t *dst = (uint8_t*)m_RefPattern + (m_PatternSize-1)*m_PatternElementSize;
     //We must invert the given pattern so that it better fits the matching algorithm
-    for(int x = 0; x < PatternSize ;x++)
+    for(int x = 0; x < m_PatternSize ;x++)
     {
-        *dst-- = *src++;
-
+        memcpy(dst,src,m_PatternElementSize);
+        dst-=m_PatternElementSize;
+        src+=m_PatternElementSize;
     }
-    m_CurrentPattern = new T[PatternSize];  
+    m_CurDataStream = new uint8_t[m_PatternSize*m_PatternElementSize];  
     return;
 }
 
-template <class T>
-PatternFinder<T>::~PatternFinder()
+PatternFinder::~PatternFinder()
 {
-    delete [] m_PatternReference;
-    delete [] m_CurrentPattern;
+    delete [] m_RefPattern;
+    delete [] m_CurDataStream;
     return;
 }