Set() public method

public Set ( int index ) : void
index int
return void
示例#1
0
        internal override BitSet Lastpos(int positions)
        {
            if (last == null)
            {
                last = new BitSet(positions);
                last.Set(pos);
            }

            return(last);
        }
示例#2
0
        internal override BitSet Firstpos(int positions)
        {
            if (first == null)
            {
                first = new BitSet(positions);
                first.Set(pos);
            }

            return(first);
        }
 internal bool AddAllElement(XmlQualifiedName qname, bool required)
 {
     if (symbolTable[qname] == null)
     {
         int i = symbolTable.Count;
         if (required)
         {
             allElementsSet.Set(i);
         }
         symbolTable.Add(qname, i);
         symbols.Add(qname);
         return(true);
     }
     else
     {
         return(false);
     }
 }
示例#4
0
        private BitSet[] CalculateTotalFollowposForRangeNodes(BitSet firstpos, BitSet[] followpos, out BitSet posWithRangeTerminals)
        {
            int count = this.positions.Count;

            posWithRangeTerminals = new BitSet(count);
            BitSet[] setArray = new BitSet[this.minMaxNodesCount];
            int      index    = 0;

            for (int i = count - 1; i >= 0; i--)
            {
                Position position = this.positions[i];
                if (position.symbol == -2)
                {
                    LeafRangeNode particle = position.particle as LeafRangeNode;
                    BitSet        set      = new BitSet(count);
                    set.Clear();
                    set.Or(followpos[i]);
                    if (particle.Min != particle.Max)
                    {
                        set.Or(particle.NextIteration);
                    }
                    for (int j = set.NextSet(-1); j != -1; j = set.NextSet(j))
                    {
                        if (j > i)
                        {
                            Position position2 = this.positions[j];
                            if (position2.symbol == -2)
                            {
                                LeafRangeNode node2 = position2.particle as LeafRangeNode;
                                set.Or(setArray[node2.Pos]);
                            }
                        }
                    }
                    setArray[index] = set;
                    particle.Pos    = index++;
                    posWithRangeTerminals.Set(i);
                }
            }
            return(setArray);
        }
