Created
May 3, 2016 21:51
-
-
Save clarkis117/0b83cd654f2e9e75d3bff0063037b0fa to your computer and use it in GitHub Desktop.
Unsafe Network diff
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public unsafe void NetworkDifferential(WifiNetwork[] InRangeNetworks) | |
{ | |
var changesIndex = 0; | |
var changesLength = InRangeNetworks.Length * 2; | |
var changes = stackalloc WifiListChange[changesLength]; | |
//List<WifiNetwork> itemsToRemove = new List<WifiNetwork>(); | |
//List<string> itemsToAdd = new List<string>(); | |
//foreach network in Networks | |
for (int NetworkIndex = 0; NetworkIndex < Networks.Count; NetworkIndex++) | |
{ | |
bool match = false; | |
//access once and cache | |
var NetworkItem = Networks[NetworkIndex]; | |
//todo foreach network InRange Networks | |
for (int i = 0; i < InRangeNetworks.Length; i++) | |
{ | |
//access once and cache | |
var InRangeItem = InRangeNetworks[i]; | |
//if match trigger Property Update | |
if (NetworkItem.BSSID == InRangeItem.BSSID) | |
{ | |
/*update properties here | |
*/ | |
changes[changesIndex] = new WifiListChange((int)ListChange.Update, NetworkIndex, i); | |
changesIndex += 1; | |
match = true; | |
break; | |
} | |
} | |
if (match == false) //add to removal list | |
{ | |
changes[changesIndex] = new WifiListChange((int)ListChange.Remove, NetworkIndex, 0); | |
changesIndex += 1; | |
} | |
} | |
//foreach network InRange Networks | |
for (int InRangeIndex = 0; InRangeIndex < InRangeNetworks.Length; InRangeIndex++) | |
{ | |
bool match = false; | |
//access once and cache | |
var InRangeItem = InRangeNetworks[InRangeIndex]; | |
//foreach network in Networks | |
for (int NetworkIndex = 0; NetworkIndex < Networks.Count; NetworkIndex++) | |
{ | |
//if match it means the time is was previously in range | |
if (InRangeItem.BSSID == Networks[NetworkIndex].BSSID) | |
{ | |
match = true; | |
break; | |
} | |
} | |
if (match == false) //add item | |
{ | |
changes[changesIndex] = new WifiListChange((int)ListChange.Add, 0, InRangeIndex); | |
changesIndex += 1; | |
} | |
} | |
//remove out of range networks | |
var changelen = changesLength; | |
for (int i = 0; i < changesIndex; i++) | |
{ | |
//Networks.Remove(itemsToRemove[i]); | |
var change = changes[i]; | |
switch (change.Change) | |
{ | |
case (int)ListChange.Update: | |
var NetworkItem = Networks[change.NetworkRef]; | |
var InRangeItem = InRangeNetworks[change.InRangeRef]; | |
if (NetworkItem.Frequency != InRangeItem.Frequency) | |
{ | |
NetworkItem.Frequency = InRangeItem.Frequency; | |
} | |
if (NetworkItem.SignalStrength != InRangeItem.SignalStrength) | |
{ | |
NetworkItem.SignalStrength = InRangeItem.SignalStrength; | |
} | |
break; | |
case (int)ListChange.Add: | |
Networks.Add(InRangeNetworks[change.InRangeRef]); | |
break; | |
} | |
} | |
for (int i = changesIndex; i >= 0; i--) | |
{ | |
//Networks.Remove(itemsToRemove[i]); | |
var change = changes[i]; | |
if (change.Change == 0) | |
{ | |
Networks.RemoveAt(change.NetworkRef); | |
throw new Exception("not type"); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment