Class to track data flow and detect a specific pattern
PatternFinder.h
- Committer:
- chris215
- Date:
- 2016-01-11
- Revision:
- 0:b8cca837d413
- Child:
- 1:038d0018a542
File content as of revision 0:b8cca837d413:
#ifndef PATTERN_FINDER_H #define PATTERN_FINDER_H #include <stdint.h> #include <string.h> template <typename T> class PatternFinder { private: T *m_PatternReference; T *m_CurrentPattern; uint32_t m_PatternSize; void ShiftDataInCurrentPattern(T data); bool CheckForPattern(void); public: PatternFinder(T* Pattern,uint32_t PatternSize = 1); ~PatternFinder(); bool CheckPattern(T data); //returns true if pattern was found in the stream }; template <class T> inline void PatternFinder<T>::ShiftDataInCurrentPattern(T data) { for(int x = (m_PatternSize-1);x > 0;x--) m_CurrentPattern[x] = m_CurrentPattern[x-1]; m_CurrentPattern[0] = data; } template <class T> inline bool PatternFinder<T>::CheckForPattern(void) { uint32_t NumberOfIdenticalElementsFoundInPattern = 0; for(int x = 0;x < m_PatternSize;x++) { if(m_PatternReference[x] == m_CurrentPattern[x]) { NumberOfIdenticalElementsFoundInPattern++; } } return NumberOfIdenticalElementsFoundInPattern == m_PatternSize; } template <class T> inline bool PatternFinder<T>::CheckPattern(T data) { ShiftDataInCurrentPattern(data); return CheckForPattern(); } #endif