|  | // Copyright 2017 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | // +build ignore | 
|  |  | 
|  | package ring_test | 
|  |  | 
|  | import ( | 
|  | "container/ring" | 
|  | "fmt" | 
|  | ) | 
|  |  | 
|  | func ExampleRing_Len() { | 
|  | // Create a new ring of size 4 | 
|  | r := ring.New(4) | 
|  |  | 
|  | // Print out its length | 
|  | fmt.Println(r.Len()) | 
|  |  | 
|  | // Output: | 
|  | // 4 | 
|  | } | 
|  |  | 
|  | func ExampleRing_Next() { | 
|  | // Create a new ring of size 5 | 
|  | r := ring.New(5) | 
|  |  | 
|  | // Get the length of the ring | 
|  | n := r.Len() | 
|  |  | 
|  | // Initialize the ring with some integer values | 
|  | for i := 0; i < n; i++ { | 
|  | r.Value = i | 
|  | r = r.Next() | 
|  | } | 
|  |  | 
|  | // Iterate through the ring and print its contents | 
|  | for j := 0; j < n; j++ { | 
|  | fmt.Println(r.Value) | 
|  | r = r.Next() | 
|  | } | 
|  |  | 
|  | // Output: | 
|  | // 0 | 
|  | // 1 | 
|  | // 2 | 
|  | // 3 | 
|  | // 4 | 
|  | } | 
|  |  | 
|  | func ExampleRing_Prev() { | 
|  | // Create a new ring of size 5 | 
|  | r := ring.New(5) | 
|  |  | 
|  | // Get the length of the ring | 
|  | n := r.Len() | 
|  |  | 
|  | // Initialize the ring with some integer values | 
|  | for i := 0; i < n; i++ { | 
|  | r.Value = i | 
|  | r = r.Next() | 
|  | } | 
|  |  | 
|  | // Iterate through the ring backwards and print its contents | 
|  | for j := 0; j < n; j++ { | 
|  | r = r.Prev() | 
|  | fmt.Println(r.Value) | 
|  | } | 
|  |  | 
|  | // Output: | 
|  | // 4 | 
|  | // 3 | 
|  | // 2 | 
|  | // 1 | 
|  | // 0 | 
|  | } | 
|  |  | 
|  | func ExampleRing_Do() { | 
|  | // Create a new ring of size 5 | 
|  | r := ring.New(5) | 
|  |  | 
|  | // Get the length of the ring | 
|  | n := r.Len() | 
|  |  | 
|  | // Initialize the ring with some integer values | 
|  | for i := 0; i < n; i++ { | 
|  | r.Value = i | 
|  | r = r.Next() | 
|  | } | 
|  |  | 
|  | // Iterate through the ring and print its contents | 
|  | r.Do(func(p interface{}) { | 
|  | fmt.Println(p.(int)) | 
|  | }) | 
|  |  | 
|  | // Output: | 
|  | // 0 | 
|  | // 1 | 
|  | // 2 | 
|  | // 3 | 
|  | // 4 | 
|  | } | 
|  |  | 
|  | func ExampleRing_Move() { | 
|  | // Create a new ring of size 5 | 
|  | r := ring.New(5) | 
|  |  | 
|  | // Get the length of the ring | 
|  | n := r.Len() | 
|  |  | 
|  | // Initialize the ring with some integer values | 
|  | for i := 0; i < n; i++ { | 
|  | r.Value = i | 
|  | r = r.Next() | 
|  | } | 
|  |  | 
|  | // Move the pointer forward by three steps | 
|  | r = r.Move(3) | 
|  |  | 
|  | // Iterate through the ring and print its contents | 
|  | r.Do(func(p interface{}) { | 
|  | fmt.Println(p.(int)) | 
|  | }) | 
|  |  | 
|  | // Output: | 
|  | // 3 | 
|  | // 4 | 
|  | // 0 | 
|  | // 1 | 
|  | // 2 | 
|  | } | 
|  |  | 
|  | func ExampleRing_Link() { | 
|  | // Create two rings, r and s, of size 2 | 
|  | r := ring.New(2) | 
|  | s := ring.New(2) | 
|  |  | 
|  | // Get the length of the ring | 
|  | lr := r.Len() | 
|  | ls := s.Len() | 
|  |  | 
|  | // Initialize r with 0s | 
|  | for i := 0; i < lr; i++ { | 
|  | r.Value = 0 | 
|  | r = r.Next() | 
|  | } | 
|  |  | 
|  | // Initialize s with 1s | 
|  | for j := 0; j < ls; j++ { | 
|  | s.Value = 1 | 
|  | s = s.Next() | 
|  | } | 
|  |  | 
|  | // Link ring r and ring s | 
|  | rs := r.Link(s) | 
|  |  | 
|  | // Iterate through the combined ring and print its contents | 
|  | rs.Do(func(p interface{}) { | 
|  | fmt.Println(p.(int)) | 
|  | }) | 
|  |  | 
|  | // Output: | 
|  | // 0 | 
|  | // 0 | 
|  | // 1 | 
|  | // 1 | 
|  | } | 
|  |  | 
|  | func ExampleRing_Unlink() { | 
|  | // Create a new ring of size 6 | 
|  | r := ring.New(6) | 
|  |  | 
|  | // Get the length of the ring | 
|  | n := r.Len() | 
|  |  | 
|  | // Initialize the ring with some integer values | 
|  | for i := 0; i < n; i++ { | 
|  | r.Value = i | 
|  | r = r.Next() | 
|  | } | 
|  |  | 
|  | // Unlink three elements from r, starting from r.Next() | 
|  | r.Unlink(3) | 
|  |  | 
|  | // Iterate through the remaining ring and print its contents | 
|  | r.Do(func(p interface{}) { | 
|  | fmt.Println(p.(int)) | 
|  | }) | 
|  |  | 
|  | // Output: | 
|  | // 0 | 
|  | // 4 | 
|  | // 5 | 
|  | } |