141 val regex = make_regex(pattern) |
141 val regex = make_regex(pattern) |
142 (theory_name: String, name: String) => |
142 (theory_name: String, name: String) => |
143 regex.pattern.matcher(compound_name(theory_name, name)).matches |
143 regex.pattern.matcher(compound_name(theory_name, name)).matches |
144 } |
144 } |
145 |
145 |
|
146 private lazy val later: Consumer_Thread[() => Unit] = |
|
147 Consumer_Thread.fork(name = "Export.later", daemon = true)( |
|
148 consume = (run: () => Unit) => { run(); true }) |
|
149 |
146 def make_entry(session_name: String, args: Protocol.Export.Args, body: Bytes, |
150 def make_entry(session_name: String, args: Protocol.Export.Args, body: Bytes, |
147 cache: XZ.Cache = XZ.cache()): Entry = |
151 cache: XZ.Cache = XZ.cache()): Entry = |
148 { |
152 { |
149 Entry(session_name, args.theory_name, args.name, args.executable, |
153 Entry(session_name, args.theory_name, args.name, args.executable, |
150 if (args.compress) Future.fork(body.maybe_compress(cache = cache)) |
154 if (args.compress) { |
|
155 val result = Future.promise[(Boolean, Bytes)] |
|
156 later.send(() => result.fulfill(body.maybe_compress(cache = cache))) |
|
157 result |
|
158 } |
151 else Future.value((false, body))) |
159 else Future.value((false, body))) |
152 } |
160 } |
153 |
161 |
154 def read_entry(db: SQL.Database, session_name: String, theory_name: String, name: String) |
162 def read_entry(db: SQL.Database, session_name: String, theory_name: String, name: String) |
155 : Option[Entry] = |
163 : Option[Entry] = |