private ISensoryUnit GetOrCreateSensoryUnit(SensoryTypes senseType, string value) { ISensoryUnit result = new SensoryUnit(senseType, value, IS_SAVEABLE_UNIT); if (_kownSensoryUnits.Contains(result)) { result = _kownSensoryUnits[_kownSensoryUnits.IndexOf(result)]; } else { _kownSensoryUnits.Add(result); _kownSensoryUnits.Sort(); } return(result); }
static public ISensoryPattern Parse(string text) { if (string.IsNullOrEmpty(text)) { return(null); } string parseText = text.Trim(); if (!parseText.StartsWith("{") || !parseText.EndsWith("}")) { return(null); } parseText = parseText.Substring(1, parseText.Length - 2); string[] splits = parseText.Split(new[] { ',' }); if (splits.Length != 2) { return(null); } DirectionTypes direction = (DirectionTypes)Enum.Parse(typeof(DirectionTypes), splits[0].Trim(), true); string sensoryUnitsText = splits[1].Trim(); if (sensoryUnitsText.Length >= 2) { sensoryUnitsText = sensoryUnitsText.Substring(1, sensoryUnitsText.Length - 2); } else { sensoryUnitsText = string.Empty; } string[] sensoryUnitSplittedText = sensoryUnitsText.Split(new[] { ';' }); List <ISensoryUnit> sensoryUnits = new List <ISensoryUnit>(); foreach (string sensoryUnitText in sensoryUnitSplittedText) { sensoryUnits.Add(SensoryUnit.Parse(sensoryUnitText)); } return(new SensoryPattern(direction, sensoryUnits)); }
static public IPartialSnapshotCompressionNode Parse(string text) { if (string.IsNullOrEmpty(text)) { return(null); } string parseText = text.Trim(); if (!parseText.StartsWith("{") || !parseText.EndsWith("}")) { return(null); } parseText = parseText.Substring(1, parseText.Length - 2); int seperatorIndex = parseText.IndexOf(':'); var unitParseText = seperatorIndex > 0 ? parseText.Substring(0, seperatorIndex) : parseText; var unit = SensoryUnit.Parse(unitParseText); var result = new PartialSnapshotCompressionNode(unit); if (seperatorIndex > 0) { string childCountParseText = parseText.Substring(seperatorIndex + 1).Trim(); if (childCountParseText.Length > 2) { childCountParseText = childCountParseText.Substring(1, childCountParseText.Length - 2); int multiplierIndex = childCountParseText.IndexOf('*'); int childCount = int.Parse(childCountParseText.Substring(0, multiplierIndex)); string childParseText = childCountParseText.Substring(multiplierIndex + 1); var child = Parse(childParseText); for (int i = 0; i < childCount; i++) { result.ChildNodes.Add(new PartialSnapshotCompressionNode(child.Unit)); } } } return(result); }