private static void OutputMids(PredicateAndObjects predAndObjects, HashSet <string> alreadyOutput = null) { if (alreadyOutput == null) { alreadyOutput = new HashSet <string>(); } foreach (FBObject fbObj in predAndObjects.Objects) { if (fbObj is SimpleFBObject) { SimpleFBObject simpleFBObj = fbObj as SimpleFBObject; Console.WriteLine(simpleFBObj.Mid); } else if (fbObj is CVTFBObject) { CVTFBObject cvtObj = fbObj as CVTFBObject; Console.WriteLine(cvtObj.Mid); if (!alreadyOutput.Contains(cvtObj.Mid)) { alreadyOutput.Add(cvtObj.Mid); foreach (PredicateAndObjects cvtObject in cvtObj.Objects) { OutputMids(cvtObject, alreadyOutput); } } } } }
private static void OutputPredicateAndObjects(PredicateAndObjects predAndObjects, HashSet <string> alreadyOutput = null, int indent = 0) { if (alreadyOutput == null) { alreadyOutput = new HashSet <string>(); } if (indent != 0) { Console.Write(new string(' ', indent)); } Console.Write(string.Format("{0,-40} --> ", predAndObjects.Predicate)); bool newlineWritten = false; foreach (FBObject fbObj in predAndObjects.Objects) { if (newlineWritten) { Console.Write(string.Format("{0,-40} --> ", "")); } if (fbObj is ValueFBObject) { Console.WriteLine((fbObj as ValueFBObject).Value); } else if (fbObj is SimpleFBObject) { SimpleFBObject simpleFBObj = fbObj as SimpleFBObject; Console.WriteLine((simpleFBObj.Name ?? "[no name]") + " (" + simpleFBObj.Mid + ")"); if (simpleFBObj.Objects != null) { if (!alreadyOutput.Contains(simpleFBObj.Mid)) { alreadyOutput.Add(simpleFBObj.Mid); foreach (PredicateAndObjects Object in simpleFBObj.Objects) { OutputPredicateAndObjects(Object, alreadyOutput, indent + 4); } } } } else if (fbObj is CVTFBObject) { CVTFBObject cvtObj = fbObj as CVTFBObject; Console.WriteLine("CVT (" + cvtObj.Mid + ")"); if (!alreadyOutput.Contains(cvtObj.Mid)) { alreadyOutput.Add(cvtObj.Mid); foreach (PredicateAndObjects cvtObject in cvtObj.Objects) { OutputPredicateAndObjects(cvtObject, alreadyOutput, indent + 4); } } } else { Console.WriteLine("[Unknown object: " + fbObj); } newlineWritten = true; } }