public void TestTryGet() { var dict = new Dictionary<int, string> { { 1, string.Empty }, { 2, string.Empty }, { 4, string.Empty }, }; var val1 = dict.TryGet(1); var val2 = dict.TryGet(2); var val3 = dict.TryGet(3); var val4 = dict.TryGet(4); Assert.IsNotNull(val1); Assert.IsNotNull(val2); Assert.IsNull(val3); Assert.IsNotNull(val4); }
protected void ReadDvbData(SQLiteDataReader r, IDictionary<string, int> field, DataRoot dataRoot, Dictionary<long, string> providers) { this.ShortName = DbSerializer.ReadUtf16(r, 16); this.RecordOrder = r.GetInt32(field["major"]); int serviceType = r.GetInt32(field["srvType"]); this.ServiceType = serviceType; this.SignalSource |= LookupData.Instance.IsRadioOrTv(serviceType); this.OriginalNetworkId = r.GetInt32(field["onid"]); this.TransportStreamId = r.GetInt32(field["tsid"]); this.ServiceId = r.GetInt32(field["progNum"]); this.VideoPid = r.GetInt32(field["vidPid"]); if (!r.IsDBNull(field["provId"])) this.Provider = providers.TryGet(r.GetInt64(field["provId"])); }
protected void ReadDvbData(SQLiteDataReader r, IDictionary <string, int> field, DbSerializer loader, Dictionary <long, string> providers) { this.ShortName = loader.ReadUtf16(r, field["srvName"]); this.RecordOrder = r.GetInt32(field["major"]); int serviceType = r.GetInt32(field["srvType"]); this.ServiceType = serviceType; this.SignalSource |= LookupData.Instance.IsRadioTvOrData(serviceType); this.OriginalNetworkId = r.GetInt32(field["onid"]); this.TransportStreamId = r.GetInt32(field["tsid"]); this.ServiceId = r.GetInt32(field["progNum"]); this.VideoPid = r.GetInt32(field["vidPid"]); if (!r.IsDBNull(field["provId"])) { this.Provider = providers.TryGet(r.GetInt64(field["provId"])); } this.AddDebug(r.GetInt32(field["lcn"]).ToString()); }
public void Publish(object message) { List <Type> types = new List <Type>(); var currentType = message.GetType(); do { types.Add(currentType); } while ((currentType = currentType.BaseType) != null); types.AddRange(message.GetType().GetInterfaces()); var actions = new List <List <Action <object> > >(); lock (_handlers) { types.ForEach(_ => _handlers.TryGet(_, actions.Add)); } var invokeList = new List <Action <object> >(); foreach (var action in actions) { lock (action) { invokeList.AddRange(action); } } var errors = new List <Exception>(); foreach (var invoke in invokeList) { try { invoke(message); } catch (Exception e) { errors.Add(e); } } foreach (var error in errors) { Publish(error); } }
private List <Transaction> Reorder(List <Transaction> transactions) { if (transactions.Count == 0) { return(transactions); } var result = new List <Transaction>(); Dictionary <uint256, TransactionNode> dictionary = transactions.ToDictionary(t => t.GetHash(), t => new TransactionNode(t)); foreach (TransactionNode transaction in dictionary.Select(d => d.Value)) { foreach (TxIn input in transaction.Transaction.Inputs) { TransactionNode node = dictionary.TryGet(input.PrevOut.Hash); if (node != null) { transaction.DependsOn.Add(node); } } } while (dictionary.Count != 0) { foreach (TransactionNode node in dictionary.Select(d => d.Value).ToList()) { foreach (TransactionNode parent in node.DependsOn.ToList()) { if (!dictionary.ContainsKey(parent.Hash)) { node.DependsOn.Remove(parent); } } if (node.DependsOn.Count == 0) { result.Add(node.Transaction); dictionary.Remove(node.Hash); } } } return(result); }
UIPlane CreateUI(UIType _type) { string path = _PathDictionary.TryGet(_type); if (path.Equals("")) { return(null); } UIPlane _temp = (GameObject.Instantiate(Resources.Load(path)) as GameObject).GetComponent <UIPlane>(); _temp.transform.SetParent(_CanvasTransform, false); _PlaneDictionary.Add(_type, _temp); //清除路径 _PathDictionary.Remove(_type); return(_temp); }
public IFormatProvider GetCurrencyProvider(string currency) { lock (_CurrencyProviders) { if (_CurrencyProviders.Count == 0) { foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures).Where(c => !c.IsNeutralCulture)) { try { _CurrencyProviders.TryAdd(new RegionInfo(culture.LCID).ISOCurrencySymbol, culture); } catch { } } AddCurrency(_CurrencyProviders, "BTC", 8, "BTC"); } return(_CurrencyProviders.TryGet(currency)); } }
/// <summary> /// 获取面板的游戏物体 /// </summary> private GameObject GetPanelGO(UIPanelName panelName, string path) { GameObject instPanel = panelGODict.TryGet(panelName); if (instPanel == null) { GameObject res = ResMgr.Instance.GetRes <GameObject>(uiPrefabPath + panelName.ToString()); instPanel = GameObject.Instantiate(res) as GameObject; instPanel.name = panelName.ToString(); panelGODict.Add(panelName, instPanel); } if (!currentScenePanelDict.ContainsKey(panelName)) { currentScenePanelDict.Add(panelName, instPanel); } return(instPanel); }
private void AddReferenceType(IFile file, Dictionary <string, List <IFile> > referencesByName) { if (file == null) { return; } var list = referencesByName.TryGet(file.Name); if (list == null) { list = new List <IFile>(); referencesByName[file.Name] = list; } if (!list.Any(l => l.FullName == file.FullName)) { list.Add(file); } }
public static void Process(String input) { // Parse our input command and pass it on to the appropriate method. var data = input.Split(' '); Object[] arguments; if (data.Length > 1) { arguments = new Object[data.Length - 1]; for (var i = 0; i < data.Length - 1; i++) { arguments[i] = data[i + 1]; } } else { arguments = new Object[0]; } Commands.TryGet(data[0], (o) => { Logger.Write("Unknown Command."); })(arguments); }
public void Resolve() { Methods = new Dictionary <CodeObject, Method>(); Properties = new Dictionary <string, Property>(); //Method foreach (var method in Objects.Where(obj => obj.ContextType == TjsContextType.TopLevel || obj.ContextType == TjsContextType.PropertyGetter || obj.ContextType == TjsContextType.PropertySetter || obj.ContextType == TjsContextType.Function || obj.ContextType == TjsContextType.ExprFunction)) { Methods[method] = method.ResolveMethod(); } //Property foreach (var prop in Objects.Where(obj => obj.ContextType == TjsContextType.Property)) { Properties[prop.Name] = prop.ResolveProperty(Methods.TryGet(prop.Getter), Methods.TryGet(prop.Setter)); } }
private BasePanel GetPanel(UIPanelType panelType) { if (panelDict == null) { panelDict = new Dictionary <UIPanelType, BasePanel>(); } BasePanel panel = panelDict.TryGet(panelType); if (null == panel) { string path = panelPathDict.TryGet(panelType); GameObject instPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject; instPanel.transform.SetParent(CanvasTransform, false); panel = instPanel.GetComponent <BasePanel>(); panelDict.Add(panelType, panel); } return(panel); }
public static int?TryGetInt(this Dictionary <string, string> dict, string key) { string s = dict.TryGet(key); if (string.IsNullOrEmpty(s)) { return(null); } int i; if (int.TryParse(s, out i)) { return(i); } else { return(null); } }
/*private static void TestCombined() * { * var model = new TrainingModel<CsccContextInfo>(Combine()); * var trainingModel = new EvaluationModel(model.Contexts); * Console.WriteLine(trainingModel.Evaluate()); * Console.ReadKey(); * }*/ private static Dictionary <string, List <ContextInfo> > Combine() { var directoryInfo = Directory.GetParent(Directory.GetCurrentDirectory()).Parent; if (directoryInfo == null) { return(null); } var applicationDirectory = directoryInfo.FullName; var modelDirectory = Path.Combine(applicationDirectory, "ModelStorage"); var combinedModel = new Dictionary <string, List <ContextInfo> >(); var modelFiles = Directory.GetFiles(modelDirectory).Where(file => !file.EndsWith("_cscc") && !file.Equals("base")); foreach (var modelFile in modelFiles) { var model = ContextModel <ContextInfo> .Load(modelFile).Contexts; foreach (var type in model.Keys) { List <ContextInfo> contexts = combinedModel.TryGet(type); contexts.AddRange(model[type]); combinedModel[type] = contexts; } } foreach (var type in combinedModel.Keys.ToList()) { combinedModel[type] = new HashSet <ContextInfo>(combinedModel[type]).ToList(); } var flatModel = combinedModel.ToList(); flatModel.Sort((a, b) => b.Value.Count.CompareTo(a.Value.Count)); var sortedTop = flatModel.Take(100); return(sortedTop.ToDictionary(kvp => kvp.Key, kvp => kvp.Value)); }
Scene ISceneLoader.LoadScene(SceneID map, bool forceReload) { if (forceReload) { loadedScenes.Remove(map.ToString()); } QuickGameScene ret = loadedScenes.TryGet(map.ToString()); if (ret != null) { SetIntersceneActorPositions(ret); LastScene = ret; QuickGameScene.Current = ret; return(ret); } if (MasterTemplate == null) { MasterTemplate = new MapTemplate("map", new Vector2(16, 16)); } if (map == Scenes.Intro) { return(new IntroScene()); } ret = new QuickGameScene(map, MasterTemplate); SetIntersceneActorPositions(ret); DebugText.NewTextPosition = new Vector2(50, 50); LastScene = ret; if (!forceReload) { loadedScenes.Add(map.ToString(), ret); } return(ret); }
private BasePanel GetPanel(UIPanelType panelType) { BasePanel panel = panelDict.TryGet(panelType); if (panel == null) { string path = panelPathDict.TryGet(panelType); GameObject instPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject; instPanel.transform.SetParent(CanvasTransform, false); panel = instPanel.GetComponent <BasePanel>(); panel.Facade = facade; panel.UIMng = this; panel.OnEnter(); panelDict.Add(panelType, instPanel.GetComponent <BasePanel>()); return(instPanel.GetComponent <BasePanel>()); } else { return(panel); } }
private BasePanel GetPanel(UIPanelType panelType) { if (panelDict == null) { panelDict = new Dictionary <UIPanelType, BasePanel>(); } BasePanel panel = panelDict.TryGet(panelType);//使用扩展方法 if (panel == null) { //如果找不到,那么就找这个面板的prefab的路径,然后根据prefab去实例化面板 string path = panelPathDict.TryGet(panelType); GameObject instPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject; instPanel.transform.SetParent(CanvasTransform, false); panelDict.Add(panelType, instPanel.transform.GetComponent <BasePanel>()); return(instPanel.transform.GetComponent <BasePanel>()); } else { return(panel); } }
public CardLocalization GetLocalization(Card card) { if (card.ForeignNames == null) { return(null); } var result = new CardLocalization(); foreach (var name in card.ForeignNames) { var translation = _cardsByMultiverseIdByNumber.TryGet(name.MultiverseId) ?.TryGet(card.Number ?? string.Empty); if (translation != null) { if (Str.Equals(translation.Type, card.TypeEn)) { translation.Type = null; } if (Str.Equals(translation.Flavor, card.FlavorEn)) { translation.Flavor = null; } if (Str.Equals(translation.Text, card.TextEn)) { translation.Text = null; } if (translation.Text != null || translation.Type != null || translation.Flavor != null) { result.Add(card, name, translation); } } } return(result); }
/// <summary> /// 根据面板类型得到实例化面板 /// </summary> private IBasePanel GetPanel(UIPanelName panelName) { IBasePanel panel = panelDict.TryGet(panelName); if (panel == null) { //如果找不到 就实例 UIPanelInfo pInfo = UIPanelHelper.GetPanelInfo(panelName); GameObject instPanel = GetPanelGO(panelName, pInfo.path); switch (pInfo.Layer) { case UILayer.Bottom: instPanel.transform.SetParent(BGTransform, false); break; case UILayer.Common: instPanel.transform.SetParent(CommonTransform, false); break; case UILayer.Top: instPanel.transform.SetParent(TopTransform, false); break; default: Debug.LogError(pInfo.Name + "没有设置层级"); break; } instPanel.transform.SetParent(CommonTransform, false); instPanel.transform.ResetLocal(); panel = UIPanelHelper.GetPanelBusiness(panelName); panel.rootUI = instPanel; panelDict.Add(panelName, panel); panel.Init(); } return(panel); }
/// <summary> /// Search for inheritance if available, and copy those properties over, then overwrite /// </summary> public static Dictionary <string, object> UpdateDefInheritance(Dictionary <string, object> defs, Dictionary <string, object> def) { var result = def; if (def.TryGet("inherit", out string inheritProp) && !string.IsNullOrEmpty(inheritProp) && defs.TryGet(inheritProp, out Dictionary <string, object> inheritDef)) { result = UpdateDefInheritance(defs, inheritDef); // copy new keys over top foreach (var(key, value) in def) { if (key != "inherit") { result[key] = value; } } } return(result); }
void ButtonGenClick(object sender, EventArgs e) { var classText = string.Empty; var gen = new List <string>(); var dic = new Dictionary <string, string>(); foreach (var x in _listBox.Items.Cast <ClassInfo>()) { if (gen.Contains(x.Name)) { continue; } classText += GenerateClassDefine(x); classText += (Environment.NewLine + Environment.NewLine); var prop = GeneratePropertyDefine(x); dic[prop.Item1] = dic.TryGet(prop.Item1) + prop.Item2 + Environment.NewLine + Environment.NewLine; gen.Add(x.Name); } { var form = new Form(); var text = new TextBox { Multiline = true, Text = classText, Dock = DockStyle.Fill }; form.Controls.Add(text); form.Show(this); } { var propertyText = string.Join(Environment.NewLine + Environment.NewLine + Environment.NewLine + Environment.NewLine, dic.Select(x => x.Value)); var form = new Form(); var text = new TextBox { Multiline = true, Text = propertyText, Dock = DockStyle.Fill }; form.Controls.Add(text); form.Show(this); } }
public BasePanel GetPanel(PanelType panelType) { if (PanelTypeByEnum == null) { PanelTypeByEnum = new Dictionary <PanelType, BasePanel>(); } BasePanel panel = PanelTypeByEnum.TryGet(panelType); if (panel == null) { string path = PanelPathDict.TryGet(panelType); string pathstr = PanelPathDict.TryGet(panelType); GameObject instPanel = GameObject.Instantiate(Resources.Load(pathstr)) as GameObject; instPanel.transform.SetParent(CanvasTransform, false); PanelTypeByEnum.Add(panelType, instPanel.GetComponent <BasePanel>()); return(instPanel.GetComponent <BasePanel>()); } else { return(panel); } }
public void Hide(string panelName) { if (panelShowDict == null) { panelShowDict = new Dictionary <string, IBasePanel>(); } if (panelShowDict.Count <= 0) { return; } IBasePanel panel = panelShowDict.TryGet(panelName); if (panel == null) { return; } panel.OnHide(); panelShowDict.Remove(panelName); }
/// <summary> /// 创建面板并将其添加至面板字典中 /// </summary> /// <param name="panelType">面板类型</param> /// <returns></returns> private BasePanel GetPanel(UIPanelType panelType) { if (panelDict == null) { panelDict = new Dictionary <UIPanelType, BasePanel>(); } //BasePanel panel; //panelDict.TryGetValue(panelType, out panel); BasePanel panel = panelDict.TryGet(panelType); if (panel == null) { //string path; //panelPathDict.TryGetValue(panelType, out path); string path = panelPathDict.TryGet(panelType); GameObject instPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject; instPanel.transform.SetParent(CanvasTransfrom, false); instPanel.GetComponent <BasePanel>().UIMng = this; panelDict.Add(panelType, instPanel.GetComponent <BasePanel>()); panelDict.TryGetValue(panelType, out panel); } return(panel); }
public IFormatProvider GetCurrencyProvider(string currency) { lock (_CurrencyProviders) { if (_CurrencyProviders.Count == 0) { foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures).Where(c => !c.IsNeutralCulture)) { try { _CurrencyProviders.TryAdd(new RegionInfo(culture.LCID).ISOCurrencySymbol, culture); } catch { } } foreach (var curr in _Currencies.Where(pair => pair.Value.Crypto)) { AddCurrency(_CurrencyProviders, curr.Key, curr.Value.Divisibility, curr.Value.Symbol ?? curr.Value.Code); } } return(_CurrencyProviders.TryGet(currency.ToUpperInvariant())); } }
public static bool IsVisible(EmailTemplateEntity et, EmailTemplateVisibleOn visibleOn) { if (et.Model == null) { return(visibleOn == EmailTemplateVisibleOn.Single); } if (EmailModelLogic.HasDefaultTemplateConstructor(et.Model)) { return(false); } var entityType = EmailModelLogic.GetEntityType(et.Model.ToType()); if (entityType.IsEntity()) { return(visibleOn == EmailTemplateVisibleOn.Single); } var should = VisibleOnDictionary.TryGet(entityType, EmailTemplateVisibleOn.Single); return((should & visibleOn) != 0); }
public static Dictionary <string, List <CsccContextInfo> > CombineCscc() { var modelDirectory = GetModelDirectory(); var combinedModel = new Dictionary <string, List <CsccContextInfo> >(); var modelFiles = Directory.GetFiles(modelDirectory, "*_cscc").Where(file => !file.Equals("base_cscc") && !file.Equals("training_cscc")); foreach (var modelFile in modelFiles) { var model = ContextModel <CsccContextInfo> .Load(modelFile).Contexts; foreach (var type in model.Keys) { var contexts = combinedModel.TryGet(type); contexts.AddRange(new HashSet <CsccContextInfo>(model[type])); combinedModel[type] = contexts; } } return(combinedModel); }
/// <summary> /// 通过界面类型来获取一个界面对象 /// </summary> /// <param name="type"></param> /// <returns></returns> public BasePanel GetPanel(UIPanelType type) { if (panelDict == null) { panelDict = new Dictionary <UIPanelType, BasePanel>(); } BasePanel panel = panelDict.TryGet(type); //若还未生成此界面 if (panel == null) { //根据该界面类型从字典里获取实例化的路径 string path = panelPathDict.TryGet(type); GameObject go = GameObject.Instantiate(Resources.Load(path) as GameObject); //添加到画布下,不维持世界坐标 go.transform.SetParent(CanvasTransform, false); panel = go.GetComponent <BasePanel>(); //添加到字典中 panelDict.Add(type, panel); } return(panel); }
public static bool IsVisible(WordTemplateEntity wt, WordTemplateVisibleOn visibleOn) { if (wt.SystemWordTemplate == null) { return(visibleOn == WordTemplateVisibleOn.Single); } if (SystemWordTemplateLogic.HasDefaultTemplateConstructor(wt.SystemWordTemplate)) { return(false); } var entityType = SystemWordTemplateLogic.GetEntityType(wt.SystemWordTemplate.ToType()); if (entityType.IsEntity()) { return(visibleOn == WordTemplateVisibleOn.Single); } var should = VisibleOnDictionary.TryGet(entityType, WordTemplateVisibleOn.Single); return((should & visibleOn) != 0); }
public IFormatProvider GetCurrencyProvider(string currency) { lock (_CurrencyProviders) { if (_CurrencyProviders.Count == 0) { foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures).Where(c => !c.IsNeutralCulture)) { try { _CurrencyProviders.TryAdd(new RegionInfo(culture.LCID).ISOCurrencySymbol, culture); } catch { } } foreach (var network in new BTCPayNetworkProvider(NetworkType.Mainnet).GetAll()) { AddCurrency(_CurrencyProviders, network.CryptoCode, 8, network.CryptoCode); } } return(_CurrencyProviders.TryGet(currency)); } }
/// <summary> /// 根据面板类型得到实例化的面板 /// 字典 panelDict 里有就直接获取,没有就创建 /// </summary> /// <param name="panelType"></param> /// <returns></returns> private BasePanel GetPanel(UIPanelType panelType) { // 初始化字典 if (panelDict == null) { panelDict = new Dictionary <UIPanelType, BasePanel>(); } BasePanel panel = panelDict.TryGet(panelType); // 如果找不到,就找这个面板 Prefab 的路径,然后利用 Resources 加载 Prefab 去实例化面板 if (panel == null) { string path = panelPathDict.TryGet(panelType); // 得到面板对应的路径 GameObject insPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject; // 根据路径,实例化面板 insPanel.transform.SetParent(CanvasTransform, false); // 放在 Canvas 下面 // 判断键是否存在 if (panelDict.ContainsKey(panelType)) { // 若存在则直接修改 value 值 panelDict[panelType] = insPanel.GetComponent <BasePanel>(); } else { // 不存在,放在面板字典里 panelDict.Add(panelType, insPanel.GetComponent <BasePanel>()); } return(insPanel.GetComponent <BasePanel>()); // 返回刚刚实例化的面板 } else // 从字典里找到了,直接返回 { return(panel); } }
/// <summary> /// 根据面板类型得到实例化面板 /// </summary> /// <returns></returns> private BasePanel GetPanel(UIPanelType panelType) { if (_panelDic == null) { _panelDic = new Dictionary <UIPanelType, BasePanel>(); } BasePanel panel = _panelDic.TryGet(panelType); if (panel == null) { PanelInfo info = _panelPathDic.TryGet(panelType); GameObject instPanel = GameObject.Instantiate(Resources.Load(info.path), CanvasTransform, false) as GameObject; instPanel.name = instPanel.name.Replace("(Clone)", ""); if (instPanel.GetComponent <CanvasGroup>() == null) { instPanel.AddComponent <CanvasGroup>(); } // instPanel.transform.SetParent(CanvasTransform, false); //BasePanel p = (BasePanel)Assembly.Load(info.className).CreateInstance(info.className); Assembly assem = Assembly.GetAssembly(typeof(BasePanel)); foreach (Type tChild in assem.GetTypes()) { if (tChild.Name.Equals(info.className)) { object[] param = new object[1]; param[0] = instPanel; tChild.GetMethod("Init").Invoke(this, param); } } _panelDic.Add(panelType, instPanel.GetComponent <BasePanel>()); panel = instPanel.GetComponent <BasePanel>(); panel.OnInit(); } return(panel); }
private void btnExtract_Click(object sender, EventArgs e) { this.DispatchToBackground(() => { var A = new List<AnalyzedActivity>(); using (var dbConn = DatabaseManager.DbConn()) { A.AddRange(dbConn.ExecuteBpl(new TelemetryVehicleActivityGetAll()).Select(a => new AnalyzedActivity { Activity = a })); _report("Activities: {0}", A.Count); for (var i = 0; i < A.Count; i++) { var a = A[i]; a.StartMeters = dbConn.ExecuteBpl(new TelemetryVehicleActivityMetersGetByActivityIdType { ActivityId = a.Activity.ActivityId, RecordType = VehicleMetersRecordType.StartMeters }); a.FinishMeters = dbConn.ExecuteBpl(new TelemetryVehicleActivityMetersGetByActivityIdType { ActivityId = a.Activity.ActivityId, RecordType = VehicleMetersRecordType.FinishMeters }); } A.RemoveAll(a => a.Activity.ActivityType != VehicleMode.Driving || (a.FinishMeters.Odometer - a.StartMeters.Odometer) < (Distance)10); _report("Usable driving activities: {0}", A.Count); var AA = A.ToDictionary(a => a.Activity.ActivityId.ToString(false)); var T = dbConn.ExecuteBpl(new TelemetryGetAll()); _report("Records: {0}", T.Count); var TT = new Dictionary<string, VehicleTelemetry>(); for (var i = 0; i < T.Count; i++) { var dbt = T[i]; if (!dbt.Telemetry.IsManaged) continue; var a = AA.TryGet(dbt.Telemetry.ActivityId.ToString(false)); if (a == null) continue; var t = TT.TryGet(dbt.TelemetryId.ToString(false)); if (t == null) { t = dbt.Telemetry; a.Telemetry.Add(t); TT.Add(dbt.TelemetryId.ToString(false), t); } t.FutureDrivingSteps.Add(dbt.Step); } } A.RemoveAll(a => a.Telemetry.Count == 0); _report("Usable planned driving Activities: {0}", A.Count); // fix: all key in DB are 0 due to client bug in 2.9.7 (fixed in 2.9.8) foreach (var a in A) { // Log.Info("Activity: {0}, {1} records", a.Activity.ActivityId, a.Telemetry.Count); var lastDta = Distance.Undefined; var lastIndex = -1; var firstStepKey = -1; foreach (var t in a.Telemetry) { // Log.Info(" #{0} | {1} | Planned:{2} | {3} - O:{4}, S:{5}, i:{6}", t.RecordNo, t.TimeStamp, t.IsManaged, t.RecordType, t.Odometer, t.Battery.Soc, t.DrivingSegmentIndex); var stepCount = t.FutureDrivingSteps.Count; if (stepCount == 0) { lastDta = Distance.Undefined; lastIndex = -1; firstStepKey = -1; continue; } if (t.RecordType == TelemetryRecordType.DrivingPlanChanged || firstStepKey == -1 || lastIndex == -1) { lastDta = t.FutureDrivingSteps[0].Dta; lastIndex = t.DrivingSegmentIndex; firstStepKey = (int)Distance.ToMeters(t.FutureDrivingSteps[0].Dta); } // fix rule is: // - if index is 0, plan may change, so unless dDistance is 0 or very small - assume plan change // - if index dropped (from X to 0) - assume plan change // - some times index is dropped, but a bit later, so look at large dDistance change, as a fallback // (this is heuristics, but this is the best possible one, even though it's not precise - it's helpful sometimes) // - distance in meters used as a key, to fight cases with round-trip route where two steps have very similar distance (in meters - it will be different) // var dta = t.FutureDrivingSteps[0].Dta; var index = t.DrivingSegmentIndex; var ddta = (dta - lastDta).Abs(); var dindex = (index - lastIndex); if ((index == 0 && ddta < (Distance)0.5) || dindex < 0 || ddta > (Distance)2) { firstStepKey = (int)Distance.ToMeters(t.FutureDrivingSteps[0].Dta); } lastDta = dta; lastIndex = index; t.FutureDrivingSteps[0].Key = firstStepKey; for (var i = 1; i < t.FutureDrivingSteps.Count; i++) { t.FutureDrivingSteps[i].Key = (int)Distance.ToMeters(t.FutureDrivingSteps[i].Dta); } /* var str = ""; foreach (var s in t.FutureDrivingSteps) { str += "{0,7:#.000} | {1,6}, ".Substitute((double)s.Dta, s.Key); } Log.Info(" {0}", str); */ } } _report("Key fix applied"); _report("Saving extracted activities"); _activitiesList = new AnalyzedActivityList(); _activitiesList.Activities.AddRange(A); var formatter = BplXmlFormatter.Minimal; formatter.Format(_activitiesList); var xml = formatter.Output; File.WriteAllText("extracted.bpl", xml); _report("Extracting done"); }); }
private void ReadAnalogChannels(ZipFile zip, string fileName, ChannelList list, out byte[] data, Dictionary<int,decimal> freq) { data = null; int entrySize = c.avbtChannelLength; if (entrySize == 0) return; data = ReadFileContent(zip, fileName); if (data == null) return; this.DataRoot.AddChannelList(list); var rawChannel = analogMappings.GetMapping(entrySize); list.MaxChannelNameLength = rawChannel.Settings.GetInt("lenName")/2; rawChannel.SetDataPtr(data, 0); int count = data.Length / entrySize; for (int slotIndex = 0; slotIndex < count; slotIndex++) { MapAnalogChannel(rawChannel, slotIndex, list, freq.TryGet(slotIndex)); rawChannel.BaseOffset += entrySize; } }