This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
tango-maat/scanner/ip_matcher/IntervalIndex/ACEI.h

135 lines
2.9 KiB
C
Raw Normal View History

/************************************************************************/
/*
AdvanceCEI 0621.2007 v1.1
Yao Qiu-lin (yaoqiulin@software.ict.ac.cn)
<EFBFBD>޸ģ<EFBFBD>
1. תΪOO<EFBFBD><EFBFBD>ʽ
2. <EFBFBD>ļ<EFBFBD><EFBFBD>ӿڸ<EFBFBD>Ϊ<EFBFBD>ڴ<EFBFBD><EFBFBD>ӿ<EFBFBD>
ע<EFBFBD> PreProcessing<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>
<EFBFBD><EFBFBD>Ȼʵ<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>ʱ֧<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>insertIntvl<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>QueryInterval<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ôӦ<EFBFBD>ø<EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
/************************************************************************/
#ifndef _ADVANCECEI_YAOQIULIN_20080509_
#define _ADVANCECEI_YAOQIULIN_20080509_
#include "IntervalIndex.h"
#include <stdlib.h>
#include <stdio.h>
#include <vector>
//#define u_int unsigned int
typedef unsigned int u_int;
typedef struct _QueryInterval_
{
u_int l;
u_int r;
u_int index;
} _QueryInterval;
typedef struct _HQueryI_
{
_QueryInterval ** ppQImatrix;
u_int MAXROWS;
u_int ROWLEN;
u_int rowID;//next available
u_int colID;//next available
u_int cnt;
}_HQueryI;
typedef struct _IID_ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>ٿռ<D5BC><E4A3AC><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>õĻ<C3B5>
{
_QueryInterval * iid;
struct _IID_ * next;
}_IID;
typedef struct _IIDSet_
{
_IID *head;
_IID *tail;
} _IIDSet;
typedef _IIDSet _CEI;
//pack type
typedef struct _SrlIID_
{
_QueryInterval * iid;
}_SrlIID;
typedef struct _SrlIIDSet_
{
_SrlIID *head;
}_SrlIIDSet;
typedef _SrlIIDSet _SrlCEI;
class ACEI : public CIntervalIndex
{
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>[0, 2^r)
ACEI(u_int eRange = 32);
virtual ~ACEI();
//һ<><D2BB><EFBFBD><EFBFBD><EFBFBD>䣬[ a[i], b[i] ]<5D><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual long long PreProcessing(const std::vector<unsigned int>& a, const std::vector<unsigned int>& b);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD>key<65><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>index
virtual int Find(unsigned int key, unsigned int * result, unsigned int size);
private:
//init & ruin
void initQIMatrix();
void ruinQIMatirc();
int init();
void ruin();
void releaseCEIs(_CEI **ppIIDSet, u_int lCEIsNum);
//search
int searchX(unsigned int x, unsigned int * result, unsigned int size);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>double<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>u_int
//insert
//void insertIntvl(u_int l, u_int r)
void addIntvl(u_int ll, u_int lr, _QueryInterval* pQI);//<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҿ<EFBFBD><D2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ô<EFBFBD><C3B4>Ϊ<EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD>
void addFrgmnt(u_int ll, u_int lr, u_int sID, _QueryInterval* pQI);
void addBtmCEIs(u_int ll, u_int lr, u_int sID, _QueryInterval *pQI);
void addID(_CEI* pCEI, _QueryInterval* pQI);
//ultlity
double getAvrgRng();
//serialization
void serializeCEI(_CEI *pCEI, _SrlCEI* pSrlCEI);//suppose pCEI not NULL
void serialBtmCEIs();
void serialTopCEIs();
void serial();
private:
//input data
_HQueryI HQI; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//model data
u_int n; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u_int r; //ֵ<><D6B5>
u_int L;//L=2^H, Segment Len
u_int H;//<2F><><EFBFBD><EFBFBD>VC<56><43><EFBFBD>߶<EFBFBD>
u_int h;//ʵ<><CAB5>VC<56><43><EFBFBD>߶<EFBFBD>
double w; //ƽ<><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B3A4>
u_int SNum;//Segment Num
u_int SCEINum;
unsigned long *pExp2;
const u_int Exp2Size;
_CEI *pTopCEIs;
_CEI **ppBotCEIs;//ÿ<><C3BF>CEIs<49><73><EFBFBD>г<EFBFBD><D0B3><EFBFBD>ΪL<CEAA><4C>H
//for serial
_SrlCEI *pTopSrlCEIs;
_SrlCEI **ppBotSrlCEIs;//ÿ<><C3BF>CEIs<49><73><EFBFBD>г<EFBFBD><D0B3><EFBFBD>ΪL<CEAA><4C>H
};
#endif