refactor: slice use pointer

This commit is contained in:
liwei committed 2020-04-23 11:13:10 +08:00
1 parent d6d411f48c
commit 15e5d2af3b
3 files changed
+16 -16

No files matched your search

+5 -5
View File
@@ -25,7 +25,7 @@ type MetaInfo struct {
infoHash [20]byte
totalSize uint64
fileDetails []FileDetail
fileDetails []*FileDetail
}
type Info struct {
@@ -35,7 +35,7 @@ type Info struct {
// 单个文件时,length为该文件的长度
Length uint64 `json:"length"`
// 多个文件
Files []File `json:"files"`
Files []*File `json:"files"`
}
type File struct {
@@ -116,7 +116,7 @@ func (metaInfo *MetaInfo) GetInfoHash() [20]byte {
}
// 获取所有文件的开始偏移字节
func (metaInfo *MetaInfo) GetFileDetails() []FileDetail {
func (metaInfo *MetaInfo) GetFileDetails() []*FileDetail {
return metaInfo.fileDetails
}
@@ -125,10 +125,10 @@ func calcFileSize(metaInfo *MetaInfo) {
if metaInfo.Info != nil {
fileCount := len(metaInfo.Info.Files)
if fileCount > 0 {
metaInfo.fileDetails = make([]FileDetail, fileCount)
metaInfo.fileDetails = make([]*FileDetail, fileCount)
var length uint64
for i, f := range metaInfo.Info.Files {
metaInfo.fileDetails[i] = FileDetail{
metaInfo.fileDetails[i] = &FileDetail{
Length: f.Length,
Path: f.Path,
Begin: int64(length),
+3 -3
View File
@@ -303,10 +303,10 @@ func (pc *peerConn) handlePiece(buf []byte) {
pieceBegin := int64(piece.Index) * int64(info.PieceLength)
blockBegin := pieceBegin + int64(piece.Begin)
// 计算block对应要写到的文件偏移
var fileBlocks []fileBlock
var fileBlocks []*fileBlock
if len(info.Files) == 0 {
// 单文件
fileBlocks = append(fileBlocks, fileBlock{
fileBlocks = append(fileBlocks, &fileBlock{
filepath: info.Name,
fileSeek: blockBegin,
blockBegin: 0,
@@ -420,7 +420,7 @@ func (pc *peerConn) handlePiece(buf []byte) {
}
// 获取piece对应要写入的文件
func getWriteFile(pieceBegin int64, fds []metainfo.FileDetail) int {
func getWriteFile(pieceBegin int64, fds []*metainfo.FileDetail) int {
for i, f := range fds {
if f.Begin <= pieceBegin && f.End > pieceBegin {
return i
+8 -8
View File
@@ -158,7 +158,7 @@ type udpAnnounceResponse struct {
interval uint32
leechers uint32
seeders uint32
peers []peer.Peer
peers []*peer.Peer
}
func newUdpAnnounceResponse(buf []byte) *udpAnnounceResponse {
@@ -170,11 +170,11 @@ func newUdpAnnounceResponse(buf []byte) *udpAnnounceResponse {
seeders: binary.BigEndian.Uint32(buf[16:20]),
}
count := (len(buf) - 20) / 6
response.peers = make([]peer.Peer, count, count)
response.peers = make([]*peer.Peer, count, count)
for i := 0; i < count; i++ {
ipBegin := 20 + 6*i
portBegin := ipBegin + 4
response.peers[i] = peer.Peer{
response.peers[i] = &peer.Peer{
IP: binary.BigEndian.Uint32(buf[ipBegin:portBegin]),
Port: binary.BigEndian.Uint16(buf[portBegin : portBegin+2]),
}
@@ -233,8 +233,8 @@ func (tracker *Tracker) announce(conn *net.UDPConn, timeout int64, connectionId
}
// 通过tracker服务器获取peer信息
func (tracker *Tracker) Tracker() <-chan []peer.Peer {
peersCh := make(chan []peer.Peer)
func (tracker *Tracker) Tracker() <-chan []*peer.Peer {
peersCh := make(chan []*peer.Peer)
metaInfo := tracker.MetaInfo
checkAnnounceList := func(announceList [][]string) bool {
@@ -281,7 +281,7 @@ func (tracker *Tracker) Tracker() <-chan []peer.Peer {
return peersCh
}
func (tracker *Tracker) DoTracker(announce string) (peers []peer.Peer, err error) {
func (tracker *Tracker) DoTracker(announce string) (peers []*peer.Peer, err error) {
if announce != "" {
url, _ := url.Parse(announce)
switch url.Scheme {
@@ -297,7 +297,7 @@ func (tracker *Tracker) DoTracker(announce string) (peers []peer.Peer, err error
}
// http://bittorrent.org/beps/bep_0003.html#trackers
func (tracker *Tracker) httpTracker(url *url.URL) (peers []peer.Peer, err error) {
func (tracker *Tracker) httpTracker(url *url.URL) (peers []*peer.Peer, err error) {
metaInfo := tracker.MetaInfo
peerID := tracker.PeerID
@@ -335,7 +335,7 @@ func (tracker *Tracker) httpTracker(url *url.URL) (peers []peer.Peer, err error)
}
// http://bittorrent.org/beps/bep_0015.html
func (tracker *Tracker) udpTracker(url *url.URL) (peers []peer.Peer, err error) {
func (tracker *Tracker) udpTracker(url *url.URL) (peers []*peer.Peer, err error) {
conn, err := dial(url)
if err != nil {
return