Auto reformat classes
This commit is contained in:
parent
fd92f5e807
commit
a503362c36
@ -51,7 +51,8 @@ public class CalculateAverage_ebarlas {
|
||||
try {
|
||||
var buffer = channel.map(FileChannel.MapMode.READ_ONLY, pStart, pSize);
|
||||
partitions[pIdx] = processBuffer(buffer, pIdx == 0);
|
||||
} catch (IOException e) {
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
};
|
||||
@ -94,7 +95,8 @@ public class CalculateAverage_ebarlas {
|
||||
var t = target[j];
|
||||
if (t == null) {
|
||||
target[j] = current[j]; // copy ref from current to target
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
t.min = Math.min(t.min, current[j].min);
|
||||
t.max = Math.max(t.max, current[j].max);
|
||||
t.sum += current[j].sum;
|
||||
@ -154,10 +156,12 @@ public class CalculateAverage_ebarlas {
|
||||
st = stats[idx] = new Stats(key);
|
||||
}
|
||||
readingKey = false;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
keyHash = HASH_FACTOR * keyHash + b;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
if (b == '\n') {
|
||||
var v = negative ? -val : val;
|
||||
st.min = Math.min(st.min, v);
|
||||
@ -169,9 +173,11 @@ public class CalculateAverage_ebarlas {
|
||||
val = 0;
|
||||
negative = false;
|
||||
keyStart = buffer.position();
|
||||
} else if (b == '-') {
|
||||
}
|
||||
else if (b == '-') {
|
||||
negative = true;
|
||||
} else if (b != '.') { // skip '.' since fractional tenth unit after decimal point is assumed
|
||||
}
|
||||
else if (b != '.') { // skip '.' since fractional tenth unit after decimal point is assumed
|
||||
val = val * 10 + (b - '0');
|
||||
}
|
||||
}
|
||||
@ -187,13 +193,15 @@ public class CalculateAverage_ebarlas {
|
||||
}
|
||||
|
||||
private static byte[] readHeader(ByteBuffer buffer) { // read up to and including first newline (or end-of-input)
|
||||
while (buffer.hasRemaining() && buffer.get() != '\n') ;
|
||||
while (buffer.hasRemaining() && buffer.get() != '\n')
|
||||
;
|
||||
var header = new byte[buffer.position()];
|
||||
buffer.get(0, header, 0, header.length);
|
||||
return header;
|
||||
}
|
||||
|
||||
record Partition(byte[] header, byte[] footer, Stats[] stats) {}
|
||||
record Partition(byte[] header, byte[] footer, Stats[] stats) {
|
||||
}
|
||||
|
||||
private static class Stats { // min, max, and sum values are modeled with integral types that represent tenths of a unit
|
||||
final byte[] key;
|
||||
|
@ -26,7 +26,6 @@ public class CalculateAverage_seijikun {
|
||||
|
||||
private static final String FILE = "./measurements.txt";
|
||||
|
||||
|
||||
private static class MeasurementAggregator {
|
||||
private double min = Double.POSITIVE_INFINITY;
|
||||
private double max = Double.NEGATIVE_INFINITY;
|
||||
@ -179,7 +178,7 @@ public class CalculateAverage_seijikun {
|
||||
chunkStartPtr = chunkEndPtr;
|
||||
}
|
||||
|
||||
try(var executor = Executors.newFixedThreadPool(jobCnt)) {
|
||||
try (var executor = Executors.newFixedThreadPool(jobCnt)) {
|
||||
for (int i = 0; i < jobCnt; ++i) {
|
||||
executor.submit(chunks[i]);
|
||||
}
|
||||
|
@ -105,9 +105,8 @@ public class CalculateAverage_truelive {
|
||||
}
|
||||
|
||||
private static Map<String, Measurement> combineMaps(
|
||||
final Map<String, Measurement> map1,
|
||||
final Map<String, Measurement> map2
|
||||
) {
|
||||
final Map<String, Measurement> map1,
|
||||
final Map<String, Measurement> map2) {
|
||||
for (final var entry : map2.entrySet()) {
|
||||
map1.merge(entry.getKey(), entry.getValue(), Measurement::combineWith);
|
||||
}
|
||||
@ -116,7 +115,7 @@ public class CalculateAverage_truelive {
|
||||
}
|
||||
|
||||
public static void main(final String[] args) throws IOException {
|
||||
//long before = System.currentTimeMillis();
|
||||
// long before = System.currentTimeMillis();
|
||||
/**
|
||||
* Shoutout to bjhara
|
||||
*/
|
||||
@ -136,8 +135,7 @@ public class CalculateAverage_truelive {
|
||||
final MappedByteBuffer mbb = in.map(
|
||||
FileChannel.MapMode.READ_ONLY,
|
||||
start,
|
||||
Math.min(CHUNK_SIZE, total - start)
|
||||
);
|
||||
Math.min(CHUNK_SIZE, total - start));
|
||||
int realEnd = mbb.limit() - 1;
|
||||
while (mbb.get(realEnd) != '\n') {
|
||||
realEnd--;
|
||||
@ -148,16 +146,17 @@ public class CalculateAverage_truelive {
|
||||
start += realEnd;
|
||||
|
||||
return mbb;
|
||||
} catch (final IOException e) {
|
||||
}
|
||||
catch (final IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
final Map<String, Measurement> reduce = StreamSupport.stream(Spliterators.spliteratorUnknownSize(
|
||||
iterator, Spliterator.IMMUTABLE), true)
|
||||
.parallel()
|
||||
.map(CalculateAverage_truelive::parseBuffer)
|
||||
.reduce(CalculateAverage_truelive::combineMaps).get();
|
||||
iterator, Spliterator.IMMUTABLE), true)
|
||||
.parallel()
|
||||
.map(CalculateAverage_truelive::parseBuffer)
|
||||
.reduce(CalculateAverage_truelive::combineMaps).get();
|
||||
|
||||
System.out.print("{");
|
||||
System.out.print(
|
||||
@ -169,7 +168,7 @@ public class CalculateAverage_truelive {
|
||||
.collect(Collectors.joining(", ")));
|
||||
System.out.println("}");
|
||||
|
||||
//System.out.println("Took: " + (System.currentTimeMillis() - before));
|
||||
// System.out.println("Took: " + (System.currentTimeMillis() - before));
|
||||
|
||||
}
|
||||
|
||||
@ -189,7 +188,8 @@ public class CalculateAverage_truelive {
|
||||
name = new String(arr, 0, len);
|
||||
bug.position(pos);
|
||||
bug.mark();
|
||||
} else if (c == '\n') {
|
||||
}
|
||||
else if (c == '\n') {
|
||||
final int pos = bug.position();
|
||||
bug.reset();
|
||||
final int len = pos - bug.position();
|
||||
|
@ -35,7 +35,7 @@ public class CreateMeasurements2 {
|
||||
private static final String FILE = "./measurements2.txt";
|
||||
|
||||
static class WeatherStation {
|
||||
final static char[] NUMBERS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
|
||||
final static char[] NUMBERS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
|
||||
|
||||
final String id;
|
||||
final int meanTemperature;
|
||||
@ -58,8 +58,8 @@ public class CreateMeasurements2 {
|
||||
* @param buffer the buffer to append to
|
||||
*/
|
||||
void measurement(final CheaperCharBuffer buffer) {
|
||||
// fake -10.9 to +10.9 variance without double operations and rounding
|
||||
// gives us -10 to +10
|
||||
// fake -10.9 to +10.9 variance without double operations and rounding
|
||||
// gives us -10 to +10
|
||||
int m = meanTemperature + (r.nextInt(21) - 10);
|
||||
// gives us a decimal digit 0 to 9 as char
|
||||
char d = NUMBERS[r.nextInt(10)];
|
||||
@ -569,39 +569,39 @@ public class CreateMeasurements2 {
|
||||
|
||||
// manual loop unroll for less jumps
|
||||
for (int i = 0; i < count; i = i + 8) {
|
||||
{
|
||||
// try to fill teh cpu pipeline as much as possible with
|
||||
// independent operations
|
||||
int s1 = r1.nextInt(stationCount);
|
||||
int s2 = r2.nextInt(stationCount);
|
||||
int s3 = r3.nextInt(stationCount);
|
||||
int s4 = r4.nextInt(stationCount);
|
||||
// get us the ojects one after the other to have the array
|
||||
// in our L1 cache and not push it out with other data
|
||||
var w1 = stations.get(s1);
|
||||
var w2 = stations.get(s2);
|
||||
var w3 = stations.get(s3);
|
||||
var w4 = stations.get(s4);
|
||||
// write our data to our buffer
|
||||
w1.measurement(sb);
|
||||
w2.measurement(sb);
|
||||
w3.measurement(sb);
|
||||
w4.measurement(sb);
|
||||
}
|
||||
{
|
||||
int s1 = r1.nextInt(stationCount);
|
||||
int s2 = r2.nextInt(stationCount);
|
||||
int s3 = r3.nextInt(stationCount);
|
||||
int s4 = r4.nextInt(stationCount);
|
||||
var w1 = stations.get(s1);
|
||||
var w2 = stations.get(s2);
|
||||
var w3 = stations.get(s3);
|
||||
var w4 = stations.get(s4);
|
||||
w1.measurement(sb);
|
||||
w2.measurement(sb);
|
||||
w3.measurement(sb);
|
||||
w4.measurement(sb);
|
||||
}
|
||||
{
|
||||
// try to fill teh cpu pipeline as much as possible with
|
||||
// independent operations
|
||||
int s1 = r1.nextInt(stationCount);
|
||||
int s2 = r2.nextInt(stationCount);
|
||||
int s3 = r3.nextInt(stationCount);
|
||||
int s4 = r4.nextInt(stationCount);
|
||||
// get us the ojects one after the other to have the array
|
||||
// in our L1 cache and not push it out with other data
|
||||
var w1 = stations.get(s1);
|
||||
var w2 = stations.get(s2);
|
||||
var w3 = stations.get(s3);
|
||||
var w4 = stations.get(s4);
|
||||
// write our data to our buffer
|
||||
w1.measurement(sb);
|
||||
w2.measurement(sb);
|
||||
w3.measurement(sb);
|
||||
w4.measurement(sb);
|
||||
}
|
||||
{
|
||||
int s1 = r1.nextInt(stationCount);
|
||||
int s2 = r2.nextInt(stationCount);
|
||||
int s3 = r3.nextInt(stationCount);
|
||||
int s4 = r4.nextInt(stationCount);
|
||||
var w1 = stations.get(s1);
|
||||
var w2 = stations.get(s2);
|
||||
var w3 = stations.get(s3);
|
||||
var w4 = stations.get(s4);
|
||||
w1.measurement(sb);
|
||||
w2.measurement(sb);
|
||||
w3.measurement(sb);
|
||||
w4.measurement(sb);
|
||||
}
|
||||
// write the buffer directly, no intermediate string copy
|
||||
bw.write(sb.data_, 0, sb.length_);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user