private bool m_fSeq; // whether m_flidSource is a sequence property. /// ------------------------------------------------------------------------------------ /// <summary> /// Initializes a new instance of the <see cref="T:NeededPropertyInfo"/> class. /// </summary> /// <param name="listItemsClass">the class of objects at the root parent of the NeedPropertyInfo tree. /// Typically the destination class of flidSource</param> /// ------------------------------------------------------------------------------------ public NeededPropertyInfo(int listItemsClass) { m_targetClass = listItemsClass; m_flidSource = 0; // don't really how we got to the root parent class. m_parent = null; m_fSeq = true; }
public void TestSeqProps() { NeededPropertyInfo info1 = new NeededPropertyInfo(1); NeededPropertyInfo info2 = info1.AddObjField(2, true); NeededPropertyInfo info2b = info1.AddObjField(2, true); Assert.AreSame(info2, info2b); // did't make a duplicate NeededPropertyInfo info3 = info1.AddObjField(3, true); info2b = info1.AddObjField(2, true); Assert.AreSame(info2, info2b); // can still find (2) NeededPropertyInfo info3b = info1.AddObjField(3, true); Assert.AreSame(info3, info3b); // also rediscovers ones that aren't first NeededPropertyInfo info4 = info1.AddObjField(4, true); info2b = info1.AddObjField(2, true); Assert.AreSame(info2, info2b); // can still find (2) with 3 items info3b = info1.AddObjField(3, true); Assert.AreSame(info3, info3b); // can rediscover mid-seq NeededPropertyInfo info4b = info1.AddObjField(4, true); Assert.AreSame(info4, info4b); // also rediscovers ones that aren't first // Now recursive NeededPropertyInfo info5 = info2.AddObjField(5, true); NeededPropertyInfo info5b = info1.AddObjField(2, true).AddObjField(5, true); Assert.AreSame(info5, info5b); // recursive works too. }
/// ------------------------------------------------------------------------------------ /// <summary> /// Add (or retrieve) info about a object (atomic or seq) flid. May include virtuals. /// </summary> /// <param name="flid">The flid.</param> /// <param name="fSeq">if set to <c>true</c> [f seq].</param> /// <returns></returns> /// ------------------------------------------------------------------------------------ public NeededPropertyInfo AddObjField(int flid, bool fSeq) { NeededPropertyInfo info = m_sequenceInfo.Find(delegate(NeededPropertyInfo item) { return(item.Source == flid); }); if (info == null) { info = new NeededPropertyInfo(flid, this, fSeq); m_sequenceInfo.Add(info); } return(info); }
/// ------------------------------------------------------------------------------------ /// <summary> /// Initializes a new instance of the <see cref="T:NeededPropertyInfo"/> class. /// </summary> /// <param name="flidSource">The flid source.</param> /// <param name="parent">The parent.</param> /// <param name="fSeq">if set to <c>true</c> [f seq].</param> /// ------------------------------------------------------------------------------------ protected NeededPropertyInfo(int flidSource, NeededPropertyInfo parent, bool fSeq) { m_flidSource = flidSource; m_parent = parent; m_fSeq = fSeq; }
public VirtualNeededPropertyInfo(int flidSource, NeededPropertyInfo parent, bool fSeq, int dstClsId) : base(flidSource, parent, fSeq) { m_targetClass = dstClsId; }
/// ------------------------------------------------------------------------------------ /// <summary> /// Add (or retrieve) info about a object (atomic or seq) flid. May include virtuals. /// </summary> /// <param name="flid">The flid.</param> /// <param name="fSeq">if set to <c>true</c> [f seq].</param> /// <returns></returns> /// ------------------------------------------------------------------------------------ public NeededPropertyInfo AddObjField(int flid, bool fSeq) { NeededPropertyInfo info = m_sequenceInfo.Find(delegate(NeededPropertyInfo item) { return item.Source == flid; }); if (info == null) { info = new NeededPropertyInfo(flid, this, fSeq); m_sequenceInfo.Add(info); } return info; }