Пример #1
0
 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);
 }
Пример #2
0
        /// <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));
        }
Пример #3
0
        /// <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));
        }