Package org.jkff.ire.util

Examples of org.jkff.ire.util.WrappedBitSet


        public void transitions(Object... char2state) {
            for(int i = 0; i < char2state.length; i += 2) {
                transitions.add(new Transition(this.state, (Character)char2state[i], (Integer)char2state[i+1]));
            }
            WrappedBitSet t = new WrappedBitSet(numPatterns);
            for(int tp : termPatterns)
                t.set(tp);
            basisStates[state] = new IntState(state, t);
        }
View Full Code Here


    {
        PowerIntState s = dfa.getInitialState();
        for(char c : input.toCharArray()) {
            s = dfa.transfer(c).next(s);
        }
        WrappedBitSet bs = s.getTerminatedPatterns();
        for(int i = 0; i < terminatesWhichPatterns.length; ++i) {
            assertEquals("Pattern " + i, terminatesWhichPatterns[i], (bs == null) ? false : bs.get(i));
        }
    }
View Full Code Here

    public PowerIntTable(WrappedBitSet[] state2next) {
        this.numStates = state2next.length;
        this.blockSize = (63+numStates) / 64;
        this.words = new long[numStates * blockSize];
        for(int s = 0; s < numStates; ++s) {
            new WrappedBitSet(words, s*blockSize, blockSize, numStates).or(state2next[s]);
        }
    }
View Full Code Here

        for(long w : ws) sb.append(w).append(" ");
        return sb.toString();
    }

    public PowerIntState next(PowerIntState st) {
        WrappedBitSet s = st.getSubset();
        WrappedBitSet res = new WrappedBitSet(s.numBits());
        for(int bit = s.nextSetBit(0); bit >= 0; bit = s.nextSetBit(bit+1)) {
            res.or(new WrappedBitSet(words, bit*blockSize, blockSize, numStates));
        }
        return new PowerIntState(st.getBasis(), res);
    }
View Full Code Here

    public String toString() {
        StringBuilder sb = new StringBuilder();
        for(int state = 0; state < numStates; ++state) {
            int offset = state * blockSize;
            sb.append(state).append(" -> ")
              .append(new WrappedBitSet(words, offset, blockSize, numStates).toString())
              .append("; ");
        }
        return sb.toString();
    }
View Full Code Here

    public WrappedBitSet getSubset() {
        return subset;
    }

    public WrappedBitSet getTerminatedPatterns() {
        WrappedBitSet res = null;
        for(int bit = subset.nextSetBit(0); bit >= 0; bit = subset.nextSetBit(bit+1)) {
            if(res == null)
                res = basis[bit].getTerminatedPatterns().makeCopy();
            else
                res.or(basis[bit].getTerminatedPatterns());
        }
        return res;
    }
View Full Code Here

        public void transitions(Object... char2state) {
            for(int i = 0; i < char2state.length; i += 2) {
                transitions.add(new Transition(this.state, (Character)char2state[i], (Integer)char2state[i+1]));
            }
            WrappedBitSet t = new WrappedBitSet(numPatterns);
            for(int tp : termPatterns)
                t.set(tp);
            states[state] = new IntState(state, t);
        }
View Full Code Here

    public DFA<Character, PowerIntState> build() {
        final WrappedBitSet[][] char2state2next = new WrappedBitSet[256][basisStates.length];
        for(int i = 0; i < 256; ++i)
            for(int j = 0; j < basisStates.length; ++j)
                char2state2next[i][j] = new WrappedBitSet(basisStates.length);
       
        for(Transition t : transitions) {
            if(t.c != null) {
                char2state2next[t.c][t.from].set(t.to);
            }
        }
        for(Transition t : transitions) {
            if(t.c == null) {
                for(int i = 0; i < 256; ++i)
                    if(char2state2next[i][t.from].isEmpty())
                        char2state2next[i][t.from].set(t.to);
            }
        }
        TransferTable<Character, PowerIntState> transfer = new TransferTable<Character, PowerIntState>() {
            public TransferFunction<PowerIntState> forToken(Character token) {
                return new PowerIntTable(char2state2next[token]);
            }
        };

        final WrappedBitSet justInitial = new WrappedBitSet(basisStates.length);
        justInitial.set(initialState);
        return new DFA<Character, PowerIntState>(transfer,
                new PowerIntState(basisStates, justInitial), PowerIntTable.REDUCER)
        {
            @Override
            public PowerIntState resetTerminatedPattern(PowerIntState state, int pattern) {
                WrappedBitSet reset = new WrappedBitSet(basisStates.length);
                reset.or(state.getSubset());
                for(int substate = reset.nextSetBit(0); substate != -1; substate = reset.nextSetBit(substate + 1)) {
                    if(basisStates[substate].getTerminatedPatterns().get(pattern)) {
                        reset.clear(substate);
                    }
                }
                reset.or(justInitial);
                return new PowerIntState(basisStates, reset);
            }
        };
    }
