Logo
~Apps~
~Projects~
~Contact~


Piece Class Reference

Information about one piece of the transfer. More...

#include <Piece.h>

List of all members.


Public Member Functions

 Piece (size_t nr, size_t piece_length)
 ~Piece ()
size_t GetNumber ()
void Write (Session *, size_t offset, size_t length, unsigned char *)
size_t NumberOfSlices ()
size_t PieceLength ()
size_t SliceSize ()
size_t Complete (size_t offset)
void SetComplete (size_t offset, size_t length)
size_t Requested (size_t offset)
void SetRequested (size_t offset, size_t length)
void ClearComplete ()
void ClearRequested ()
bool GetRandomNotRequested (size_t &offset, size_t &length)
bool AllRequested ()
size_t NumberComplete ()
size_t NumberRequested ()
bool Complete ()
void save_slice_m (FILE *, slice_m &)
void load_slice_m (FILE *, slice_m &)
slice_mMapComplete ()
slice_mMapRequested ()

Private Types

typedef std::map< size_t,
size_t > 
slice_m

Private Member Functions

 Piece (const Piece &)
Pieceoperator= (const Piece &)

Private Attributes

size_t m_nr
size_t m_piece_length
slice_m m_complete
slice_m m_requested

Detailed Description

Information about one piece of the transfer.

Definition at line 39 of file Piece.h.


Member Typedef Documentation

typedef std::map<size_t,size_t> Piece::slice_m [private]

Definition at line 41 of file Piece.h.


Constructor & Destructor Documentation

Piece::Piece ( size_t  nr,
size_t  piece_length 
)

File ......... Piece.cpp Published .... 2005-06-14 Author ....... grymse@alhem.net

Definition at line 32 of file Piece.cpp.

00033 :m_nr(nr)
00034 ,m_piece_length(piece_length)
00035 {
00036 }

Piece::~Piece (  ) 

Definition at line 39 of file Piece.cpp.

00040 {
00041 }

Piece::Piece ( const Piece  )  [inline, private]

Definition at line 132 of file Piece.h.

00132 {} // copy constructor


Member Function Documentation

size_t Piece::GetNumber (  )  [inline]

Definition at line 46 of file Piece.h.

References m_nr.

00046 { return m_nr; }

void Piece::Write ( Session ,
size_t  offset,
size_t  length,
unsigned char *   
)

Definition at line 44 of file Piece.cpp.

00045 {
00046 }

size_t Piece::NumberOfSlices (  )  [inline]

Definition at line 48 of file Piece.h.

References m_piece_length, and SLICE.

00048 { return m_piece_length / SLICE; }

size_t Piece::PieceLength (  )  [inline]

Definition at line 49 of file Piece.h.

References m_piece_length.

00049 { return m_piece_length; }

size_t Piece::SliceSize (  )  [inline]

Definition at line 50 of file Piece.h.

References SLICE.

00050 { return SLICE; }

size_t Piece::Complete ( size_t  offset  )  [inline]

Definition at line 52 of file Piece.h.

References m_complete.

00052 { return m_complete[offset]; }

void Piece::SetComplete ( size_t  offset,
size_t  length 
) [inline]

Definition at line 53 of file Piece.h.

References m_complete.

00053 { m_complete[offset] = length; }

size_t Piece::Requested ( size_t  offset  )  [inline]

Definition at line 54 of file Piece.h.

References m_requested.

Referenced by AllRequested(), GetRandomNotRequested(), and NumberRequested().

00054 { return m_requested[offset]; }

void Piece::SetRequested ( size_t  offset,
size_t  length 
) [inline]

Definition at line 55 of file Piece.h.

References m_requested.

00055                                                        { 
00056                 if (!length || length > m_requested[offset])
00057                         m_requested[offset] = length; 
00058         }

void Piece::ClearComplete (  ) 

Definition at line 49 of file Piece.cpp.

References m_complete.

00050 {
00051         while (m_complete.size())
00052         {
00053                 slice_m::iterator it = m_complete.begin();
00054                 m_complete.erase(it);
00055         }
00056 }

void Piece::ClearRequested (  ) 

Definition at line 59 of file Piece.cpp.

References m_requested.

00060 {
00061         while (m_requested.size())
00062         {
00063                 slice_m::iterator it = m_requested.begin();
00064                 m_requested.erase(it);
00065         }
00066 }

bool Piece::GetRandomNotRequested ( size_t &  offset,
size_t &  length 
) [inline]

Definition at line 63 of file Piece.h.

