Skip to content

Commit

Permalink
Merge pull request #59 from headius/private_region_fields
Browse files Browse the repository at this point in the history
Make Region fields private
  • Loading branch information
headius authored May 23, 2023
2 parents 9dc7935 + d1afcaf commit d2a0fed
Show file tree
Hide file tree
Showing 4 changed files with 147 additions and 68 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<groupId>org.jruby.joni</groupId>
<artifactId>joni</artifactId>
<packaging>jar</packaging>
<version>2.1.49-SNAPSHOT</version>
<version>2.2.0-SNAPSHOT</version>
<name>Joni</name>
<description>
Java port of Oniguruma: http://www.geocities.jp/kosako3/oniguruma
Expand Down
65 changes: 65 additions & 0 deletions src/org/joni/MultiRegion.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is furnished to do
* so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package org.joni;

import java.util.Arrays;

public final class MultiRegion extends Region {
private final int[] begEnd;

public MultiRegion(int num) {
this.begEnd = new int[num * 2];
}

public MultiRegion(int begin, int end) {
this.begEnd = new int[]{begin, end};
}

public final int getNumRegs() {
return begEnd.length / 2;
}

public MultiRegion clone() {
MultiRegion region = new MultiRegion(getNumRegs());
System.arraycopy(begEnd, 0, region.begEnd, 0, begEnd.length);
if (getCaptureTree() != null) region.setCaptureTree(getCaptureTree().cloneTree());
return region;
}

public int getBeg(int index) {
return begEnd[index * 2];
}

public int setBeg(int index, int value) {
return begEnd[index * 2] = value;
}

public int getEnd(int index) {
return begEnd[index * 2 + 1];
}

public int setEnd(int index, int value) {
return begEnd[index * 2 + 1] = value;
}

void clear() {
Arrays.fill(begEnd, REGION_NOTPOS);
}
}
80 changes: 13 additions & 67 deletions src/org/joni/Region.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,100 +19,46 @@
*/
package org.joni;

public final class Region {
public abstract class Region {
static final int REGION_NOTPOS = -1;

@Deprecated
public final int numRegs;
@Deprecated
public final int[] beg;
@Deprecated
public final int[] end;
@Deprecated
public CaptureTreeNode historyRoot;
protected CaptureTreeNode historyRoot;

@SuppressWarnings("deprecation")
public static Region newRegion(int num) {
return new Region(num);
if (num == 1) return new SingleRegion(num);
return new MultiRegion(num);
}

@SuppressWarnings("deprecation")
public static Region newRegion(int begin, int end) {
return new Region(begin, end);
return new SingleRegion(begin, end);
}

@Deprecated
@SuppressWarnings("deprecation")
public Region(int num) {
this.numRegs = num;
this.beg = new int[num];
this.end = new int[num];
}
public abstract Region clone();

@Deprecated
@SuppressWarnings("deprecation")
public Region(int begin, int end) {
this.numRegs = 1;
this.beg = new int[]{begin};
this.end = new int[]{end};
}
public abstract int getNumRegs();

@SuppressWarnings("deprecation")
public Region clone() {
Region region = new Region(numRegs);
System.arraycopy(beg, 0, region.beg, 0, beg.length);
System.arraycopy(end, 0, region.end, 0, end.length);
if (historyRoot != null) region.historyRoot = historyRoot.cloneTree();
return region;
}
public abstract int getBeg(int index);

@SuppressWarnings("deprecation")
public int getNumRegs() {
return numRegs;
}
public abstract int setBeg(int index, int value);

@SuppressWarnings("deprecation")
public int getBeg(int index) {
return beg[index];
}
public abstract int getEnd(int index);

@SuppressWarnings("deprecation")
public int setBeg(int index, int value) {
return beg[index] = value;
}
public abstract int setEnd(int index, int value);

@SuppressWarnings("deprecation")
public int getEnd(int index) {
return end[index];
}

@SuppressWarnings("deprecation")
public int setEnd(int index, int value) {
return end[index] = value;
}

@SuppressWarnings("deprecation")
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Region: \n");
for (int i=0; i<beg.length; i++) sb.append(" " + i + ": (" + beg[i] + "-" + end[i] + ")");
for (int i=0; i<getNumRegs(); i++) sb.append(" " + i + ": (" + getBeg(i) + "-" + getEnd(i) + ")");
return sb.toString();
}

@SuppressWarnings("deprecation")
CaptureTreeNode getCaptureTree() {
return historyRoot;
}

@SuppressWarnings("deprecation")
CaptureTreeNode setCaptureTree(CaptureTreeNode ctn) {
return this.historyRoot = ctn;
}

@SuppressWarnings("deprecation")
void clear() {
for (int i=0; i<beg.length; i++) {
beg[i] = end[i] = REGION_NOTPOS;
}
}
abstract void clear();
}
68 changes: 68 additions & 0 deletions src/org/joni/SingleRegion.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is furnished to do
* so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package org.joni;

public class SingleRegion extends Region {
int beg;
int end;

public SingleRegion(int num) {
if (num != 1) throw new IndexOutOfBoundsException(num);
}

public SingleRegion(int begin, int end) {
this.beg = begin;
this.end = end;
}

public int getNumRegs() {
return 1;
}

public SingleRegion clone() {
SingleRegion region = new SingleRegion(beg, end);
if (getCaptureTree() != null) region.setCaptureTree(getCaptureTree().cloneTree());
return region;
}

public int getBeg(int index) {
if (index != 0) throw new IndexOutOfBoundsException(index);
return beg;
}

public int setBeg(int index, int value) {
if (index != 0) throw new IndexOutOfBoundsException(index);
return beg = value;
}

public int getEnd(int index) {
if (index != 0) throw new IndexOutOfBoundsException(index);
return end;
}

public int setEnd(int index, int value) {
if (index != 0) throw new IndexOutOfBoundsException(index);
return end = value;
}

void clear() {
beg = end = REGION_NOTPOS;
}
}

0 comments on commit d2a0fed

Please sign in to comment.