View Full Code Here

            DFAIndexedString<ST> matchingPrefix = (DFAIndexedString<ST>) p.first;
            rem = p.second;
            seen = seen.append(matchingPrefix);

            final ST stateAfterMatch = matchingPrefix.getForward().next(matchStartState.state);
            WrappedBitSet term = stateAfterMatch.getTerminatedPatterns();

            ST backwardInitial = bidfa.getBackward().getInitialState();

            ST nextMatchStart = stateAfterMatch;

            for(int bit = term.nextSetBit(0); bit >= 0; bit = term.nextSetBit(bit+1)) {
                final int bit2 = bit;

                Function2<ST, IndexedString, ST> addStringBack = new Function2<ST, IndexedString, ST>() {
                    public ST applyTo(ST st, IndexedString s) {
                        return ((DFAIndexedString<ST>) s).getBackward().next(st);
                    }
                };

                Function2<ST, Character, ST> addCharBack = new Function2<ST, Character, ST>() {
                    public ST applyTo(ST st, Character c) {
                        return bidfa.getBackward().transfer(c).next(st);
                    }
                };

                Predicate<ST> startsThisMatch = new Predicate<ST>() {
                    public boolean isTrueFor(ST state) {
                        WrappedBitSet tp = state.getTerminatedPatterns();
                        return tp!=null && tp.get(bit2);
                    }
                };

                int len = seen.splitAfterBackRise(
                        backwardInitial, addStringBack, addCharBack, startsThisMatch).second.length();
View Full Code Here

            node2id.put(id2node[i], i);
        }

        final State[] basis = new State[numStates];
        for(int i = 0; i < numStates; ++i) {
            WrappedBitSet terminatedPatterns = new WrappedBitSet(numPatterns);
            for(int pat : id2node[i].patternIds) {
                terminatedPatterns.set(pat);
            }
            basis[i] = new IntState(i, terminatedPatterns);
        }

        TransferTable<Character,PowerIntState> transfer = new TransferTable<Character, PowerIntState>() {
            private TransferFunction[] transfer = new TransferFunction[Character.MAX_VALUE+1];

            public TransferFunction<PowerIntState> forToken(Character token) {
                char t = token;
                TransferFunction<PowerIntState> f = transfer[t];
                if(f == null) {
                    transfer[t] = f = computeTransferFor(t);
                }
                return f;
            }

            private TransferFunction<PowerIntState> computeTransferFor(char token) {
                WrappedBitSet[] state2next = new WrappedBitSet[numStates];
                for(int i = 0; i < numStates; ++i) {
                    WrappedBitSet res = new WrappedBitSet(numStates);
                    NFA.Node node = id2node[i];
                    for (Pair<CharacterClass, NFA.Node> out : node.out) {
                        if(out.first.acceptsChar(token)) {
                            res.set(node2id.get(out.second));
                        }
                    }
                    state2next[i] = res;
                }
                return new PowerIntTable(state2next);
            }
        };

        final WrappedBitSet justInitial = new WrappedBitSet(numStates);
        justInitial.set(node2id.get(newInitial));
        PowerIntState initial = new PowerIntState(basis, justInitial);

//        StringBuilder dot = new StringBuilder();
//        dot.append("digraph g {\n");
//        for(int i = 0; i < numStates; ++i) {
//            WrappedBitSet justThis = new WrappedBitSet(numStates);
//            justThis.set(i);
//            PowerIntState state = new PowerIntState(basis, justThis);
//            dot.append(i + " [shape=" + (state.getTerminatedPatterns().isEmpty() ? "circle" : "square") + "]\n");
//        }
//        for(int i = 0; i < numStates; ++i) {
//            WrappedBitSet justThis = new WrappedBitSet(numStates);
//            justThis.set(i);
//            PowerIntState state = new PowerIntState(basis, justThis);
//            PowerIntState nextState = transfer.forToken('t').next(state);
//            WrappedBitSet next = nextState.getSubset();
//            for(int bit = next.nextSetBit(0); bit != -1; bit = next.nextSetBit(bit+1)) {
//                dot.append(i + " -> " + bit + "\n");
//            }
//        }
//        dot.append("}\n");
//        System.out.println(dot);

        return new DFA<Character, PowerIntState>(transfer, initial, PowerIntTable.REDUCER) {
            @Override
            public PowerIntState resetTerminatedPattern(PowerIntState state, int pattern) {
                WrappedBitSet reset = new WrappedBitSet(basis.length);
                reset.or(state.getSubset());
                for(int substate = reset.nextSetBit(0); substate != -1; substate = reset.nextSetBit(substate + 1)) {
                    if(basis[substate].getTerminatedPatterns().get(pattern)) {
                        reset.clear(substate);
                    }
                }
                reset.or(justInitial);
                return new PowerIntState(basis, reset);
            }
        };
    }
View Full Code Here

TOP

Related Classes of org.jkff.ire.util.WrappedBitSet

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.