void list(out QLList QLList) { QLList = new QLList(); Expect(4); QLPart QLPart; part(out QLPart); QLList.Add(QLPart); while (la.kind == 11) { Get(); part(out QLPart); QLList.Add(QLPart); } Expect(5); }
public void SetInversePropertyVal(QLEntity entity, string propertyName, QLEntityId qlEntityId, bool deleteOld) { var index = repository.InversePropertyIndex(entity.ClassName, propertyName); var part = entity.QlInverseList.List[index]; if (deleteOld || (part.QLEntityId == null && part.QLList == null)) { entity.QlInverseList.List[index] = new QLPart() { QLEntityId = qlEntityId } } ; else { if (part.QLEntityId != null) { var list = new QLList(); list.Add(new QLPart() { QLEntityId = part.QLEntityId }); list.Add(new QLPart() { QLEntityId = qlEntityId }); part.QLEntityId = null; part.QLList = list; } else { part.QLList.Add(new QLPart() { QLEntityId = qlEntityId }); } } }
public void SetInverseValues(QLEntity entity, QLList list, int level, int propIndex, Dictionary <int, QLEntity> idToEntity) { var className = entity.ClassName; if (classesToSkipInverse.Contains(className)) //has list of lists and no inverse attributes { return; } for (int i = 0; i < list.List.Count; i++) { var part = list.List[i]; var currentPropIndex = level == 0 ? i : propIndex; //class lookup var propName = repository.DirectProperty(className, currentPropIndex).PropName; List <Tuple <string, string, string> > invertedAttribute = null; if (invertedAttributeReversed.ContainsKey(className)) { invertedAttribute = invertedAttributeReversed[className].ToList(); } if (part.QLEntityId != null) { var referencedWrapper = idToEntity[part.QLEntityId.Id]; //direct attributes if (string.IsNullOrEmpty(part.QLEntityId.ConcreteType)) { part.QLEntityId.ConcreteType = referencedWrapper.ClassName; } var inverseAttributeTarget = invertedAttribute?.FirstOrDefault(a => a.Item1 == propName && a.Item3 == referencedWrapper.ClassName); if (inverseAttributeTarget != null) { var inverseList = referencedWrapper.QlInverseList; var inverseCount = repository.InversePropertyCount(referencedWrapper.ClassName); if (inverseList == null) { var ifcList = new QLList(); for (int j = 0; j < inverseCount; j++) { ifcList.Add(new QLPart()); } referencedWrapper.QlInverseList = ifcList; } SetInversePropertyVal(referencedWrapper, inverseAttributeTarget.Item2, entity.QlEntityId, false); } } if (part.QLList != null) { propIndex = i; SetInverseValues(entity, part.QLList, level + 1, propIndex, idToEntity); } } }