public void Add(AreaListNode node) { if (count>=data.Length) Resize(data.Length*SymbolTableConstants.AreaList_ResizeParam); if (count==0) { count++; data[0]=node; return; } if (data[count-1].Area<node.Area) { data[count]=node; count++; return; } int i=0; while (data[i].Area<node.Area) i++; if (data[i].Area==node.Area) { data[i].InfoList.Add(node.InfoList[0]); //data[i].InfoList[0].Next = node.InfoList[0]; return; //throw new Exception("ќшибка при добавлении области видимости к идентефикатору: така¤ область уже существует"); } int k=i; for (i=count;i>=k+1;i--) data[i]=data[i-1]; count++; data[i]=node; }
private void Resize(int new_size) { AreaListNode[] d=new AreaListNode[new_size]; data.CopyTo(d,0); data=d; }