Matchvariant alternative
[lspl:lspl.git] / bindings-java / src_java / ru / lspl / text / Match.java
1 package ru.lspl.text;
2
3 import ru.lspl.patterns.Pattern;
4 import ru.lspl.patterns.Alternative;
5
6 import java.util.List;
7 import java.util.AbstractList;
8
9 /**
10  * Сопоставление в тексте.
11  * 
12  * @author alno
13  */
14 public class Match extends Transition {
15
16         private class VariantList extends AbstractList<MatchVariant> {
17
18                 @Override
19                 public int size() {
20                         return getVariantCount();
21                 }
22
23                 @Override
24                 public MatchVariant[] toArray() {
25                         MatchVariant[] ts = new MatchVariant[size()];
26
27                         for ( int i = 0; i < ts.length; ++i )
28                                 ts[i] = getVariant( i );
29
30                         return ts;
31                 }
32
33                 @Override
34                 public MatchVariant get( int index ) {
35                         return getVariant( index );
36                 }
37
38         };
39
40         /**
41          * Шаблон, который был сопоставлен
42          */
43         public final Pattern pattern;
44
45         public final List<MatchVariant> variants = new VariantList();
46
47         private Match( int id, Text text, Node start, Node end, Pattern pattern ) {
48                 super( id, text, start, end );
49                 this.pattern = pattern;
50         }
51
52         public List<MatchVariant> getVariants() {
53                 return variants;
54         }
55
56         /**
57          * Получить количество вариантов сопоставления
58          */
59         public native int getVariantCount();
60
61         /**
62          * Получить вариант сопоставления по его индексу
63          */
64         public native MatchVariant getVariant( int variantIndex );
65
66         public native Object getVariantTransformResult( int variantIndex );
67
68         public native int getVariantTransitionCount( int variantIndex );
69
70         public native Alternative getVariantAlternative( int variantIndex );
71
72         public native Transition getVariantTransition( int variantIndex, int transitionIndex );
73
74         native void finalizeVariant( int variantIndex );
75 }