private bool SetConnectID(ushort interrupt_id) { bool result = false; for (int i = 0; i < FreeConnNumberTable.Count; i++) { int key = FreeConnNumberTable.Keys[i]; ushort value = FreeConnNumberTable[key]; if (interrupt_id >= key && interrupt_id <= value) { FreeConnNumberTable.Remove(key); if (interrupt_id - 1 >= key) { FreeConnNumberTable.Add(key, (ushort)(interrupt_id - 1)); } if (interrupt_id + 1 <= value) { FreeConnNumberTable.Add((ushort)(interrupt_id + 1), value); } result = true; break; } else if (interrupt_id < key) { break; } } return(result); }
private int GetConnectID() { int result = -1; if (0 < FreeConnNumberTable.Count) { int key = FreeConnNumberTable.Keys[0]; ushort value = FreeConnNumberTable[key]; FreeConnNumberTable.Remove(key); result = key; key++; if (key <= value) { FreeConnNumberTable.Add(key, value); } } return(result); }
private void FreeConnectID(ushort interrupt_id) { if (!FreeConnNumberTable.ContainsKey(interrupt_id)) { FreeConnNumberTable.Add(interrupt_id, interrupt_id); for (int i = 0; i < FreeConnNumberTable.Count - 1; i++) { int key = FreeConnNumberTable.Keys[i]; ushort value = FreeConnNumberTable.Values[i]; if (value + 1 == FreeConnNumberTable.Keys[i + 1]) { value = FreeConnNumberTable.Values[i + 1]; int k2 = FreeConnNumberTable.Keys[i + 1]; FreeConnNumberTable.Remove(key); FreeConnNumberTable.Remove(k2); FreeConnNumberTable.Add(key, value); break; } } } }