コード例 #1
0
ファイル: SLComponentFactory.cs プロジェクト: dkwkekzz/Test
            private void defaultLink(SLComponent root, SLComponent com)
            {
                root.LinkTo(com);
                var ptr = SLPointer.Index(com._index);

                root.insert(ref ptr, com);
            }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
                }
            }
        }
コード例 #5
0
        public void UnlinkTo(object key)
        {
            var ptr = SLPointer.Reference(key);

            remove(ref ptr);
        }
コード例 #6
0
        public void UnlinkTo(string key)
        {
            var ptr = SLPointer.Text(key);

            remove(ref ptr);
        }
コード例 #7
0
        public void UnlinkTo(int handle)
        {
            var ptr = SLPointer.Handle(handle);

            remove(ref ptr);
        }
コード例 #8
0
        public void UnlinkTo(ComponentType type)
        {
            var ptr = SLPointer.Type(type);

            remove(ref ptr);
        }
コード例 #9
0
        public void LinkTo(object key, SLComponent com)
        {
            var ptr = SLPointer.Reference(key);

            insert(ref ptr, com);
        }
コード例 #10
0
 public SLWrapper Find(object key) => _groups[SLPointer.Reference(key)];
コード例 #11
0
 public bool TryFind(object key, out SLWrapper wrap) => _groups.TryGetValue(SLPointer.Reference(key), out wrap);
コード例 #12
0
        public void LinkTo(SLComponent com)
        {
            var ptr = SLPointer.Type(com.Type);

            insert(ref ptr, com);
        }
コード例 #13
0
 public bool TryFind(string key, out SLWrapper wrap) => _groups.TryGetValue(SLPointer.Text(key), out wrap);
コード例 #14
0
 public bool TryFind(int handle, out SLWrapper wrap) => _groups.TryGetValue(SLPointer.Handle(handle), out wrap);
コード例 #15
0
 public bool TryFind(ComponentType type, out SLWrapper wrap) => _groups.TryGetValue(SLPointer.Type(type), out wrap);
コード例 #16
0
 private void remove(ref SLPointer ptr)
 {
     _groups.Remove(ptr);
 }
コード例 #17
0
 public SLWrapper Find(int handle) => _groups[SLPointer.Handle(handle)];
コード例 #18
0
        public void LinkTo(int handle, SLComponent com)
        {
            var ptr = SLPointer.Handle(handle);

            insert(ref ptr, com);
        }
コード例 #19
0
 public SLWrapper Find(string key) => _groups[SLPointer.Text(key)];
コード例 #20
0
        public void LinkTo(string key, SLComponent com)
        {
            var ptr = SLPointer.Text(key);

            insert(ref ptr, com);
        }
コード例 #21
0
 public SLWrapper Find(ComponentType type) => _groups[SLPointer.Type(type)];