public static FinalAttractor[] GetIDA(LatLng startcoord, double radius, int meta, QuantumRandomNumberGeneratorWrapper rnd, out string shaGid) { FinalAttractor[] result = new FinalAttractor[0]; int al = 0; int cou = 0; shaGid = null; while ((al == 0) && (cou < 10)) { cou++; int No = getOptimizedDots(radius); int bytesSize = requiredEnthropyBytes(No); //byte[] byteinput = new byte[No]; // todo use byte or hex dependent on sourcetype //rnd.NextBytes(byteinput); byte[] byteinput = rnd.NextHexBytes((int)bytesSize, meta, out shaGid); if (meta == 1) { bytesSize = bytesSize * 10; } int engin1 = initWithBytes(getHandle(), byteinput, bytesSize); int fa = findAttractors(engin1, significance, filtering_significance); al = getAttractorsLength(engin1); result = new FinalAttractor[al]; unsafe { IntPtr value; value = getAttractors(engin1, radius, startcoord, 23); if (value != null) { for (int j = 0; j < (int)al; j++) { result[j] = new FinalAttractor(); Marshal.PtrToStructure(value, result[j]); value += Marshal.SizeOf <FinalAttractor>() /* == 192 */ + 16 /* need this to fix alignment on non-Windows platforms */; } } //releaseAttractors(value, al); //todo make release stuff here } releaseEngine(engin1); } return(result); }
public static FinalAttractor[] SortIDA(FinalAttractor[] source, string idatype, int idacount) { FinalAttractor[] result = new FinalAttractor[0]; int att = 0; int voi = 0; foreach (FinalAttractor ida in source) { if (ida.X.type == 1) { att++; } else if (ida.X.type == 2) { voi++; } } FinalAttractor[] aatt = new FinalAttractor[att]; FinalAttractor[] avoi = new FinalAttractor[voi]; att = 0; voi = 0; foreach (FinalAttractor ida in source) { if (ida.X.type == 1) { aatt[att] = ida; att++; } else if (ida.X.type == 2) { avoi[voi] = ida; voi++; } } if ((idatype == "attractor") && (att > 0)) { aatt = BubbleSort(aatt, att); if (att < idacount) { idacount = att; } result = new FinalAttractor[idacount]; for (int j = 0; j < idacount; j++) { result[j] = aatt[j]; } } else if ((idatype == "void") && (voi > 0)) { avoi = BubbleSort(avoi, voi); if (voi < idacount) { idacount = voi; } result = new FinalAttractor[idacount]; for (int j = 0; j < idacount; j++) { result[j] = avoi[j]; } } else if ((idatype == "any") && ((att > 0) || (voi > 0))) { source = BubbleSort(source, source.Count()); if ((att + voi) < idacount) { idacount = att + voi; } result = new FinalAttractor[idacount]; int c = 0; int j = 0; while ((j < source.Count()) && (c < idacount)) { if ((source[j].X.type == 1) || (source[j].X.type == 2)) { result[c] = source[j]; c++; j++; } else { j++; } } } return(result); }
private extern static void finalize(); // !!!CAUTION!!! this frees all engines systemwide, call before unloading the dll public static string Tolog(ITurnContext context, string type, FinalAttractor ida, string shortCode) //idas { string resp = "Intention Driven Anomaly found" + "\n\n"; if (type == "blind") { resp = "Mystery Point Generated" + "\n\n"; } var code = ""; if (type == "blind") { code = "X-" + shortCode; } else if (ida.X.type == 1) { code = "A-" + shortCode; } else if (ida.X.type == 2) { code = "V-" + shortCode; } resp += code + " (" + ida.X.center.point.latitude.ToString("#0.000000", System.Globalization.CultureInfo.InvariantCulture) + " " + ida.X.center.point.longitude.ToString("#0.000000", System.Globalization.CultureInfo.InvariantCulture) + ")" + "\n\n"; if (ida.X.type == 1) { if (type != "blind") { double bearing = ida.X.center.bearing.finalBearing; if (bearing < 0) { bearing = (bearing + 360) % 360.0; } resp += "Type: Attractor" + "\n\n"; resp += "Radius: " + (int)(ida.X.radiusM) + "m" + "\n\n"; resp += "Power: " + ida.X.power.ToString("#0.00", System.Globalization.CultureInfo.InvariantCulture) + "\n\n"; resp += "Bearing: " + ida.X.center.bearing.distance.ToString("#0m", System.Globalization.CultureInfo.InvariantCulture) + " / " + bearing.ToString("#0.0°", System.Globalization.CultureInfo.InvariantCulture) + "\n\n"; } } else if (ida.X.type == 2) { if (type != "blind") { double bearing = ida.X.center.bearing.finalBearing; if (bearing < 0) { bearing = (bearing + 360) % 360.0; } resp += "Type: Void" + "\n\n"; resp += "Radius: " + (int)(ida.X.radiusM) + "m" + "\n\n"; resp += "Power: " + (1 / ida.X.power).ToString("#0.00", System.Globalization.CultureInfo.InvariantCulture) + "\n\n"; resp += "Bearing: " + ida.X.center.bearing.distance.ToString("#0m", System.Globalization.CultureInfo.InvariantCulture) + " / " + bearing.ToString("#0.0°", System.Globalization.CultureInfo.InvariantCulture) + "\n\n"; } } string pl = ""; if (ida.X.rarity == 0) { pl = @"N/A"; } else if (ida.X.rarity == 1) { pl = "POOR"; } else if (ida.X.rarity == 2) { pl = "COMMON"; } else if (ida.X.rarity == 3) { pl = "UNCOMMON"; } else if (ida.X.rarity == 4) { pl = "RARE"; } else if (ida.X.rarity == 5) { pl = "EPIC"; } else if (ida.X.rarity == 6) { pl = "LEGENDARY"; } else if (ida.X.rarity == 7) { pl = "UNICORN"; } else if (ida.X.rarity == 8) { pl = "SINGULARITY"; } if (type != "blind") { if (ida.X.rarity > 0) { resp += "Abnormality Rank: " + pl + "\n\n"; } resp += "z-score: " + ida.X.z_score.ToString("#0.00", System.Globalization.CultureInfo.InvariantCulture) + "\n\n"; } return(resp); }