protected FeatureStruct GetFeatureStruct(FeatureSystem featSys, IDictionary<IFsFeatDefn, object> values)
{
var fs = new FeatureStruct();
foreach (KeyValuePair<IFsFeatDefn, object> kvp in values)
{
if (kvp.Key is IFsComplexFeature)
{
var childValues = (IDictionary<IFsFeatDefn, object>) kvp.Value;
fs.AddValue(featSys.GetFeature(kvp.Key.Hvo.ToString(CultureInfo.InvariantCulture)), GetFeatureStruct(featSys, childValues));
}
else if (kvp.Key is IFsClosedFeature)
{
var value = (ClosedFeatureValue) kvp.Value;
var symFeat = featSys.GetFeature<SymbolicFeature>(kvp.Key.Hvo.ToString(CultureInfo.InvariantCulture));
FeatureSymbol symbol = symFeat.PossibleSymbols[value.Symbol.Hvo.ToString(CultureInfo.InvariantCulture)];
fs.AddValue(symFeat, value.Negate ? new SymbolicFeatureValue(symFeat.PossibleSymbols.Except(symbol.ToEnumerable())) : new SymbolicFeatureValue(symbol));
}
}
return fs;
}
}