private DistinctObservation NewObservation(long timestamp, DistinctObservation[] existingObservations, Exception observation) { DistinctObservation existingObservation = null; if (existingObservations != _distinctObservations) { existingObservation = Find(_distinctObservations, observation); } if (existingObservation == null) { byte[] encodedError = Encoding.UTF8.GetBytes(observation.ToString()); int length = EncodedErrorOffset + encodedError.Length; int offset = _nextOffset; if ((offset + length) > _buffer.Capacity) { return(InsufficientSpace); } _buffer.PutBytes(offset + EncodedErrorOffset, encodedError); _buffer.PutLong(offset + FirstObservationTimestampOffset, timestamp); _nextOffset = BitUtil.Align(offset + length, RecordAlignment); existingObservation = new DistinctObservation(observation, offset); _distinctObservations = Prepend(_distinctObservations, existingObservation); _buffer.PutIntOrdered(offset + LengthOffset, length); } return(existingObservation); }
private static DistinctObservation[] Prepend(DistinctObservation[] observations, DistinctObservation observation) { int length = observations.Length; var newObservations = new DistinctObservation[length + 1]; newObservations[0] = observation; Array.Copy(observations, 0, newObservations, 1, length); return(newObservations); }
private static DistinctObservation Find(DistinctObservation[] existingObservations, Exception observation) { DistinctObservation existingObservation = null; foreach (var o in existingObservations) { if (ExceptionEquals(o.Throwable, observation)) { existingObservation = o; break; } } return(existingObservation); }
private static DistinctObservation[] Prepend(DistinctObservation[] observations, DistinctObservation observation) { int length = observations.Length; var newObservations = new DistinctObservation[length + 1]; newObservations[0] = observation; Array.Copy(observations, 0, newObservations, 1, length); return newObservations; }
private DistinctObservation NewObservation(long timestamp, DistinctObservation[] existingObservations, Exception observation) { DistinctObservation existingObservation = null; if (existingObservations != _distinctObservations) { existingObservation = Find(_distinctObservations, observation); } if (existingObservation == null) { byte[] encodedError = Encoding.UTF8.GetBytes(observation.ToString()); int length = EncodedErrorOffset + encodedError.Length; int offset = _nextOffset; if ((offset + length) > _buffer.Capacity) { return InsufficientSpace; } _buffer.PutBytes(offset + EncodedErrorOffset, encodedError); _buffer.PutLong(offset + FirstObservationTimestampOffset, timestamp); _nextOffset = BitUtil.Align(offset + length, RecordAlignment); existingObservation = new DistinctObservation(observation, offset); _distinctObservations = Prepend(_distinctObservations, existingObservation); _buffer.PutIntOrdered(offset + LengthOffset, length); } return existingObservation; }
private static DistinctObservation Find(DistinctObservation[] existingObservations, Exception observation) { DistinctObservation existingObservation = null; foreach (var o in existingObservations) { if (ExceptionEquals(o.Throwable, observation)) { existingObservation = o; break; } } return existingObservation; }