MATSIM
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
org.matsim.utils.eventsfilecomparison.EventFingerprint Class Reference

Public Member Functions

String toString ()
 

Static Public Member Functions

static void write (String filePath, EventFingerprint eventFingerprint)
 
static EventFingerprint read (String fingerprintPath) throws IOException
 

Private Member Functions

 EventFingerprint (FloatList timeArray, Object2IntMap< String > eventTypeCounter, byte[] hash)
 

Private Attributes

final MessageDigest digest
 

Detailed Description

Class holding reduced information about an events file. If two such fingerprint are different, one can conclude that the event files are semantically different.

The fingerprint is based on the following information:

Note: Events with the same timestamp are allowed to occur in any order.

Definition at line 30 of file EventFingerprint.java.

Constructor & Destructor Documentation

◆ EventFingerprint()

org.matsim.utils.eventsfilecomparison.EventFingerprint.EventFingerprint ( FloatList  timeArray,
Object2IntMap< String >  eventTypeCounter,
byte []  hash 
)
private

Definition at line 46 of file EventFingerprint.java.

46  {
47  this.timeArray = timeArray;
48  this.eventTypeCounter = eventTypeCounter;
49  this.hash = hash;
50  this.digest = null;
51  }

Member Function Documentation

◆ write()

static void org.matsim.utils.eventsfilecomparison.EventFingerprint.write ( String  filePath,
EventFingerprint  eventFingerprint 
)
static

Definition at line 65 of file EventFingerprint.java.

References org.matsim.core.utils.io.IOUtils.getFileUrl(), and org.matsim.core.utils.io.IOUtils.getOutputStream().

Referenced by org.matsim.core.events.EventsUtils.assertEqualEventsFingerprint(), org.matsim.core.events.EventsUtils.createAndCompareEventsFingerprint(), and org.matsim.core.events.EventsUtils.createEventsFingerprint().

65  {
66  try (DataOutputStream dataOutputStream = new DataOutputStream(IOUtils.getOutputStream(IOUtils.getFileUrl(filePath), false))) {
67  // Write header and version
68  dataOutputStream.writeInt(EventFingerprint.HEADER_V1);
69 
70  // Write time array size and elements
71  dataOutputStream.writeInt(eventFingerprint.timeArray.size());
72  for (float time : eventFingerprint.timeArray) {
73  dataOutputStream.writeFloat(time);
74  }
75 
76  // Write event type counter map size and elements
77  dataOutputStream.writeInt(eventFingerprint.eventTypeCounter.size());
78  for (Map.Entry<String, Integer> entry : eventFingerprint.eventTypeCounter.entrySet()) {
79  dataOutputStream.writeUTF(entry.getKey());
80  dataOutputStream.writeInt(entry.getValue());
81  }
82 
83  // Hash should always be computed at this point
84  assert !Arrays.equals(eventFingerprint.hash, new byte[20]) : "Hash was not computed";
85 
86  // Write byte hash
87  dataOutputStream.write(eventFingerprint.hash);
88 
89  } catch (IOException e) {
90  throw new UncheckedIOException(e);
91  }
92  }
EventFingerprint(FloatList timeArray, Object2IntMap< String > eventTypeCounter, byte[] hash)
Here is the call graph for this function:

◆ read()

static EventFingerprint org.matsim.utils.eventsfilecomparison.EventFingerprint.read ( String  fingerprintPath) throws IOException
static

Definition at line 94 of file EventFingerprint.java.

References org.matsim.core.utils.io.IOUtils.getFileUrl(), and org.matsim.core.utils.io.IOUtils.getInputStream().

Referenced by org.matsim.utils.eventsfilecomparison.EventsFileFingerprintComparator.compareFingerprints(), and org.matsim.utils.eventsfilecomparison.EventsFileFingerprintComparator.createFingerprintHandler().

94  {
95  EventFingerprint eventFingerprint;
96 
97  try (DataInputStream dataInputStream = new DataInputStream(IOUtils.getInputStream(IOUtils.getFileUrl(fingerprintPath)))) {
98  // Read header and version
99  int fileHeader = dataInputStream.readInt();
100 
101  if (fileHeader != EventFingerprint.HEADER_V1) {
102  throw new IllegalArgumentException("Invalid fingerprint file header");
103  }
104 
105  // Read time array
106  int timeArraySize = dataInputStream.readInt();
107  FloatList timeArray = new FloatArrayList();
108  for (int i = 0; i < timeArraySize; i++) {
109  timeArray.add(dataInputStream.readFloat());
110  }
111 
112  // Read event type counter map
113  int eventTypeCounterSize = dataInputStream.readInt();
114  Object2IntMap<String> eventTypeCounter = new Object2IntOpenHashMap<>();
115  for (int i = 0; i < eventTypeCounterSize; i++) {
116  String eventType = dataInputStream.readUTF();
117  int count = dataInputStream.readInt();
118  eventTypeCounter.put(eventType, count);
119  }
120 
121  // Read string hash
122  byte[] hash = dataInputStream.readNBytes(20);
123 
124  // Create EventFingerprint object
125  eventFingerprint = new EventFingerprint(timeArray, eventTypeCounter, hash);
126  }
127 
128  return eventFingerprint;
129  }
EventFingerprint(FloatList timeArray, Object2IntMap< String > eventTypeCounter, byte[] hash)
Here is the call graph for this function:

◆ toString()

String org.matsim.utils.eventsfilecomparison.EventFingerprint.toString ( )

Definition at line 158 of file EventFingerprint.java.

158  {
159  return "EventFingerprint{" +
160  "timeArray=" + timeArray.size() +
161  ", eventTypeCounter=" + eventTypeCounter +
162  ", hash=" + Arrays.toString(hash) +
163  '}';
164  }

Member Data Documentation

◆ digest

final MessageDigest org.matsim.utils.eventsfilecomparison.EventFingerprint.digest
private

Builder for the hash.

Definition at line 44 of file EventFingerprint.java.


The documentation for this class was generated from the following file: