/// <summary> /// Traverses the structure layout in order of field definition and /// calls a method defined in an ICacheStructureLayoutVisitor for each field /// in the structure. /// </summary> /// <param name="visitor">The ICacheStructureLayoutVisitor that should visit each structure field.</param> public void Accept(ICacheStructureLayoutVisitor visitor) { foreach (ILayoutField field in _fields) { if (field is PrimitiveLayoutField primitive) { primitive.Accept(visitor); } else if (field is CacheLayoutField cache) { cache.Accept(visitor); } else { throw new NotImplementedException($"Unhandled field type {field.GetType().Name}."); } } }
/// <summary> /// Accepts an ICacheStructureLayoutVisitor, calling the VisitTagReference method on it. /// </summary> /// <param name="visitor">The ICacheStructureLayoutVisitor to accept.</param> public override void Accept(ICacheStructureLayoutVisitor visitor) { visitor.VisitTagBlockField(Name, Offset, _layout); }
/// <summary> /// Accepts an ICacheStructureLayoutVisitor, calling the VisitTagReference method on it. /// </summary> /// <param name="visitor">The ICacheStructureLayoutVisitor to accept.</param> public override void Accept(ICacheStructureLayoutVisitor visitor) { visitor.VisitTagReferenceField(Name, Offset, _withGroup); }
/// <summary> /// Accepts an ICacheStructureLayoutVisitor, calling the VisitStringID method on it. /// </summary> /// <param name="visitor">The ICacheStructureLayoutVisitor to accept.</param> public override void Accept(ICacheStructureLayoutVisitor visitor) { visitor.VisitStringIDField(Name, Offset); }
/// <summary> /// Depending on the type of the field, calls a corresponding method defined in the visitor object. /// </summary> /// <param name="visitor">The ICacheStructureLayoutVisitor to accept.</param> public abstract void Accept(ICacheStructureLayoutVisitor visitor);