summaryrefslogtreecommitdiff
path: root/clformat/src/main/java/bjc
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2019-12-17 20:42:29 -0500
committerbculkin2442 <bjculkin@mix.wvu.edu>2019-12-17 20:42:29 -0500
commit715e324f16520ce7ec3346c3b6aba3fdecdd6297 (patch)
treea6dd3e34be237565b97894e02673ee961115e87a /clformat/src/main/java/bjc
parentdb53033e7eec4515bc98946ecc4117f37638d6a6 (diff)
Switch over IterationDirective
Diffstat (limited to 'clformat/src/main/java/bjc')
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/CLString.java6
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java32
2 files changed, 25 insertions, 13 deletions
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/CLString.java b/clformat/src/main/java/bjc/utils/ioutils/format/CLString.java
index d6d4317..84f06fa 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/CLString.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/CLString.java
@@ -57,4 +57,10 @@ public class CLString {
return formCTX.writer.toString();
}
+
+ public boolean isEmpty() {
+ if (edicts.size() == 0) return true;
+
+ return false;
+ }
}
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java
index a5bafdb..e22e41d 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java
@@ -14,7 +14,6 @@ import bjc.utils.ioutils.format.*;
*
*/
public class IterationDirective implements Directive {
-
@Override
public void format(FormatParameters dirParams) throws IOException {
Edict edt = compile(dirParams.toCompileCTX());
@@ -84,7 +83,7 @@ class IterationEdict implements Edict {
private Mode mode;
- private List<Decree> body;
+ private CLString body;
private CLFormatter fmt;
@@ -92,7 +91,7 @@ class IterationEdict implements Edict {
public IterationEdict(Mode mode, List<Decree> body, CLFormatter fmt, CLValue maxItr) {
this.mode = mode;
- this.body = body;
+ this.body = new CLString(fmt.compile(body));
this.fmt = fmt;
@@ -110,7 +109,7 @@ class IterationEdict implements Edict {
boolean usingString = false;
String strang = null;
- if (body.size() == 0) {
+ if (body.isEmpty()) {
/* Grab an argument. */
if (!(iter instanceof String)) {
throw new IllegalFormatConversionException('{', String.class);
@@ -143,9 +142,13 @@ class IterationEdict implements Edict {
try {
if (usingString) {
- fmt.doFormatString(strang, formCTX.writer, nParams, false);
+ // @Speed @Memory :DynamicFormatString
+ // For a speed/memory tradeoff here, we could be compiling strang into a
+ // CLString and then caching those compiled string. However, we aren't
+ // doing that now. -- ben, 12/17/19
+ fmt.doFormatString(strang, formCTX.writer, nParams, false);
} else {
- fmt.doFormatString(body, formCTX.writer, nParams, false);
+ body.format(formCTX.writer, nParams);
}
} catch (EscapeException eex) {
if (eex.endIteration) {
@@ -165,14 +168,15 @@ class IterationEdict implements Edict {
case ALL:
try {
while (!formCTX.items.atEnd()) {
- // System.err.printf("Iterating with format \"%s\"\n", frmt);
if (numIterations > maxIterations) break;
+
numIterations += 1;
if (usingString) {
- fmt.doFormatString(strang, formCTX.writer, formCTX.items, false);
+ // :DynamicFormatString
+ fmt.doFormatString(strang, formCTX.writer, formCTX.items, false);
} else {
- fmt.doFormatString(body, formCTX.writer, formCTX.items, false);
+ body.format(formCTX);
}
}
} catch (EscapeException eex) {
@@ -205,9 +209,10 @@ class IterationEdict implements Edict {
try {
if (usingString) {
- fmt.doFormatString(strang, formCTX.writer, nParams, false);
+ // :DynamicString
+ fmt.doFormatString(strang, formCTX.writer, nParams, false);
} else {
- fmt.doFormatString(body, formCTX.writer, nParams, false);
+ body.format(formCTX.writer, nParams);
}
} catch (EscapeException eex) {
if(eex.endIteration && !itr.hasNext()) throw eex;
@@ -232,9 +237,10 @@ class IterationEdict implements Edict {
numIterations += 1;
if (usingString) {
- fmt.doFormatString(strang, formCTX.writer, nParams, false);
+ // :DynamicString
+ fmt.doFormatString(strang, formCTX.writer, nParams, false);
} else {
- fmt.doFormatString(body, formCTX.writer, nParams, false);
+ body.format(formCTX.writer, nParams);
}
}
} catch (EscapeException eex) {