public ElementType GetElement(Identifier ID) { return(Lock.Execute(() => { ReferencePair referencePair = FindPair(ID); referencePair.ReferenceCount++; return referencePair.Element; })); }
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); }
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); } }); }
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); }
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); }
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); }