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; }