private void defaultLink(SLComponent root, SLComponent com) { root.LinkTo(com); var ptr = SLPointer.Index(com._index); root.insert(ref ptr, com); }
public void Sweep(ComponentType type) { var ptr = SLPointer.Type(type); if (_groups.TryGetValue(ptr, out SLWrapper group)) { return; } if (0 == group.Sweep()) { _groups.Remove(ptr); } }
private void insert(ref SLPointer ptr, SLComponent com) { if (null == com) { throw new ArgumentNullException($"[{this.ToString()}] this com can't link to null component."); } if (!_groups.TryGetValue(ptr, out SLWrapper wrapper)) { wrapper = new SLWrapper(com); _groups.Add(ptr, wrapper); } else { wrapper.Add(com); } }
public void OnDeserialized(ref Library.Reader reader, SLComponent streamingComponent) { var read = true; read &= reader.ReadInt(out int groupCount); Library.Logger.Assert(read, "[OnDeserialized] fail to read component: linkedCount"); for (int i = 0; i != groupCount; i++) { var ptr = new SLPointer(); ptr.OnDeserialized(ref reader, null); read &= reader.ReadInt(out int childCount); Library.Logger.Assert(read, "[OnDeserialized] fail to read component: type|value|rootFakeIndex|childCount"); var wrapper = new SLWrapper(); for (int k = 0; k != childCount; k++) { read &= reader.ReadInt(out int fakeIndex); Library.Logger.Assert(read, "[OnDeserialized] fail to read component: fakeIndex"); var child = streamingComponent.Find(fakeIndex); wrapper.Add(child.First()); } _groups.Add(ptr, wrapper); } read &= reader.ReadInt(out int propCount); Library.Logger.Assert(read, "[OnDeserialized] fail to read component: propCount"); for (int i = 0; i != propCount; i++) { read &= reader.ReadInt(out int propIndex); read &= reader.ReadInt(out int propSize); Library.Logger.Assert(read, "[OnDeserialized] fail to read component: propIndex|propSize"); var propType = Property.PropertyAttribute.GetProperty(propIndex); unsafe { var propPtr = this.Get(propType); reader.ReadMemory((void *)propPtr, propSize); } } }
public void UnlinkTo(object key) { var ptr = SLPointer.Reference(key); remove(ref ptr); }
public void UnlinkTo(string key) { var ptr = SLPointer.Text(key); remove(ref ptr); }
public void UnlinkTo(int handle) { var ptr = SLPointer.Handle(handle); remove(ref ptr); }
public void UnlinkTo(ComponentType type) { var ptr = SLPointer.Type(type); remove(ref ptr); }
public void LinkTo(object key, SLComponent com) { var ptr = SLPointer.Reference(key); insert(ref ptr, com); }
public SLWrapper Find(object key) => _groups[SLPointer.Reference(key)];
public bool TryFind(object key, out SLWrapper wrap) => _groups.TryGetValue(SLPointer.Reference(key), out wrap);
public void LinkTo(SLComponent com) { var ptr = SLPointer.Type(com.Type); insert(ref ptr, com); }
public bool TryFind(string key, out SLWrapper wrap) => _groups.TryGetValue(SLPointer.Text(key), out wrap);
public bool TryFind(int handle, out SLWrapper wrap) => _groups.TryGetValue(SLPointer.Handle(handle), out wrap);
public bool TryFind(ComponentType type, out SLWrapper wrap) => _groups.TryGetValue(SLPointer.Type(type), out wrap);
private void remove(ref SLPointer ptr) { _groups.Remove(ptr); }
public SLWrapper Find(int handle) => _groups[SLPointer.Handle(handle)];
public void LinkTo(int handle, SLComponent com) { var ptr = SLPointer.Handle(handle); insert(ref ptr, com); }
public SLWrapper Find(string key) => _groups[SLPointer.Text(key)];
public void LinkTo(string key, SLComponent com) { var ptr = SLPointer.Text(key); insert(ref ptr, com); }
public SLWrapper Find(ComponentType type) => _groups[SLPointer.Type(type)];