Example #1
0
        public void RemoveToken(T token)
        {
            UInt32 id;

            if (ValueToId.TryGetValue(token, out id))
            {
                _IdToValue.Remove(id);
                _valueToId.Remove(token);
                var v = _tokenMap[id];
                v.Unpersist(Session);
                _tokenMap.Remove(id);
            }
        }
Example #2
0
 bool RemovePropertyValueT(ElementId oid, out T pv)
 {
     if (m_propertyValue.TryGetValue(oid, out pv))
     {
         m_propertyValue.Remove(oid);
         if (m_valueIndex != null)
         {
             if (m_valueIndex.TryGetKey(pv, ref pv))
             {
                 BTreeSet <ElementId> oidArray = m_valueIndex[pv];
                 if (oidArray.Count > 1)
                 {
                     oidArray.Remove(oid);
                 }
                 else
                 {
                     oidArray.Unpersist(Session);
                     m_valueIndex.Remove(pv);
                 }
             }
         }
         else if (m_valueIndexUnique != null)
         {
             m_valueIndexUnique.Remove(pv);
         }
         return(true);
     }
     return(false);
 }
Example #3
0
        /// <summary>
        /// Removing an edge from this edge type
        /// </summary>
        /// <param name="edge">an edge to remove</param>
        public void RemoveEdge(Edge edge)
        {
            if (Unrestricted)
            {
                UnrestrictedEdge unrestrictedEdge = m_unrestrictedEdges[edge.EdgeId];
                unrestrictedEdge.Unpersist(Session);
                m_unrestrictedEdges.Remove(edge.EdgeId);
            }
            else
            {
                m_restrictedEdges.Remove(edge.EdgeId);
            }
            if (m_birectional)
            {
                edge.Tail.VertexType.RemoveTailToHeadEdge(edge);
                edge.Head.VertexType.RemoveHeadToTailEdge(edge);
            }
            else
            {
                edge.Tail.VertexType.RemoveTailToHeadEdge(edge);
            }
            foreach (string key in GetPropertyKeys())
            {
                edge.RemoveProperty(key);
            }
            Range <EdgeId> range = new Range <EdgeId>(edge.EdgeId, edge.EdgeId);
            bool           isEqual;
            var            edgeRanges = EdgeRanges;
            int            pos        = edgeRanges.BinarySearch(range, out isEqual);

            if (pos >= 0)
            {
                if (pos == edgeRanges.Count || (pos > 0 && edgeRanges[pos].Min > edge.EdgeId))
                {
                    --pos;
                }
                range = edgeRanges[pos];
                if (range.Min == edge.EdgeId)
                {
                    if (range.Max == edge.EdgeId)
                    {
                        edgeRanges.RemoveAt(pos);
                    }
                    else
                    {
                        edgeRanges[pos] = new Range <EdgeId>(range.Min + 1, range.Max);
                    }
                }
                else if (range.Max == edge.EdgeId)
                {
                    edgeRanges[pos] = new Range <EdgeId>(range.Min, range.Max + 1);
                }
                else
                {
                    edgeRanges[pos] = new Range <EdgeId>(range.Min, edge.EdgeId - 1);
                    edgeRanges.Insert(pos + 1, new Range <EdgeId>(edge.EdgeId + 1, range.Max));
                }
            }
        }