diff src/classes/java/util/regex/Matcher.java @ 0:61d41facf527

initial v8 import (history reset)
author Peter Mehlitz <Peter.C.Mehlitz@nasa.gov>
date Fri, 23 Jan 2015 10:14:01 -0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/classes/java/util/regex/Matcher.java	Fri Jan 23 10:14:01 2015 -0800
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2014, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ * All rights reserved.
+ *
+ * The Java Pathfinder core (jpf-core) platform is licensed under the
+ * Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ *        http://www.apache.org/licenses/LICENSE-2.0. 
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+package java.util.regex;
+
+/**
+ * model of a regular expression matcher, to save memory and execution time
+ */
+public class Matcher {
+
+  // this is the same trick like java.text.Format - avoiding a native
+  // memory leak by means of overwriting a JPF state tracked index value
+  // (well, it's still a leak since it never gets recycled unless we add a
+  // finalizer, but it should be much less serious)
+  static int nInstances;
+  private int id = nInstances++; // just for peer implementation purposes 
+  
+  Pattern pattern;
+  String input;    // that's an approximation (don't use CharSequence on the native side)
+  
+  Matcher() {
+  }
+  
+  Matcher (Pattern pattern, CharSequence inp){
+    this.pattern = pattern;
+    this.input = inp.toString();
+    
+    register();
+  }
+  
+  public Pattern pattern() {
+    return pattern;
+  }
+  
+  native void register();
+  
+  public native Matcher reset();
+  
+  public String group() {
+    return group(0);
+  }
+  
+  public native String group(int group);
+  
+  public native int groupCount();
+
+  public Matcher reset(CharSequence inp) {
+    this.input = inp.toString();
+    return reset();
+  }
+
+  public native boolean matches();
+  
+  public native boolean find();
+  
+  public native boolean lookingAt();
+  
+  public int start() {
+    return start(0);
+  }
+  
+  public native int start(int group);
+  
+  public int end() {
+    return end(0);
+  }
+  
+  public native int end(int group);
+
+  public native boolean hasTransparentBounds();
+
+  public native Matcher useTransparentBounds(boolean b);
+
+  public native boolean hasAnchoringBounds();
+
+  public native Matcher useAnchoringBounds(boolean b);
+
+  public native int regionStart();
+
+  public native int regionEnd();
+
+  public native Matcher region(int start, int end);
+
+  public static native String quoteReplacement(String abc);
+
+  public native String replaceAll(String replacement);
+
+  public native String replaceFirst(String replacement);
+
+  @Override
+  public native String toString();
+
+  public native boolean hitEnd();
+
+  public native boolean requireEnd();
+
+  // TODO public native MatchResult toMatchResult();
+  // TODO public native StringBuffer appendTail(StringBuffer sb);
+  // TODO public native Matcher appendReplacement(StringBuffer sb, String replacement);
+}