現在、次のように単一リンクリストを実装しています。
struct PeerNode {
struct Peer* cargo;
struct PeerNode* next;
};
...そして、次のように、これらのリンクされたリストをいくつか含む構造体があります。
struct Torrent {
...
struct PeerNode* peer_list;
struct PeerNode* unchoked_peers;
...
}
が提供するマクロを使用してこれを置き換えたいと思いますsys/queue.h
。私のコードを次のようなものに置き換えることができると思います:
struct Torrent {
...
LIST_ENTRY(PeerNode, Peer) peer_list;
struct PeerNode* unchoked_peers;
...
}
次に、 を見てman queue
、次のようにしてリストを初期化すると思います。
LIST_INIT(&peer_list);
LIST_INIT(unchoked_peers);
LIST_ENTRY
ただし、リストの使用にどのように影響するかわかりません。man
ページには、「マクロは、リスト内の要素を接続する構造を宣言します」と書かれていLIST_ENTRY
ますが、これが何を意味するのかよくわかりません。
リスト内の要素を接続する構造を宣言する必要があるのはなぜですか? 私の最初の連結リストの実装のように、各ノードはポインタを介して次のノードに接続されるべきではありませんか? リンクされたリストを が提供する実装に置き換えるにはどうすればよいsys/queue.h
ですか? リストに要素を挿入するにはどうすればよいですか?