References Complete(), m_piece_length, Requested(), and SLICE.

00063                                                                    {
00064                 std::vector<size_t> available;
00065                 for (size_t i = 0; i < m_piece_length; i += SLICE)
00066                 {
00067                         if (!Complete(i) && !Requested(i))
00068                         {
00069                                 available.push_back(i);
00070                         }
00071                 }
00072                 size_t q;
00073                 if ((q = available.size()) > 0)
00074                 {
00075 #ifdef _WIN32
00076                         offset = available[rand() % q];
00077 #else
00078                         offset = available[random() % q];
00079 #endif
00080                         length = MIN(SLICE, m_piece_length - offset);
00081                         return true;
00082                 }
00083                 return false;
00084         }

bool Piece::AllRequested (  )  [inline]

Definition at line 86 of file Piece.h.

References Complete(), m_piece_length, Requested(), and SLICE.

00086                             {
00087                 for (size_t i = 0; i < m_piece_length; i += SLICE)
00088                 {
00089                         if (!Complete(i) && !Requested(i))
00090                         {
00091                                 return false;
00092                         }
00093                 }
00094                 return true;
00095         }

size_t Piece::NumberComplete (  )  [inline]

Definition at line 97 of file Piece.h.

References Complete(), m_piece_length, and SLICE.

00097                                 {
00098                 size_t q = 0;
00099                 for (size_t i = 0; i < m_piece_length; i += SLICE)
00100                 {
00101                         if (Complete(i))
00102                                 q++;
00103                 }
00104                 return q;
00105         }

size_t Piece::NumberRequested (  )  [inline]

Definition at line 106 of file Piece.h.

References Complete(), m_piece_length, Requested(), and SLICE.

00106                                  {
00107                 size_t q = 0;
00108                 for (size_t i = 0; i < m_piece_length; i += SLICE)
00109                 {
00110                         if (Requested(i) && !Complete(i))
00111                                 q++;
00112                 }
00113                 return q;
00114         }

bool Piece::Complete (  )  [inline]

Definition at line 115 of file Piece.h.

References m_piece_length, and SLICE.

Referenced by AllRequested(), GetRandomNotRequested(), NumberComplete(), and NumberRequested().

00115                         {
00116                 for (size_t i = 0; i < m_piece_length; i += SLICE)
00117                 {
00118                         if (!Complete(i))
00119                         {
00120                                 return false;
00121                         }
00122                 }
00123                 return true;
00124         }

void Piece::save_slice_m ( FILE *  ,
slice_m  
)

Definition at line 69 of file Piece.cpp.

00070 {
00071         size_t q = ref.size();
00072         fwrite(&q, sizeof(size_t), 1, fil);
00073         for (slice_m::iterator it = ref.begin(); it != ref.end(); it++)
00074         {
00075                 size_t offset = (*it).first;
00076                 size_t length = (*it).second;
00077                 fwrite(&offset, sizeof(size_t), 1, fil);
00078                 fwrite(&length, sizeof(size_t), 1, fil);
00079         }
00080 }

void Piece::load_slice_m ( FILE *  ,
slice_m  
)

Definition at line 83 of file Piece.cpp.

00084 {
00085         size_t q;
00086         fread(&q, sizeof(size_t), 1, fil);
00087         while (q--)
00088         {
00089                 size_t offset, length;
00090                 fread(&offset, sizeof(size_t), 1, fil);
00091                 fread(&length, sizeof(size_t), 1, fil);
00092                 ref[offset] = length;
00093         }
00094 }

slice_m& Piece::MapComplete (  )  [inline]

Definition at line 128 of file Piece.h.

References m_complete.

00128 { return m_complete; }

slice_m& Piece::MapRequested (  )  [inline]

Definition at line 129 of file Piece.h.

References m_requested.

00129 { return m_requested; }

Piece& Piece::operator= ( const Piece  )  [inline, private]

Definition at line 133 of file Piece.h.

00133 { return *this; } // assignment operator


Member Data Documentation

size_t Piece::m_nr [private]

Definition at line 135 of file Piece.h.

Referenced by GetNumber().

Definition at line 137 of file Piece.h.

Referenced by ClearComplete(), Complete(), MapComplete(), and SetComplete().

Definition at line 138 of file Piece.h.

Referenced by ClearRequested(), MapRequested(), Requested(), and SetRequested().


The documentation for this class was generated from the following files:
Page, code, and content Copyright (C) 2006 by Anders Hedström
Generated on Mon Aug 29 20:21:47 2005 for C++ Sockets by  doxygen 1.4.4