var searchIndex = {}; searchIndex["session_types"] = {"doc":"session_types","items":[[3,"Chan","session_types","A session typed channel. `P` is the protocol and `E` is the environment,\ncontaining potential recursion targets",null,null],[3,"Z","","Peano numbers: Zero",null,null],[3,"S","","Peano numbers: Increment",null,null],[3,"Eps","","End of communication session (epsilon)",null,null],[3,"Recv","","Receive `A`, then `P`",null,null],[3,"Send","","Send `A`, then `P`",null,null],[3,"Choose","","Active choice between `P` and `Q`",null,null],[3,"Offer","","Passive choice (offer) between `P` and `Q`",null,null],[3,"Rec","","Enter a recursive environment",null,null],[3,"Var","","Recurse. N indicates how many layers of the recursive environment we recurse\nout of.",null,null],[3,"ChanSelect","","Heterogeneous selection structure for channels",null,null],[4,"Branch","","",null,null],[13,"Left","","",0,null],[13,"Right","","",0,null],[5,"hselect","","Homogeneous select. We have a vector of channels, all obeying the same\nprotocol (and in the exact same point of the protocol), wait for one of them\nto receive. Removes the receiving channel from the vector and returns both\nthe channel and the new vector.",null,null],[5,"iselect","","An alternative version of homogeneous select, returning the index of the Chan\nthat is ready to receive.",null,{"inputs":[{"name":"vec"}],"output":{"name":"usize"}}],[5,"session_channel","","Returns two session channels",null,null],[5,"connect","","Connect two functions using a session typed channel.",null,{"inputs":[{"name":"f1"},{"name":"f2"}],"output":null}],[8,"HasDual","","",null,null],[16,"Dual","","",1,null],[11,"close","","Close a channel. Should always be used at the end of your program.",2,null],[11,"send","","Send a value of type `A` over the channel. Returns a channel with\nprotocol `P`",2,null],[11,"recv","","Receives a value of type `A` from the channel. Returns a tuple\ncontaining the resulting channel and the received value.",2,null],[11,"sel1","","Perform an active choice, selecting protocol `P`.",2,null],[11,"sel2","","Perform an active choice, selecting protocol `Q`.",2,null],[11,"skip","","",2,null],[11,"skip2","","",2,null],[11,"skip3","","",2,null],[11,"skip4","","",2,null],[11,"skip5","","",2,null],[11,"skip6","","",2,null],[11,"skip7","","",2,null],[11,"offer","","Passive choice. This allows the other end of the channel to select one\nof two options for continuing the protocol: either `P` or `Q`.",2,null],[11,"enter","","Enter a recursive environment, putting the current environment on the\ntop of the environment stack.",2,null],[11,"zero","","Recurse to the environment on the top of the environment stack.",2,null],[11,"succ","","Pop the top environment from the environment stack.",2,null],[11,"new","","",3,{"inputs":[],"output":{"name":"chanselect"}}],[11,"add_recv_ret","","Add a channel whose next step is `Recv`",3,null],[11,"add_offer_ret","","",3,null],[11,"wait","","Find a Receiver (and hence a Chan) that is ready to receive.",3,null],[11,"len","","How many channels are there in the structure?",3,null],[11,"add_recv","","",3,null],[11,"add_offer","","",3,null],[14,"offer!","","This macro is convenient for server-like protocols of the form:",null,null],[14,"chan_select!","","This macro plays the same role as the `select!` macro does for `Receiver`s.",null,null]],"paths":[[4,"Branch"],[8,"HasDual"],[3,"Chan"],[3,"ChanSelect"]]}; initSearch(searchIndex);