示例#5
0
 public override void ConstructPos(BitSet firstpos, BitSet lastpos, BitSet[] followpos)
 {
     firstpos.Set(this.pos);
     lastpos.Set(this.pos);
 }
 private bool IsSequenceFromAll(XmlSchemaSequence derivedSequence, XmlSchemaAll baseAll)
 {
     if (!this.IsValidOccurrenceRangeRestriction(derivedSequence, baseAll) || (derivedSequence.Items.Count > baseAll.Items.Count))
     {
         return false;
     }
     BitSet set = new BitSet(baseAll.Items.Count);
     for (int i = 0; i < derivedSequence.Items.Count; i++)
     {
         int mappingParticle = this.GetMappingParticle((XmlSchemaParticle) derivedSequence.Items[i], baseAll.Items);
         if (mappingParticle < 0)
         {
             return false;
         }
         if (set[mappingParticle])
         {
             return false;
         }
         set.Set(mappingParticle);
     }
     for (int j = 0; j < baseAll.Items.Count; j++)
     {
         if (!set[j] && !this.IsParticleEmptiable((XmlSchemaParticle) baseAll.Items[j]))
         {
             return false;
         }
     }
     return true;
 }
 private bool IsSequenceFromAll(XmlSchemaSequence derivedSequence, XmlSchemaAll baseAll) {
     if (!IsValidOccurrenceRangeRestriction(derivedSequence, baseAll) || derivedSequence.Items.Count > baseAll.Items.Count) {
         return false;
     }
     BitSet map = new BitSet(baseAll.Items.Count);
     for (int j = 0; j < derivedSequence.Items.Count; ++j) {
         int i = GetMappingParticle((XmlSchemaParticle)derivedSequence.Items[j], baseAll.Items);
         if (i >= 0) {
             if (map[i]) {
                 return false;
             }
             else {
                 map.Set(i);
             }
         }
         else {
             return false;
         }
     }
     for (int i = 0; i < baseAll.Items.Count; i++) {
         if (!map[i] && !IsParticleEmptiable((XmlSchemaParticle)baseAll.Items[i])) {
             return false;
         }
     }
     return true;
 }
 public override void ConstructPos(BitSet firstpos, BitSet lastpos, BitSet[] followpos) {
     firstpos.Set(pos);
     lastpos.Set(pos);
 }
        private BitSet[] CalculateTotalFollowposForRangeNodes(BitSet firstpos, BitSet[] followpos, out BitSet posWithRangeTerminals) {
            int positionsCount = positions.Count; //terminals
            posWithRangeTerminals = new BitSet(positionsCount);
            
            //Compute followpos for each range node
            //For any range node that is surrounded by an outer range node, its follow positions will include those of the outer range node
            BitSet[] minmaxFollowPos = new BitSet[minMaxNodesCount];
            int localMinMaxNodesCount = 0;
            
            for (int i = positionsCount - 1;  i >= 0; i--) { 
                Position p = positions[i];
                if (p.symbol == -2) { //P is a LeafRangeNode
                    LeafRangeNode lrNode = p.particle as LeafRangeNode;
                    Debug.Assert(lrNode != null);
                    BitSet tempFollowPos = new BitSet(positionsCount);
                    tempFollowPos.Clear();
                    tempFollowPos.Or(followpos[i]); //Add the followpos of the range node
                    if (lrNode.Min != lrNode.Max) { //If they are the same, then followpos cannot include the firstpos
                        tempFollowPos.Or(lrNode.NextIteration); //Add the nextIteration of the range node (this is the firstpos of its parent's leftChild)
                    }

                    //For each position in the bitset, if it is a outer range node (pos > i), then add its followpos as well to the current node's followpos
                    for (int pos = tempFollowPos.NextSet(-1); pos != -1; pos = tempFollowPos.NextSet(pos)) {
                        if (pos > i) {
                            Position p1 = positions[pos];
                            if (p1.symbol == -2) {
                                LeafRangeNode lrNode1 = p1.particle as LeafRangeNode;
                                Debug.Assert(lrNode1 != null);
                                tempFollowPos.Or(minmaxFollowPos[lrNode1.Pos]);
                            }
                        }
                    }
                    //set the followpos built to the index in the BitSet[]
                    minmaxFollowPos[localMinMaxNodesCount] = tempFollowPos; 
                    lrNode.Pos = localMinMaxNodesCount++; 
                    posWithRangeTerminals.Set(i);
                }
            }
            return minmaxFollowPos;
        }
 private BitSet[] CalculateTotalFollowposForRangeNodes(BitSet firstpos, BitSet[] followpos, out BitSet posWithRangeTerminals)
 {
     int count = this.positions.Count;
     posWithRangeTerminals = new BitSet(count);
     BitSet[] setArray = new BitSet[this.minMaxNodesCount];
     int index = 0;
     for (int i = count - 1; i >= 0; i--)
     {
         Position position = this.positions[i];
         if (position.symbol == -2)
         {
             LeafRangeNode particle = position.particle as LeafRangeNode;
             BitSet set = new BitSet(count);
             set.Clear();
             set.Or(followpos[i]);
             if (particle.Min != particle.Max)
             {
                 set.Or(particle.NextIteration);
             }
             for (int j = set.NextSet(-1); j != -1; j = set.NextSet(j))
             {
                 if (j > i)
                 {
                     Position position2 = this.positions[j];
                     if (position2.symbol == -2)
                     {
                         LeafRangeNode node2 = position2.particle as LeafRangeNode;
                         set.Or(setArray[node2.Pos]);
                     }
                 }
             }
             setArray[index] = set;
             particle.Pos = index++;
             posWithRangeTerminals.Set(i);
         }
     }
     return setArray;
 }