📄 btrequest.h
字号:
#ifndef SLICE_H#define SLICE_H#include <sys/types.h>#include <time.h>#include "btcontent.h"#include "bitfield.h"typedef struct _slice{ size_t index; size_t offset; size_t length; time_t reqtime; struct _slice *next;}SLICE,*PSLICE;class RequestQueue{ private: PSLICE rq_head; public: PSLICE rq_send; // next slice to request RequestQueue(); ~RequestQueue(); void Empty(); void SetHead(PSLICE ps); void SetNextSend(PSLICE ps) { rq_send = ps; } PSLICE GetHead() const { return rq_head; } PSLICE NextSend() const { return rq_send; } size_t GetRequestIdx(){ return rq_head ? rq_head->index : BTCONTENT.GetNPieces(); } size_t GetRequestLen(){ return rq_head ? rq_head->length : 0; } void Release(){ rq_head = rq_send = (PSLICE) 0; } int IsValidRequest(size_t idx,size_t off,size_t len); void operator=(RequestQueue &rq); int Copy(RequestQueue *prq); int CopyShuffle(RequestQueue *prq, size_t piece); size_t Qsize(); size_t Qlen(size_t piece); int IsEmpty() const { return rq_head ? 0 : 1; } int Insert(PSLICE ps,size_t idx,size_t off,size_t len); int Add(size_t idx,size_t off,size_t len); int Append(PSLICE ps); int Remove(size_t idx,size_t off,size_t len); int HasIdx(size_t idx); time_t GetReqTime(size_t idx,size_t off,size_t len); void SetReqTime(PSLICE n,time_t t); int Pop(size_t *pidx,size_t *poff,size_t *plen); int Peek(size_t *pidx,size_t *poff,size_t *plen) const; int CreateWithIdx(size_t idx); size_t NSlices(size_t idx) const; size_t Slice_Length(size_t idx,size_t sidx) const;};#define PENDING_QUEUE_SIZE 100class PendingQueue{ private: PSLICE pending_array[PENDING_QUEUE_SIZE]; size_t pq_count; public: PendingQueue(); ~PendingQueue(); void Empty(); int Pending(RequestQueue *prq); int ReAssign(RequestQueue *prq, BitField &bf); int Exist(size_t idx); int Delete(size_t idx); int DeleteSlice(size_t idx, size_t off, size_t len);};extern PendingQueue PENDINGQUEUE;#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -