private void CopyOnWrite() { if (_referenceCount.Count > 1) { _data = new EntityData(_data); _referenceCount.Decrement(); _referenceCount = (Settings.ParallelClone ? (IReferenceCount) new ReferenceCountInterlocked() : new ReferenceCount()); } }
protected internal Entity(Entity cloneFrom) { _fuzzyHash = cloneFrom._fuzzyHash; _referenceCount = cloneFrom._referenceCount; if (Settings.CopyOnWrite) { _data = cloneFrom._data; _referenceCount.Increment(); } else { _data = new EntityData(cloneFrom._data); } }
protected internal Entity(Card card, Dictionary <GameTag, int> tags = null) { _data = new EntityData(card, tags); _referenceCount = (Settings.ParallelClone ? (IReferenceCount) new ReferenceCountInterlocked() : new ReferenceCount()); }