sequence.java

来自「RFID复杂事件处理系统的研究实验」· Java 代码 · 共 254 行

JAVA
254
字号
package test2;

import java.util.LinkedList;

public class Sequence extends NonLeaf{
	public Sequence(Sequence q)
	{
		super(q);
		this.operator=new String(";");
	}
	public Sequence()
	{
		super();
		this.operator=new String(";");
	}
	
	public C_Event work(NonLeaf n,Node n2)
	{
		C_Event ce=null;		
		Node n1=n.getlchild();		
		NonLeaf p1;
		Leaf q1,q2;
		
		if(n1.getisleaf() && n2.getisleaf())
		{
			q1=(Leaf)n1;
			q2=(Leaf)n2;
			if(q1.getevents().size()==0) 
			{				
				q2.getevents().getLast().setFlag();				
			}					
			else{
				P_Event pe2=q2.getevents().getLast();
				int i;
				for(i=0;i<q1.getevents().size();i++)
				{
					if(q1.getevents().get(i).flag)
					{
						P_Event pe1=q1.getevents().get(i);
						ce=new C_Event(pe1,pe2,n);
						pe1.setFlag();
						pe2.setFlag();
						break;
					}
					
				}	
				if(i==q1.getevents().size())
					q2.getevents().getLast().setFlag();											
			}			
		}else{
			
				if(!n1.getisleaf() && n2.getisleaf())
				{
					p1=(NonLeaf)n1;
					q2=(Leaf)n2;					
					if(p1.getmid_result().size()==0) 
					{				
						q2.getevents().getLast().setFlag();					
					}					
					else{
						P_Event pe1=q2.getevents().getLast();
						int i;
						for(i=0;i<p1.getmid_result().size();i++)
						{
							if(p1.getmid_result().get(i).flag)
							{
								C_Event ce0=p1.getmid_result().get(i);
								ce=new C_Event(pe1,ce0,n);
								pe1.setFlag();
								ce0.setFlag();
								break;
							}
							
						}	
						if(i==p1.getmid_result().size())
							q2.getevents().getLast().setFlag();		
												
					}	
				}
				}
		/*try
		{
			Thread.sleep(10);
		}
		catch (InterruptedException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
		return ce;
	}

	public LinkedList<C_Event> work0(int ii,NonLeaf n,Node n2)
	{
		LinkedList<C_Event> cel=new LinkedList<C_Event>();		
		Node n1;
		if(n2==n.getlchild()){
			n1=n.getrchild();				
		}else n1=n.getlchild();
		NonLeaf p1,p2;
		Leaf q1,q2;
		
		if(n1.getisleaf() && n2.getisleaf())
		{
			q1=(Leaf)n1;
			q2=(Leaf)n2;
			if(q2==n.getlchild()){//左结点有乱序
				int k;
				for(k=0;k<q1.getevents().size();k++)
				{
					if(q2.getevents().get(ii).gettimestamp()<q1.getevents().get(k).gettimestamp()) break;
				}
				if(k!=q1.getevents().size())
				{
					int j=ii;
					int i;
					for(i=k;i<q1.getevents().size();i++)
					{						
						POINT1:for(;j<q2.getevents().size();j++)
						{
							if(q2.getevents().get(j).compareEarly(q1.getevents().get(i)))
								break POINT1;
						}
					if(j!=q2.getevents().size()){
					    cel.addLast(new C_Event(q1.getevents().get(i),q2.getevents().get(j),n));
					    q1.getevents().get(i).setFlag();
					    q2.getevents().get(j).setFlag();
					    j++;
					}
					else{
						for(;i<q1.getevents().size();i++)
							 q1.getevents().get(i).setFlag();
					}
				    }	
					if(i==q1.getevents().size() && j!=q2.getevents().size())
					{
						for(;j<q2.getevents().size();j++)
							 q2.getevents().get(j).resetFlag();
					}
				}
			}else{
				if(q1.getevents().size()==0) 
				{	
					q2.getevents().get(ii).setFlag();	
				}else{
					int j=ii;
					POINT0:for(int i=ii;i<q2.getevents().size();i++)
					{						
						POINT:for(;j<q1.getevents().size();j++)
						{
							if(q1.getevents().get(j).compareEarly(q2.getevents().get(i)))
								break POINT;
						}
					if(j<q1.getevents().size()){
					    cel.addLast(new C_Event(q1.getevents().get(j),q2.getevents().get(i),n));
					    q1.getevents().get(j).setFlag();
					    q2.getevents().get(i).setFlag();
					    j++;
					}
					else{
						for(;i<q2.getevents().size();i++)
							 q2.getevents().get(i).setFlag();
						break POINT0;
					}
					}
				}				
			}	
		}else{			
				if(!n1.getisleaf() && n2.getisleaf())//右结点有乱序
				{
					p1=(NonLeaf)n1;
					q2=(Leaf)n2;	
					if(p1.getmid_result().size()==0) 
					{	
						q2.getevents().get(ii).setFlag();	
					}else{
						int j=ii;
						for(int i=ii;i<q2.getevents().size();i++)
						{						
							POINT:for(;j<p1.getmid_result().size();j++)
							{
								if(p1.getmid_result().get(j).compareEarly(q2.getevents().get(i)))
									break POINT;
							}
						if(j<p1.getmid_result().size()){
						    cel.addLast(new C_Event(q2.getevents().get(i),p1.getmid_result().get(j),n));
						    p1.getmid_result().get(j).setFlag();
						    q2.getevents().get(i).setFlag();
						}
						else{
							for(;i<q2.getevents().size();i++)
								 q2.getevents().get(i).setFlag();
						}
						}
					}	
					
				}else{
					if(n1.getisleaf() && !n2.getisleaf())//左结点有乱序
					{
						q1=(Leaf)n1;
						p2=(NonLeaf)n2;					
						int k;
						for(k=0;k<q1.getevents().size();k++)
						{
							if(p2.getmid_result().get(ii).gett_end()<q1.getevents().get(k).gettimestamp()) break;
						}
						if(k!=q1.getevents().size())
						{
							int j=ii;
							int i;
							for(i=k;i<q1.getevents().size();i++)
							{						
								POINT1:for(;j<p2.getmid_result().size();j++)
								{
									if(p2.getmid_result().get(j).compareEarly(q1.getevents().get(i)))
										break POINT1;
								}
							if(j!=p2.getmid_result().size()){
							    cel.addLast(new C_Event(q1.getevents().get(i),p2.getmid_result().get(j),n));
							    q1.getevents().get(i).setFlag();
							    p2.getmid_result().get(j).setFlag();
							}
							else{
								for(;i<q1.getevents().size();i++)
									 q1.getevents().get(i).setFlag();
							}
						    }	
							j++;
							if(i==q1.getevents().size() && j!=p2.getmid_result().size())
							{
								for(;j<p2.getmid_result().size();j++)
									p2.getmid_result().get(j).resetFlag();
							}
						}
					}
				}
	    }
		/*try
		{
			Thread.sleep(10);
		}
		catch (InterruptedException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
		return cel;
	}
}	
	
	


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?