LinkedListNode <SheetColumnRange> GetNode(int col) { var at = data.First; while (at != null && at.Value.FirstColumn < col) { at = at.Next; } //at the end if (at == null || at.Value.LastColumn < col) { var c = new SheetColumnRange { FirstColumn = col, LastColumn = col, Data = new SheetColumn() }; return(data.AddLast(c)); } //between nodes if (at.Value.FirstColumn > col) { return(data.AddBefore(at, new SheetColumnRange { FirstColumn = col, LastColumn = col, Data = new SheetColumn() })); } //overlap if (col == at.Value.LastColumn) { return(at); } if (col < at.Value.LastColumn) { data.AddAfter(at, new SheetColumnRange { FirstColumn = col + 1, LastColumn = at.Value.LastColumn, Data = at.Value.Data }); } var result = data.AddAfter(at, new SheetColumnRange { FirstColumn = col, LastColumn = col, Data = new SheetColumn() }); if (col > at.Value.FirstColumn) { at.Value.LastColumn = col - 1; } else { data.Remove(at); } return(result); }
LinkedListNode<SheetColumnRange> GetNode(int col) { var at = data.First; while (at != null && at.Value.FirstColumn < col) at = at.Next; //at the end if (at == null || at.Value.LastColumn < col) { var c = new SheetColumnRange { FirstColumn = col, LastColumn = col, Data = new SheetColumn() }; return data.AddLast(c); } //between nodes if (at.Value.FirstColumn > col) return data.AddBefore(at, new SheetColumnRange { FirstColumn = col, LastColumn = col, Data = new SheetColumn() }); //overlap if (col == at.Value.LastColumn) return at; if (col < at.Value.LastColumn) data.AddAfter(at, new SheetColumnRange { FirstColumn = col + 1, LastColumn = at.Value.LastColumn, Data = at.Value.Data }); var result = data.AddAfter(at, new SheetColumnRange { FirstColumn = col, LastColumn = col, Data = new SheetColumn() }); if (col > at.Value.FirstColumn) at.Value.LastColumn = col - 1; else data.Remove(at); return result; }