def save_to(self, stream): class Buffer: length = 0 @classmethod def append(cls, s): stream.write(s) cls.length += len(s) def write_integer(n): n = int(n) Buffer.append(struct.pack('i', n)) def write_string(s): Buffer.append(s) start_time = time.time() info('Writing header... ') write_integer(MAGIC) write_integer(time.time()) write_integer(len(self.stations)) write_integer(len(self.list_conn)) done(t = start_time) start_time = time.time() info('Writing stations... ') l = len(self.stations) for i, st in enumerate(self.stations): info('Writing stations... {:3}/{:3} ({:6.2f}%) '.format(i, l, 100.0 * i/l)) if st is None or st.pk not in self.edges: write_integer(0) else: conn = self.edges[st.pk] write_integer(len(conn)) for st, nr in conn: write_integer(st) write_integer(nr) done('Writing stations... ', start_time) start_time = time.time() l = len(self.list_conn) for i, (s1, s2) in enumerate(self.list_conn): info('Writing connections... {:3}/{:3} ({:6.2f}%) '.format(i, l, 100.0 * i/l)) conns = self.connections[(s1, s2)] write_integer(len(conns)) for s, d, dt, at, s1, s2 in conns: write_integer(s) write_integer(d) write_integer(make_planner_time(dt)) write_integer(make_planner_time(at)) write_integer(s1) write_integer(s2) done('Writing connections... ', start_time) print('size: {}KiB'.format(Buffer.length/1024))
def to_s(source_st, dest_st, time): ss = source_st.pk dd = dest_st.pk tt = make_planner_time(time) print(ss, dd, tt) return struct.pack("iiii", 1, ss, dd, tt)