Files
boc/aamos-command-center/target/release/deps/libfutures-27e2cfae11c3b37a.rlib
T

75 lines
19 KiB
Plaintext
Raw Normal View History

!<arch>
/ 0 0 0 0 8 `
// 64 `
futures-27e2cfae11c3b37a.futures.fd70aea862240939-cgu.0.rcgu.o/
lib.rmeta/ 0 0 0 644 18064 `
ELF·E@@GNUÀrust
ÍB#rustc 1.96.0 (ac68faa20 2026-05-25)ÁíàÄTËŸ ÜJîÄ)'ß\¥!-3d1337db07d0b3aeÁ futures_coreÁÔ #0€ŒlÏ/œ%áàæ!-54e00c79609f6de3Á¤²XctÔ'ÐÓ©z¨ɽÓ-a4945860e1c53b00Á¤°ð ¾ä-±($²ï=©Ã-7e98a21bfd32b0edÁÀ뉊]!ÜÛê(¹Þ—šên-5be7b69c3ff7b5b8ÁòÖÀH•‘PIÓHã#£-055f30b747f859b6Árustc_std_workspace_coreÁ­Cçß^ò½èÝ$­Çÿ+Cé-c4878ee60b2242c9ÁŸÃï+Ñ]ŠqB<ÏïW#-8dd1dd90e70d0b6aÁ miniz_oxideÁ€š»J(P>àö÷g\K-1eb618da2918ab7fÁadler2ÁÆ;+Þ®5¥Ìýݰ¦ÛLˆ-f7919172d268e069Á hashbrownÁPäV9ÒÆèÜ"ÊÖVŽ\-0fc2184a5da6723aÁrustc_std_workspace_allocÁs&ØòØy¯s•bæ!‰ýŠ-97e4bf30be240674Á
std_detectÁhŠBîÙºÌI®ËÅš-9dbbf8346ba7ac8bÁrustc_demangleÁûë9´Ç×@Œ’ùXFº-f33013f239bf9f14Ácfg_ifÁÜLhž§Œaã¯>­-0a71c8f33a838301Á addr2lineÁ׎Þ!]8V$É@@-e618e6be60e87ba2ÁgimliÁ¸
°µ~Î1‹Ñt ðÁ€w-1f7768a68858f670ÁobjectÁ
áPÃ?­À¶¼QHJ¥-914cd6a4dbe590d1ÁmemchrÁ›º«8Ór­2Ù $¨ûib-cf21ca6f2bb15dcdÁë
‹ás«LÖ€îâƒ×ɯŒ-ee6f3747e38367f0Á futures_utilÁ}h"gœ«ìj¾<G-a74bc5f08cd6c96fÁ
futures_macroÁboÆ$¾É æðGô}-cbbe8d74ceaf6376Á futures_taskÁ+ÓÅfÐ4Pú{-¸*1¨-dcd8a3e2825c89abÁ futures_sinkÁݬwÞÚ7Žª _°à\-005b1f0a7b5abe4aÁpin_project_liteÁc:ž“èqPÔ² låî-fa08336265b0d278Áfutures_channelÁ¿êû„ñ’ óÓ¹-89600126d4fe9190ÁslabÁ˜ìòͺܓ$® %ãÕ6-940e9d610b73c48bÁ
futures_ioÁµ] óŽe_a€FµwBM-52cc55b2510d5c5fÁ¡46¯¦ŒïõÅ’Z/¯-a454f505f30bc1f2Áfutures_executorÁ«Šôưâqφj¨Eøhý-a25816c8b7e66e5cÁ.
ThreadPoolÁT´<» thread-poolÁ¼À;.ThreadPoolBuilderÁŒÀ<»˜ ')compatÁ4¬=»Ò ”Ý<í 
  
 !"#$%&'()*+executorÁ.........¥ 8888888888 8
8 8 8
88888888888888.8íFutureÁ4µ ‚Ø TryFutureÁL½ ! FutureExtÁLú © TryFutureExtÁd…!ÎStreamÁ4Æ!E
TryStreamÁLÎ!b StreamExtÁL"ý
TryStreamExtÁd"ûSinkÁ$Î"
SinkExtÁ<#œ) AsyncBufReadÁdË# AsyncReadÁLÙ# AsyncSeekÁLä#
AsyncWriteÁTï#AsyncBufReadExtÁ|½$Ä1 AsyncReadExtÁdÎ$¡1 AsyncSeekExtÁdÜ$¿1
AsyncWriteExtÁlê$²1readyÁ,¤%pin_mutÁ<Ú%Ö5selectÁ4±&â5joinÁ$ð&ß5pendingÁ<ö&% Š $ÿ& !Š !
select_biasedÁl…'á5"try_joinÁD”'à5#futureÁ4é'h%â ,ñ'ù)&sinkÁ$ø'Ã%'streamÁ4þ'
(taskÁ$†(Å))
stream_selectÁlÜ(9*channelÁ<°)+lockÁ$ø)Û1,ioÁ¼*û)µKü.+ Abstractions for asynchronous programming.Á/úü3NK This crate provides a number of core abstractions for writing asynchronousÁL code:ÁŒúüEB - [Futures](crate::future) are single eventual values produced byÁüÖMJ asynchronous computations. Some programming languages (e.g. JavaScript)Áü¤" call this concept "promise".ÁüÇ;8 - [Streams](crate::stream) represent a series of valuesÁôƒ produced asynchronously.Áü¢FC - [Sinks](crate::sink) provide support for asynchronous writing ofÁ data.ÁüõKH - [Executors](crate::executor) are responsible for running asynchronousÁ tasks.ÁÎúüÒNK The crate also contains abstractions for [asynchronous I/O](crate::io) andÁü¡/, [cross-task communication](crate::channel).ÁÑúüÕOL Underlying all of this is the *task system*, which is a form of lightweightÁü¥JG threading. Large asynchronous computations are built up using futures,ÁüðLI streams and sinks, and then spawned as independent tasks that are run toÁü½;8 completion, but *do not block* the thread running them.ÁùúüýQN The following example describes how the task system context is built and usedÁüÏ85 within macros and keywords such as async and await!.Áˆ ú ```rustÁü˜ ! # use futures::channel::mpsc;Áüº _\ # use futures::executor; ///standard executors to provide a context for futures and streamsÁüš
(% # use futures::executor::ThreadPool;ÁìÃ
 # use futures::StreamExt;Á

fn main() {Á
 # {Áüƒ DA let pool = ThreadPool::new().expect("Failed to build pool");ÁüÈ 0- let (tx, rx) = mpsc::unbounded::<i32>();Áù úüý OL // Create a future by an async block, where async is responsible for anÁüÍ PM // implementation of Future. At this point no executor has been providedÁüž
52 // to this future, so it will not be running.ÁüÔ
 let fut_values = async {Áüõ
PM // Create another async block, again where the Future implementationÁüÆSP // is generated by async. Since this is inside of a parent async block,ÁüšXU // it will be provided with the executor of the parent block when the parentÁüó! // block is executed.Át• //Áü¤SP // This executor chaining is done by Future::poll whose second argumentÁüøTQ // is a std::task::Context. This represents our executor, and the FutureÁüÍSP // implemented by this async block can be polled using the parent asyncÁü¡  // block's executor.ÁüÂ,) let fut_tx_result = async move {Áüï'$ (0..100).for_each(|v| {Áü—B? tx.unbounded_send(v).expect("Failed to send");Á”Ú })Á };Áüúü€IF // Use the provided thread pool to spawn the generated futureÁüÊ+( // responsible for transmissionÁüö)& pool.spawn_ok(fut_tx_result);Á úü¤ let fut_values = rxÁüÄ .map(|v| v * 2)ÁÜä .collect();Áúü„LI // Use the executor provided to this async block to wait for theÁüÑ" // future to complete.Áäô fut_values.awaitÁT };Áœúü PM // Actually execute the above future, which will invoke Future::poll andÁüñTQ // subsequently chain appropriate Future::poll and methods needing executorsÁüÆTQ // to drive all futures. Eventually fut_values will be driven to completion.Áü›>; let values: Vec<i32> = executor::block_on(fut_values);ÁÚúüÞ(% println!("Values={:?}", values);Á\‡ # }Áü“ # std::thread::sleep(std::time::Duration::from_millis(500)); // wait for background threads closed: https://github.com/rust-lang/miri/issues/1371Á,­ ```Á»úü¿QN The majority of examples and code snippets in this crate assume that they areÁü‘+( inside an async block as written above.Áüý6ü½6.8íÕãë‚Øû!©®<ÎËSE
álb úý
¢û±·
ÅΜ)Ýëù  «7 ÅV Ä1ås ¡1 ¿1Ÿ® ²1½Ä ÔÝ Ö5íõ â5
ß5$
% Š 5
!Š 5
!Òa
á5"ñ{
à5#
h%â £
ù)&²¸
Ã%'ÇÏ

(Þä
Å))ó 9* +¨. Û1,½A û)-ÕÕÕ¤ž ëë¤ã <<¤¯!SSll¤ô!¢¢”À"·Üî"ÎT¾#ëë    7 7 d®$V V s s   ® ® œ–%Ä ¬Ì%Ý ¤£&õ dá&

