예제 #1
0
        private IEnumerable <IEntityQuad> RemoveTriple(IEntityQuad entityTriple)
        {
            if (_entityQuads.Remove(entityTriple) && entityTriple.Object.IsBlank)
            {
                DecrementRefCount(entityTriple.Object);
            }

            yield return(entityTriple);
        }
예제 #2
0
        public bool Remove(IEntityQuad entityTriple)
        {
            var entity = GetEntityId(entityTriple.EntityId);

            EntityQuads(entityTriple.EntityId).Remove(entityTriple.GetHashCode());
            EntityQuads(entity).Remove(entityTriple.GetHashCode());
            SubjectQuads(entityTriple.Subject).Remove(entityTriple.GetHashCode());
            SubjectPredicateQuads(entityTriple.Subject, entityTriple.Predicate).Remove(entityTriple);
            return(_quads.Remove(entityTriple.GetHashCode()));
        }
예제 #3
0
        public void Add(IEntityQuad quad)
        {
            var entity = GetEntityId(quad.EntityId);

            _quads[quad.GetHashCode()] = quad;
            EntityQuads(entity)[quad.GetHashCode()]                   = quad;
            EntityQuads(quad.EntityId)[quad.GetHashCode()]            = quad;
            SubjectQuads(quad.Subject)[quad.GetHashCode()]            = quad;
            SubjectPredicateQuads(quad.Subject, quad.Predicate)[quad] = quad;
            ObjectIndex(quad.Object)[quad.EntityId.GetHashCode()]     = quad.EntityId;
        }
예제 #4
0
        private void PrepareLists(IEntityQuad list, IEnumerable <IEntityQuad> quads, bool useNativeTypes)
        {
            var localSubject          = list.Subject;
            int anotherPropertyInList = quads.Count(q => q.Subject.Equals(localSubject) && !q.Predicate.Equals(RdfType));
            var firstValues           = quads.Where(q => (q.Subject.Equals(localSubject) && q.Predicate.Equals(RdfFirst))).Select(q => q.Object);
            var firstValue            = firstValues.First();
            var restValue             = list.Object;

            _listInGraph.AddFirst(ReturnListProperties(firstValue, useNativeTypes));
            _nodesInList.Add(localSubject);

            IEnumerable <IEntityQuad> quad = quads.Where(q => (q.Subject.IsBlank && q.Predicate.Equals(RdfRest) && q.Object.Equals(localSubject)));

            if (anotherPropertyInList > 2 || firstValues.Count() > 1)
            {
                if (_listInGraph.Count() > 1)
                {
                    _listInGraph.First.Remove();
                    _nodesInList = _nodesInList.Where(n => !n.Equals(localSubject)).ToList();
                }

                _listInGraph.AddFirst(restValue.ToString());
            }
            else
            if (quad.Count() == 1)
            {
                PrepareLists(quad.First(), quads, useNativeTypes);
            }
            else
            {
                IEnumerable <IEntityQuad> firstQuad = quads.Where(q => (q.Subject.IsBlank && q.Predicate.Equals(RdfFirst) && q.Object.Equals(localSubject)));
                if (firstQuad.Count() == 1)
                {
                    _listInGraph.First.Remove();
                    _nodesInList = _nodesInList.Where(n => !n.Equals(localSubject)).ToList();
                    _listInGraph.AddFirst((restValue.IsBlank && firstValue.IsBlank) ? localSubject.ToString() : restValue.ToString());
                }
                else
                {
                    _listInGraph.AddFirst(localSubject.ToString());
                }
            }
        }
예제 #5
0
 int IComparable <IEntityQuad> .CompareTo(IEntityQuad other)
 {
     return(((IComparable)this).CompareTo(other));
 }
예제 #6
0
 // TODO: Make the GraphEquals method a bit less rigid.
 private bool GraphEquals(IEntityQuad triple, Uri graph)
 {
     return((triple.Graph != null) && ((triple.Graph.Uri.AbsoluteUri == graph.AbsoluteUri) ||
                                       ((triple.Subject.IsBlank) && (graph.AbsoluteUri.EndsWith(triple.Graph.Uri.AbsoluteUri)))));
 }
예제 #7
0
 public bool Contains(IEntityQuad item)
 {
     return(_quads.ContainsKey(item.GetHashCode()));
 }