From 91575b8db60ca4fc6df9f44fa720929d8c3868ac Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Mon, 25 Feb 2019 00:21:40 +0100 Subject: use TagSet as the implementation for Context tags --- .../context/generated/binary/context/Tags.java | 513 +++++++++++++++++++++ 1 file changed, 513 insertions(+) create mode 100644 kamon-core/src/main/java/kamon/context/generated/binary/context/Tags.java (limited to 'kamon-core/src/main/java/kamon/context/generated/binary/context/Tags.java') diff --git a/kamon-core/src/main/java/kamon/context/generated/binary/context/Tags.java b/kamon-core/src/main/java/kamon/context/generated/binary/context/Tags.java new file mode 100644 index 00000000..ce4d66db --- /dev/null +++ b/kamon-core/src/main/java/kamon/context/generated/binary/context/Tags.java @@ -0,0 +1,513 @@ +package kamon.context.generated.binary.context; + + +// Code generated by colf(1); DO NOT EDIT. + + +import static java.lang.String.format; +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamException; +import java.io.OutputStream; +import java.io.Serializable; +import java.util.InputMismatchException; +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; + + +/** + * Data bean with built-in serialization support. + + * @author generated by colf(1) + * @see Colfer's home + */ +@javax.annotation.Generated(value="colf(1)", comments="Colfer from schema file Context.colf") +public class Tags implements Serializable { + + /** The upper limit for serial byte sizes. */ + public static int colferSizeMax = 16 * 1024 * 1024; + + /** The upper limit for the number of elements in a list. */ + public static int colferListMax = 64 * 1024; + + + + + public StringTag[] strings; + + public LongTag[] longs; + + public BooleanTag[] booleans; + + + /** Default constructor */ + public Tags() { + init(); + } + + private static final StringTag[] _zeroStrings = new StringTag[0]; + private static final LongTag[] _zeroLongs = new LongTag[0]; + private static final BooleanTag[] _zeroBooleans = new BooleanTag[0]; + + /** Colfer zero values. */ + private void init() { + strings = _zeroStrings; + longs = _zeroLongs; + booleans = _zeroBooleans; + } + + /** + * {@link #reset(InputStream) Reusable} deserialization of Colfer streams. + */ + public static class Unmarshaller { + + /** The data source. */ + protected InputStream in; + + /** The read buffer. */ + public byte[] buf; + + /** The {@link #buf buffer}'s data start index, inclusive. */ + protected int offset; + + /** The {@link #buf buffer}'s data end index, exclusive. */ + protected int i; + + + /** + * @param in the data source or {@code null}. + * @param buf the initial buffer or {@code null}. + */ + public Unmarshaller(InputStream in, byte[] buf) { + // TODO: better size estimation + if (buf == null || buf.length == 0) + buf = new byte[Math.min(Tags.colferSizeMax, 2048)]; + this.buf = buf; + reset(in); + } + + /** + * Reuses the marshaller. + * @param in the data source or {@code null}. + * @throws IllegalStateException on pending data. + */ + public void reset(InputStream in) { + if (this.i != this.offset) throw new IllegalStateException("colfer: pending data"); + this.in = in; + this.offset = 0; + this.i = 0; + } + + /** + * Deserializes the following object. + * @return the result or {@code null} when EOF. + * @throws IOException from the input stream. + * @throws SecurityException on an upper limit breach defined by either {@link #colferSizeMax} or {@link #colferListMax}. + * @throws InputMismatchException when the data does not match this object's schema. + */ + public Tags next() throws IOException { + if (in == null) return null; + + while (true) { + if (this.i > this.offset) { + try { + Tags o = new Tags(); + this.offset = o.unmarshal(this.buf, this.offset, this.i); + return o; + } catch (BufferUnderflowException e) { + } + } + // not enough data + + if (this.i <= this.offset) { + this.offset = 0; + this.i = 0; + } else if (i == buf.length) { + byte[] src = this.buf; + // TODO: better size estimation + if (offset == 0) this.buf = new byte[Math.min(Tags.colferSizeMax, this.buf.length * 4)]; + System.arraycopy(src, this.offset, this.buf, 0, this.i - this.offset); + this.i -= this.offset; + this.offset = 0; + } + assert this.i < this.buf.length; + + int n = in.read(buf, i, buf.length - i); + if (n < 0) { + if (this.i > this.offset) + throw new InputMismatchException("colfer: pending data with EOF"); + return null; + } + assert n > 0; + i += n; + } + } + + } + + + /** + * Serializes the object. + * All {@code null} elements in {@link #strings} will be replaced with a {@code new} value. + * All {@code null} elements in {@link #longs} will be replaced with a {@code new} value. + * All {@code null} elements in {@link #booleans} will be replaced with a {@code new} value. + * @param out the data destination. + * @param buf the initial buffer or {@code null}. + * @return the final buffer. When the serial fits into {@code buf} then the return is {@code buf}. + * Otherwise the return is a new buffer, large enough to hold the whole serial. + * @throws IOException from {@code out}. + * @throws IllegalStateException on an upper limit breach defined by either {@link #colferSizeMax} or {@link #colferListMax}. + */ + public byte[] marshal(OutputStream out, byte[] buf) throws IOException { + // TODO: better size estimation + if (buf == null || buf.length == 0) + buf = new byte[Math.min(Tags.colferSizeMax, 2048)]; + + while (true) { + int i; + try { + i = marshal(buf, 0); + } catch (BufferOverflowException e) { + buf = new byte[Math.min(Tags.colferSizeMax, buf.length * 4)]; + continue; + } + + out.write(buf, 0, i); + return buf; + } + } + + /** + * Serializes the object. + * All {@code null} elements in {@link #strings} will be replaced with a {@code new} value. + * All {@code null} elements in {@link #longs} will be replaced with a {@code new} value. + * All {@code null} elements in {@link #booleans} will be replaced with a {@code new} value. + * @param buf the data destination. + * @param offset the initial index for {@code buf}, inclusive. + * @return the final index for {@code buf}, exclusive. + * @throws BufferOverflowException when {@code buf} is too small. + * @throws IllegalStateException on an upper limit breach defined by either {@link #colferSizeMax} or {@link #colferListMax}. + */ + public int marshal(byte[] buf, int offset) { + int i = offset; + + try { + if (this.strings.length != 0) { + buf[i++] = (byte) 0; + StringTag[] a = this.strings; + + int x = a.length; + if (x > Tags.colferListMax) + throw new IllegalStateException(format("colfer: kamon/context/generated/binary/context.Tags.strings length %d exceeds %d elements", x, Tags.colferListMax)); + while (x > 0x7f) { + buf[i++] = (byte) (x | 0x80); + x >>>= 7; + } + buf[i++] = (byte) x; + + for (int ai = 0; ai < a.length; ai++) { + StringTag o = a[ai]; + if (o == null) { + o = new StringTag(); + a[ai] = o; + } + i = o.marshal(buf, i); + } + } + + if (this.longs.length != 0) { + buf[i++] = (byte) 1; + LongTag[] a = this.longs; + + int x = a.length; + if (x > Tags.colferListMax) + throw new IllegalStateException(format("colfer: kamon/context/generated/binary/context.Tags.longs length %d exceeds %d elements", x, Tags.colferListMax)); + while (x > 0x7f) { + buf[i++] = (byte) (x | 0x80); + x >>>= 7; + } + buf[i++] = (byte) x; + + for (int ai = 0; ai < a.length; ai++) { + LongTag o = a[ai]; + if (o == null) { + o = new LongTag(); + a[ai] = o; + } + i = o.marshal(buf, i); + } + } + + if (this.booleans.length != 0) { + buf[i++] = (byte) 2; + BooleanTag[] a = this.booleans; + + int x = a.length; + if (x > Tags.colferListMax) + throw new IllegalStateException(format("colfer: kamon/context/generated/binary/context.Tags.booleans length %d exceeds %d elements", x, Tags.colferListMax)); + while (x > 0x7f) { + buf[i++] = (byte) (x | 0x80); + x >>>= 7; + } + buf[i++] = (byte) x; + + for (int ai = 0; ai < a.length; ai++) { + BooleanTag o = a[ai]; + if (o == null) { + o = new BooleanTag(); + a[ai] = o; + } + i = o.marshal(buf, i); + } + } + + buf[i++] = (byte) 0x7f; + return i; + } catch (ArrayIndexOutOfBoundsException e) { + if (i - offset > Tags.colferSizeMax) + throw new IllegalStateException(format("colfer: kamon/context/generated/binary/context.Tags exceeds %d bytes", Tags.colferSizeMax)); + if (i > buf.length) throw new BufferOverflowException(); + throw e; + } + } + + /** + * Deserializes the object. + * @param buf the data source. + * @param offset the initial index for {@code buf}, inclusive. + * @return the final index for {@code buf}, exclusive. + * @throws BufferUnderflowException when {@code buf} is incomplete. (EOF) + * @throws SecurityException on an upper limit breach defined by either {@link #colferSizeMax} or {@link #colferListMax}. + * @throws InputMismatchException when the data does not match this object's schema. + */ + public int unmarshal(byte[] buf, int offset) { + return unmarshal(buf, offset, buf.length); + } + + /** + * Deserializes the object. + * @param buf the data source. + * @param offset the initial index for {@code buf}, inclusive. + * @param end the index limit for {@code buf}, exclusive. + * @return the final index for {@code buf}, exclusive. + * @throws BufferUnderflowException when {@code buf} is incomplete. (EOF) + * @throws SecurityException on an upper limit breach defined by either {@link #colferSizeMax} or {@link #colferListMax}. + * @throws InputMismatchException when the data does not match this object's schema. + */ + public int unmarshal(byte[] buf, int offset, int end) { + if (end > buf.length) end = buf.length; + int i = offset; + + try { + byte header = buf[i++]; + + if (header == (byte) 0) { + int length = 0; + for (int shift = 0; true; shift += 7) { + byte b = buf[i++]; + length |= (b & 0x7f) << shift; + if (shift == 28 || b >= 0) break; + } + if (length < 0 || length > Tags.colferListMax) + throw new SecurityException(format("colfer: kamon/context/generated/binary/context.Tags.strings length %d exceeds %d elements", length, Tags.colferListMax)); + + StringTag[] a = new StringTag[length]; + for (int ai = 0; ai < length; ai++) { + StringTag o = new StringTag(); + i = o.unmarshal(buf, i, end); + a[ai] = o; + } + this.strings = a; + header = buf[i++]; + } + + if (header == (byte) 1) { + int length = 0; + for (int shift = 0; true; shift += 7) { + byte b = buf[i++]; + length |= (b & 0x7f) << shift; + if (shift == 28 || b >= 0) break; + } + if (length < 0 || length > Tags.colferListMax) + throw new SecurityException(format("colfer: kamon/context/generated/binary/context.Tags.longs length %d exceeds %d elements", length, Tags.colferListMax)); + + LongTag[] a = new LongTag[length]; + for (int ai = 0; ai < length; ai++) { + LongTag o = new LongTag(); + i = o.unmarshal(buf, i, end); + a[ai] = o; + } + this.longs = a; + header = buf[i++]; + } + + if (header == (byte) 2) { + int length = 0; + for (int shift = 0; true; shift += 7) { + byte b = buf[i++]; + length |= (b & 0x7f) << shift; + if (shift == 28 || b >= 0) break; + } + if (length < 0 || length > Tags.colferListMax) + throw new SecurityException(format("colfer: kamon/context/generated/binary/context.Tags.booleans length %d exceeds %d elements", length, Tags.colferListMax)); + + BooleanTag[] a = new BooleanTag[length]; + for (int ai = 0; ai < length; ai++) { + BooleanTag o = new BooleanTag(); + i = o.unmarshal(buf, i, end); + a[ai] = o; + } + this.booleans = a; + header = buf[i++]; + } + + if (header != (byte) 0x7f) + throw new InputMismatchException(format("colfer: unknown header at byte %d", i - 1)); + } finally { + if (i > end && end - offset < Tags.colferSizeMax) throw new BufferUnderflowException(); + if (i < 0 || i - offset > Tags.colferSizeMax) + throw new SecurityException(format("colfer: kamon/context/generated/binary/context.Tags exceeds %d bytes", Tags.colferSizeMax)); + if (i > end) throw new BufferUnderflowException(); + } + + return i; + } + + // {@link Serializable} version number. + private static final long serialVersionUID = 3L; + + // {@link Serializable} Colfer extension. + private void writeObject(ObjectOutputStream out) throws IOException { + // TODO: better size estimation + byte[] buf = new byte[1024]; + int n; + while (true) try { + n = marshal(buf, 0); + break; + } catch (BufferUnderflowException e) { + buf = new byte[4 * buf.length]; + } + + out.writeInt(n); + out.write(buf, 0, n); + } + + // {@link Serializable} Colfer extension. + private void readObject(ObjectInputStream in) throws ClassNotFoundException, IOException { + init(); + + int n = in.readInt(); + byte[] buf = new byte[n]; + in.readFully(buf); + unmarshal(buf, 0); + } + + // {@link Serializable} Colfer extension. + private void readObjectNoData() throws ObjectStreamException { + init(); + } + + /** + * Gets kamon/context/generated/binary/context.Tags.strings. + * @return the value. + */ + public StringTag[] getStrings() { + return this.strings; + } + + /** + * Sets kamon/context/generated/binary/context.Tags.strings. + * @param value the replacement. + */ + public void setStrings(StringTag[] value) { + this.strings = value; + } + + /** + * Sets kamon/context/generated/binary/context.Tags.strings. + * @param value the replacement. + * @return {link this}. + */ + public Tags withStrings(StringTag[] value) { + this.strings = value; + return this; + } + + /** + * Gets kamon/context/generated/binary/context.Tags.longs. + * @return the value. + */ + public LongTag[] getLongs() { + return this.longs; + } + + /** + * Sets kamon/context/generated/binary/context.Tags.longs. + * @param value the replacement. + */ + public void setLongs(LongTag[] value) { + this.longs = value; + } + + /** + * Sets kamon/context/generated/binary/context.Tags.longs. + * @param value the replacement. + * @return {link this}. + */ + public Tags withLongs(LongTag[] value) { + this.longs = value; + return this; + } + + /** + * Gets kamon/context/generated/binary/context.Tags.booleans. + * @return the value. + */ + public BooleanTag[] getBooleans() { + return this.booleans; + } + + /** + * Sets kamon/context/generated/binary/context.Tags.booleans. + * @param value the replacement. + */ + public void setBooleans(BooleanTag[] value) { + this.booleans = value; + } + + /** + * Sets kamon/context/generated/binary/context.Tags.booleans. + * @param value the replacement. + * @return {link this}. + */ + public Tags withBooleans(BooleanTag[] value) { + this.booleans = value; + return this; + } + + @Override + public final int hashCode() { + int h = 1; + for (StringTag o : this.strings) h = 31 * h + (o == null ? 0 : o.hashCode()); + for (LongTag o : this.longs) h = 31 * h + (o == null ? 0 : o.hashCode()); + for (BooleanTag o : this.booleans) h = 31 * h + (o == null ? 0 : o.hashCode()); + return h; + } + + @Override + public final boolean equals(Object o) { + return o instanceof Tags && equals((Tags) o); + } + + public final boolean equals(Tags o) { + if (o == null) return false; + if (o == this) return true; + return o.getClass() == Tags.class + && java.util.Arrays.equals(this.strings, o.strings) + && java.util.Arrays.equals(this.longs, o.longs) + && java.util.Arrays.equals(this.booleans, o.booleans); + } + +} -- cgit v1.2.3