$
$
5
5
a
a
{
{
dÚ'

£
£
¸
¸
Ï
Ï
ä
ä
ÜÎ( |) ”ê). „®*A „’+ü©+)& Built-in executors and related tools.Á×+úüß+DA All asynchronous computation occurs within an executor, which isÁü¨,FC capable of spawning futures as tasks. This module provides severalÁüó,?< built-in executors, as well as tools for building your own.Á·-ú¿-úüÇ-EB This module is only available when the `executor` feature of thisÁÌ‘. library is activated.Á¯.úü·./, # Using a thread pool (M:N task scheduling)Áë.úüó.MJ Most of the time tasks should be executed on a [thread pool](ThreadPool).ÁüÅ/NK A small set of worker threads can handle a very large set of spawned tasksÁü˜0MJ (which are much lighter weight than threads). Tasks spawned onto the poolÁüê0NK with the [`spawn_ok`](ThreadPool::spawn_ok) function will run ambiently onÁĽ1 the created threads.ÁÚ1úüâ1 # Spawning additional tasksÁ†2úüŽ2KH Tasks can be spawned onto a spawner by calling its [`spawn_obj`] methodÁüÞ2MJ directly. In the case of `!Send` futures, [`spawn_local_obj`] can be usedÁd°3 instead.ÁÁ3úüÉ3 # Single-threaded executionÁí3úüõ3KH In addition to thread pools, it's possible to run a task (and the tasksÁüÅ4NK it spawns) entirely within a single thread via the [`LocalPool`] executor.Áü˜5NK Aside from cutting down on synchronization costs, this executor also makesÁüë5GD it possible to spawn non-`Send` tasks, via [`spawn_local_obj`]. TheÁü·6OL [`LocalPool`] is best suited for running I/O-bound tasks that do relativelyÁü‹7'$ little work between I/O operations.Á·7úü¿7JG There is also a convenience function [`block_on`] for simply running aÁüŽ8/, future to completion on the current thread.ÁÂ8úüÊ8_\ [`spawn_obj`]: https://docs.rs/futures/0.3/futures/task/trait.Spawn.html#tymethod.spawn_objÁü®9pm [`spawn_local_obj`]: https://docs.rs/futures/0.3/futures/task/trait.LocalSpawn.html#tymethod.spawn_local_objÁ»ª¤Ç*äÁ*Dš+block_onÁDÈ: C0block_on_streamÁ|Ò: F1enterÁ,ã: o2BlockingStreamÁtê:Œ3EnterÁ,ú:f4
EnterErrorÁT;h5 LocalPoolÁL;z6 LocalSpawnerÁd ;7„¬:ÈÊ­¯œžprZ\EG-/|àAüöA52 A "prelude" for crates using the `futures` crate.Á°Búü¸BLI This prelude is similar to the standard library's prelude in that you'llÁü‰CDA almost always want to import its entire contents, but unlike theÁüÒC=: standard library's prelude you'll have to do so manually:Á”Dú<œD±7ô¨D # #[allow(unused_imports)]ÁäËD use futures::prelude::*;Á<ìD±7øDúü€EJG The prelude may grow over time as additional items see ubiquitous use.Á<èA$èEh:ã4îE‚Ø;ûLöE!<²$œFÃ%>±$¢F
?Ç$ÅF
AË4ËFEBáLÓFbCÝdºILùLÈIMLÓIN«TÞIO ½G©E ÐGÎF ŽHœ)G îHýI IûJ ðJÄ1Q ƒK¡1R K¿1S ªK²1TlØEU4ßELO@C\ŽF:$•F03lµF*4¼F #l GL°GÕdÀGˤöGÁlÑHLáH»dñH±L®I69,/"%LÈJ|ÝJÇdóJ½d†K³l™K©'StreamsÁ
crate::streamÁSinksÁ crate::sinkÁ ExecutorsÁcrate::executorÁ.asynchronous I/OÁ crate::ioÁFuturesÁcross-task communicationÁcrate::channelÁ
crate::futureÁZZ
¯Z¹ZÉZ×ZïZˆ[û)¢[–[Ò[Z¿[Z¯Z¹ZÃ%ÉZ×ZïZˆ[¢[[Ò[h¿[ spawn_objÁ9https://docs.rs/futures/0.3/futures/task/trait.Spawn.htmlÁspawn_local_objÁ>https://docs.rs/futures/0.3/futures/task/trait.LocalSpawn.htmlÁµQz  thread poolÁspawn_okÁThreadPool::spawn_okÁ€]Ž]PÌ]à]µQ±^ Á^Î^€]›P CŽ]Ì]à]µQ±^ Á^›PÎ^‚Ø!©ÎEbýû