import "container/ring"

循環リストの操作を実装しています。

パッケージファイル

ring.go

Ring型

Ringは循環リストでの要素です。リングには始まりと終わりがありません。どのリング要素のポインタもリング全体への参照として扱えます。空のリングはnilリングポインタとして表わされます。ゼロ値のRingは1要素のリングを持ち、Valueはnilです。

type Ring struct {
    Value interface{} // for use by client; untouched by this library
    // contains unexported fields
}

New関数

func New(n int) *Ring

Newは、n個のリング要素を作成します。

(*Ring) Iter関数

func (r *Ring) Iter() <-chan interface{}

(*Ring) Len関数

func (r *Ring) Len() int

Lenは、リングrの要素数を計算します。本関数の実行は要素数に比例した時間がかかります。

(*Ring) Link関数

func (r *Ring) Link(s *Ring) *Ring

Linkは、リングrとsをつなぎ、r.Next()はsとなります。返される値はつなぎかえる前のr.Next()のリングです。rは空ではいけません。

rとsが同じリングを指している場合はrとs間の要素はリングから外されます。外された要素はサブリングを形成し、そのサブリングへの参照が返されます。(外された要素がなかった場合はつなぐ前のr.Next()が返されます。nilは返しません)

rとsが異なるリングを指している場合はrの後ろにsの要素を挿入し、一つのリングを構成します。つなぎかえる前にsとつながっていた要素の後ろの要素が返されます。

(*Ring) Move関数

func (r *Ring) Move(n int) *Ring

Moveは、n < 0の場合は後ろへ、n >= 0の場合は前へn % r.Len()個分の要素へ移動します。rは空ではいけません。

(*Ring) Next関数

func (r *Ring) Next() *Ring

Nextは、次のリング要素を返します。rは空ではいけません。

(*Ring) Prev関数

func (r *Ring) Prev() *Ring

Prevは、ひとつ前のリング要素を返します。rは空ではいけません。

(*Ring) Unlink

func (r *Ring) Unlink(n int) *Ring

Unlinkは、r.Next()から数えてn % r.Len()個の要素をリングから外します。n % r.Len() == 0の場合は何もしません。外された要素から成るサブリングを返します。rは空ではいけません。