public static int DefaultComparison(ChannelMapEntryWrapper x, ChannelMapEntryWrapper y)
 {
     int status_result = CompareStatus(x, y);
     if (status_result != 0)
         return status_result;
     return CompareNumber(x, y);
 }
 public static int CompareStatus(ChannelMapEntryWrapper x, ChannelMapEntryWrapper y)
 {
     return (int)x.QAMStatus - (int)y.QAMStatus;
 }
 public static ChannelMapEntryWrapper CreateOrGetWrapperForEntry(ChannelMapEntry entry)
 {
     int number = entry.Number;
     if (wrappers_by_num_.ContainsKey(number))
     {
         ChannelMapEntryWrapper wrapper = wrappers_by_num_[number];
         if (!entry.Equals(wrapper.MapEntry))
             throw new Exception("Conflicting channel map entry already exists!");
         return wrapper;
     }
     else
     {
         ChannelMapEntryWrapper wrapper = new ChannelMapEntryWrapper(entry);
         wrappers_by_num_.Add(number, wrapper);
         int qam_key = ChannelNumberToInt(entry.PhysicalChannel);
         if (!wrappers_by_qam_key_.ContainsKey(qam_key))
         {
             wrappers_by_qam_key_.Add(qam_key, new List<ChannelMapEntryWrapper>());
         }
         wrappers_by_qam_key_[qam_key].Add(wrapper);
         return wrapper;
     }
 }
 public static int ComparePhysicalChannel(ChannelMapEntryWrapper x, ChannelMapEntryWrapper y)
 {
     ChannelNumber x_chan = x.MapEntry.PhysicalChannel;
     ChannelNumber y_chan = y.MapEntry.PhysicalChannel;
     int val = x_chan.Number - y_chan.Number;
     if (val != 0) return val;
     return x_chan.SubNumber - y_chan.SubNumber;
 }
 public static int CompareOTA(ChannelMapEntryWrapper x, ChannelMapEntryWrapper y)
 {
     return -y.ExistsAsOTA.CompareTo(x.ExistsAsOTA);
 }
 public static int CompareNumber(ChannelMapEntryWrapper x, ChannelMapEntryWrapper y)
 {
     return x.MapEntry.Number - y.MapEntry.Number;
 }
 public static int CompareListing(ChannelMapEntryWrapper x, ChannelMapEntryWrapper y)
 {
     bool x_single_listing = x.listings.Count == 1;
     bool y_single_listing = y.listings.Count == 1;
     if (x_single_listing != y_single_listing) return y_single_listing.CompareTo(x_single_listing);
     if (x.listings.Count != y.listings.Count) return y.listings.Count - x.listings.Count;
     if (x_single_listing)
     {
         return x.listings[0].Name.CompareTo(y.listings[0].Name);
     }
     return 0;
 }
 public static int CompareCallsign(ChannelMapEntryWrapper x, ChannelMapEntryWrapper y)
 {
     return x.MapEntry.Callsign.CompareTo(y.MapEntry.Callsign);
 }