/// <summary> /// Registers item and returns true if it was registered, false if this named instance already existed and was replaced /// </summary> public bool RegisterOrReplace(T item, out T existing) { ((object)item).NonNull(nameof(item)); bool hadExisting; lock (m_Sync) { var data = new RegistryDictionary <T>(m_CaseSensitive, m_Data); if (data.TryGetValue(item.Name, out existing)) { hadExisting = true; data[item.Name] = item; JustReplaced(existing, item); } else { hadExisting = false; existing = default(T);//safeguard data.Add(item.Name, item); JustRegistered(item); } Thread.MemoryBarrier(); m_Data = data; //atomic } return(!hadExisting); }
/// <summary> /// Registers item and returns true if it was registered, false if this named instance already existed and was replaced /// </summary> public bool RegisterOrReplace(T item, out T existing) { bool hadExisting; lock (m_Sync) { var data = new RegistryDictionary <T>(m_CaseSensitive, m_Data); if (data.TryGetValue(item.Name, out existing)) { hadExisting = true; data[item.Name] = item; JustReplaced(existing, item); } else { hadExisting = false; existing = default(T);//safeguard data.Add(item.Name, item); JustRegistered(item); } m_Data = data; //atomic } return(hadExisting); }
/// <summary> /// Unregisters item by name and returns true if it was unregistered, false if it did not exist /// </summary> public bool Unregister(string name) { lock (m_Sync) { T item; if (!m_Data.TryGetValue(name, out item)) { return(false); } var data = new RegistryDictionary <T>(m_CaseSensitive, m_Data); data.Remove(name); JustUnregistered(item); m_Data = data; //atomic } return(true); }
/// <summary> /// Registers item and returns true if it was registered, false if this named instance already existed and was replaced /// </summary> public bool RegisterOrReplace(T item, out T existing) { lock (m_Sync) { var data = new RegistryDictionary <T>(m_CaseSensitive, m_Data); if (data.TryGetValue(item.Name, out existing)) { data[item.Name] = item; JustReplaced(existing, item); } else { existing = default(T);//safeguard data.Add(item.Name, item); JustRegistered(item); } m_Data = data; } return(existing == null); }