Exemple #1
0
 public ElementType GetElement(Identifier ID)
 {
     return(Lock.Execute(() =>
     {
         ReferencePair referencePair = FindPair(ID);
         referencePair.ReferenceCount++;
         return referencePair.Element;
     }));
 }
Exemple #2
0
        private void AddToReferenceToIdMap(object value, uint reference)
        {
            if (_objectToReferenceCount >= _objectToReference.Length)
            {
                var old = _objectToReference;
                _objectToReference = new ReferencePair[_objectToReference.Length * 2];
                Array.Copy(old, _objectToReference, _objectToReferenceCount);
            }

            _objectToReference[_objectToReferenceCount++] = new ReferencePair(reference, value);
        }
        public void ReturnsSame()
        {
            var o1    = new object();
            var o2    = new object();
            var pair1 = ReferencePair.GetOrCreate(o1, o2);
            var pair2 = ReferencePair.GetOrCreate(o1, o2);

            Assert.AreSame(pair1, pair2);
            Assert.AreSame(pair1.Value.X, o1);
            Assert.AreSame(pair1.Value.Y, o2);
        }
Exemple #4
0
 public void ReleaseElement(Identifier ID)
 {
     Lock.Execute(() =>
     {
         ReferencePair referencePair = m_referenceCounting[ID];
         referencePair.ReferenceCount--;
         if (referencePair.ReferenceCount == 0)
         {
             Logger.Log(LogLevel.Detail, "Released memory of element \"{0}\".", ID);
             m_referenceCounting.Remove(ID);
         }
     });
 }
Exemple #5
0
        public void ReturnsDifferentAfterDispose()
        {
            var o1 = new object();
            var o2 = new object();

            using (var pair1 = ReferencePair.GetOrCreate(o1, o2))
            {
                using (var pair2 = ReferencePair.GetOrCreate(o1, o2))
                {
                    Assert.AreSame(pair1, pair2);
                    Assert.AreSame(pair1.Value.X, o1);
                    Assert.AreSame(pair1.Value.Y, o2);
                }
            }
        }
        public void ReturnsDifferentForDifferentKeys()
        {
            var o1    = new object();
            var o2    = new object();
            var o3    = new object();
            var pair1 = ReferencePair.GetOrCreate(o1, o2);
            var pair2 = ReferencePair.GetOrCreate(o1, o3);

            Assert.AreNotSame(pair1, pair2);
            Assert.AreSame(pair1.Value.X, o1);
            Assert.AreSame(pair1.Value.Y, o2);

            Assert.AreSame(pair2.Value.X, o1);
            Assert.AreSame(pair2.Value.Y, o3);
        }
Exemple #7
0
        private void AddToReferences(object value, uint reference)
        {
            if (ReferenceToObjectCount >= _referenceToObject.Length)
            {
                GrowReferenceToObjectArray();
            }

            if (TryGetReferencedObject(reference, out var existing) && !(existing is UnknownFieldMarker) && !(value is UnknownFieldMarker))
            {
                // Unknown field markers can be replaced once the type is known.
                ThrowReferenceExistsException(reference);
                return;
            }

            _referenceToObject[ReferenceToObjectCount++] = new ReferencePair(reference, value);
        }
        public void GetOrAddUsingReferencePair()
        {
            var x    = new object();
            var y    = new object();
            var pair = ReferencePair.GetOrCreate(x, y);

            Assert.AreEqual(pair.Count, 1);
            var settings = PropertiesSettings.GetOrCreate(ReferenceHandling.Structural);

            using (var created = TrackerCache.GetOrAdd(x, y, settings, p => p))
            {
                Assert.AreSame(pair, created.Value);
                Assert.AreEqual(pair.Count, 2);
            }

            Assert.AreEqual(1, pair.Count);

            pair.Dispose();
            Assert.AreEqual(0, pair.Count);
        }
Exemple #9
0
    private static SelectionSearchResponse RequestSearch(Component[] allComps, SelectionSearchRequest req)
    {
        var resp = new SelectionSearchResponse
        {
            request        = req,
            referencePairs = new List <ReferencePair>()
        };

        var goType         = typeof(GameObject);
        var spriteType     = typeof(Sprite);
        var textureType    = typeof(Texture2D);
        var targetObjects  = req.targetObjects;
        var selectedObject = req.selectedObject;

        //All components in scene
        foreach (var sComp in allComps)
        {
            var type   = sComp.GetType();
            var fields = type.GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);

            //All fields in that component
            foreach (var field in fields)
            {
                {
                    var fieldType    = field.FieldType;
                    var isFieldArray = fieldType.IsArray;


                    foreach (var targetObject in targetObjects)
                    {
                        System.Type targetType = targetObject.GetType();
                        if (isFieldArray && IsAssignableFrom(fieldType, targetType))
                        {
                            var array = field.GetValue(sComp) as IList;
                            if (array != null)
                            {
                                var index = 0;
                                foreach (Object fieldValue in array)
                                {
                                    if (AreEqual(fieldValue, targetObject))
                                    {
                                        var pair = new ReferencePair()
                                        {
                                            referenceOwnerObject = sComp,
                                            targetObject         = fieldValue,
                                            referenceFiledName   = field.Name,
                                            referenceArrayIndex  = index
                                        };
                                        resp.referencePairs.Add(pair);
                                    }
                                    index++;
                                }
                            }
                        }

                        if (IsAssignableFrom(fieldType, targetType))
                        {
                            var fieldValue = field.GetValue(sComp) as Object;
                            if (AreEqual(fieldValue, targetObject))
                            {
                                var pair = new ReferencePair()
                                {
                                    referenceOwnerObject = sComp,
                                    targetObject         = fieldValue,
                                    referenceFiledName   = field.Name,
                                };
                                resp.referencePairs.Add(pair);
                            }
                        }
                    }
                }
            }
        }

        string[] searchInFolders = new string[] { "Assets" };
        string   dataPath        = Application.dataPath.Replace("Assets", "");

        foreach (var item in resp.referencePairs)
        {
            if (item.referenceOwnerObject is Component)
            {
                var guids = AssetDatabase.FindAssets("t:Script " + item.referenceOwnerObject.GetType().Name, searchInFolders);
                if (guids.Length > 0)
                {
                    string assetPath = AssetDatabase.GUIDToAssetPath(guids[0]);
                    item.referenceOwnerScriptPath = assetPath;
                    string path = dataPath + assetPath;
                    item.scriptObject = AssetDatabase.LoadAssetAtPath <TextAsset>(assetPath);
                    if (item.scriptObject != null)
                    {
                        using (StreamReader sr = new StreamReader(path))
                        {
                            int linecount = 1;
                            while (!sr.EndOfStream)
                            {
                                var line = sr.ReadLine();
                                if (line.Contains(item.referenceFiledName))
                                {
                                    item.referenceFiledLineNumber = linecount;
                                    break;
                                }
                                linecount++;
                            }
                        }
                    }
                }
            }
        }

        return(resp);
    }