public TGeoData GetGeometry <TGeoData>(GeometryPoolComponent com) where TGeoData : IGeometryData { if (!pool.TryGetValue(com.Key, out var geo)) { throw new Exception("Can't obtain geometry."); } return((TGeoData)geo); }
/// <summary> /// /// </summary> /// <param name="geo"> /// DO NOT USE GeometryData AFTER PASSING TO METHOD /// COLLECTIONS ARE USED DIRECTLY /// </param> /// <returns></returns> public GeometryPoolComponent AddGeometry <TGeoData>(TGeoData geo) where TGeoData : IGeometryData { var id = Guid.NewGuid(); if (!pool.TryAdd(id, geo)) { throw new Exception("Can't store geometry."); } return(GeometryPoolComponent.Create(id)); }
/// <summary> /// /// </summary> /// <param name="newGeo"> /// DO NOT USE GeometryData AFTER PASSING TO METHOD /// COLLECTIONS ARE USED DIRECTLY /// </param> /// <returns></returns> public GeometryPoolComponent UpdateGeometry <TGeoData>(GeometryPoolComponent old, TGeoData newGeo) where TGeoData : IGeometryData { var id = Guid.NewGuid(); if (!pool.TryAdd(id, newGeo)) { throw new Exception("Can't store geometry."); } if (old.IsValid) { sync.Add((_this, c) => { if (pool.TryRemove(c.Key, out var oldgeo)) { oldgeo.Dispose(); } return(true); }, old); } return(GeometryPoolComponent.Create(id)); }