示例#1
0
文件: graph.py 项目: xneby/kolstat
	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))
示例#2
0
    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)