public static void CompareAndPushToHeap(global::Array <object> @out, int[] cluster_size, int idx1, int idx2, global::encode.BinaryHeap <object> pairs) { if ((idx1 == idx2)) { return; } if ((idx2 < idx1)) { int t = idx2; idx2 = idx1; idx1 = t; } bool store_pair = false; global::encode.cluster.HistogramPair p = new global::encode.cluster.HistogramPair(); p.idx1 = idx1; p.idx2 = idx2; p.valid = true; p.cost_diff = (0.5 * global::encode.Cluster.ClusterCostDiff(((int)(((int[])(cluster_size))[idx1])), ((int)(((int[])(cluster_size))[idx2])))); p.cost_diff = ((p.cost_diff -= ((global::encode.histogram.Histogram)(@out[idx1])).bit_cost_) - ((global::encode.histogram.Histogram)(@out[idx2])).bit_cost_); if ((((global::encode.histogram.Histogram)(@out[idx1])).total_count_ == 0)) { p.cost_combo = ((global::encode.histogram.Histogram)(@out[idx2])).bit_cost_; store_pair = true; } else if ((((global::encode.histogram.Histogram)(@out[idx2])).total_count_ == 0)) { p.cost_combo = ((global::encode.histogram.Histogram)(@out[idx1])).bit_cost_; store_pair = true; } else { double threshold = (((pairs.size() == 0)) ? (1e99) : (global::System.Math.Max(((double)(0.0)), ((double)(global::haxe.lang.Runtime.toDouble(global::haxe.lang.Runtime.getField(pairs.arr[0], "cost_diff", 1698677367, true))))))); global::encode.histogram.Histogram combo = new global::encode.histogram.Histogram(((int)((((int[])(((global::encode.histogram.Histogram)(@out[idx1])).data_)) as global::System.Array).Length))); combo.bit_cost_ = ((global::encode.histogram.Histogram)(@out[idx1])).bit_cost_; { int _g1 = 0; int _g = (((int[])(((global::encode.histogram.Histogram)(@out[idx1])).data_)) as global::System.Array).Length; while ((_g1 < _g)) { int a = _g1++; ((int[])(combo.data_))[a] = ((int[])(((global::encode.histogram.Histogram)(@out[idx1])).data_))[a]; } } combo.kDataSize = ((global::encode.histogram.Histogram)(@out[idx1])).kDataSize; combo.total_count_ = ((global::encode.histogram.Histogram)(@out[idx1])).total_count_; combo.AddHistogram(((global::encode.histogram.Histogram)(@out[idx2]))); double cost_combo = global::encode.Bit_cost.PopulationCost(combo); if ((cost_combo < (threshold - p.cost_diff))) { p.cost_combo = cost_combo; store_pair = true; } } if (store_pair) { p.cost_diff += p.cost_combo; pairs.push(p); } }