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