úÎפ  None  We use the Mutable$ vector type to ensure injectivenessA concurrent ring buffer. *Atomically perform an action with the ring#Create a new ring of a given lengthNote: size must be non-zero'Reset the ringbuffer to its empty state"Add an item to the end of the ring^Add multiple items to the end of the ring This ignores any items above the length of the ring0The maximum number of items the ring can contain 0The maximum number of items the ring can contain %The current filled length of the ring%The current filled length of the ring7Retrieve the $n$th most-recently added item of the ring}Get the entire contents of the ring, with the most recently added element at the head. Note that this is rather inefficient. ÓExecute the given action with the items of the ring. Note that no references to the vector may leak out of the action as it will later be mutated. Moreover, the items in the vector are in no particular order.               &ring-buffer-0.3-77OfTne1NvW2wW05k8BVtqData.RingBuffer RingBuffernewclearappendconcatcapacitylengthlatesttoList withItemsRingMwithRing capacity'length' RingStateringFullringHead ringBuffer ringStateadvancelatest'