|
|
| 34 |
bool PacketMetadata::m_metadataSkipped = false; |
34 |
bool PacketMetadata::m_metadataSkipped = false; |
| 35 |
uint32_t PacketMetadata::m_maxSize = 0; |
35 |
uint32_t PacketMetadata::m_maxSize = 0; |
| 36 |
uint16_t PacketMetadata::m_chunkUid = 0; |
36 |
uint16_t PacketMetadata::m_chunkUid = 0; |
| 37 |
PacketMetadata::DataFreeList PacketMetadata::m_freeList; |
37 |
PacketMetadata::DataFreeList *PacketMetadata::m_freeList = 0; |
| 38 |
bool g_optOne = false; |
38 |
bool g_optOne = false; |
| 39 |
|
39 |
|
| 40 |
PacketMetadata::DataFreeList::~DataFreeList () |
40 |
PacketMetadata::DataFreeList::~DataFreeList () |
|
|
| 619 |
PacketMetadata::Create (uint32_t size) |
619 |
PacketMetadata::Create (uint32_t size) |
| 620 |
{ |
620 |
{ |
| 621 |
NS_LOG_LOGIC ("create size="<<size<<", max="<<m_maxSize); |
621 |
NS_LOG_LOGIC ("create size="<<size<<", max="<<m_maxSize); |
|
|
622 |
if (!m_freeList) |
| 623 |
{ |
| 624 |
m_freeList = new PacketMetadata::DataFreeList; |
| 625 |
} |
| 622 |
if (size > m_maxSize) |
626 |
if (size > m_maxSize) |
| 623 |
{ |
627 |
{ |
| 624 |
m_maxSize = size; |
628 |
m_maxSize = size; |
| 625 |
} |
629 |
} |
| 626 |
while (!m_freeList.empty ()) |
630 |
while (!m_freeList->empty ()) |
| 627 |
{ |
631 |
{ |
| 628 |
struct PacketMetadata::Data *data = m_freeList.back (); |
632 |
struct PacketMetadata::Data *data = m_freeList->back (); |
| 629 |
m_freeList.pop_back (); |
633 |
m_freeList->pop_back (); |
| 630 |
if (data->m_size >= size) |
634 |
if (data->m_size >= size) |
| 631 |
{ |
635 |
{ |
| 632 |
NS_LOG_LOGIC ("create found size="<<data->m_size); |
636 |
NS_LOG_LOGIC ("create found size="<<data->m_size); |
|
|
| 643 |
void |
647 |
void |
| 644 |
PacketMetadata::Recycle (struct PacketMetadata::Data *data) |
648 |
PacketMetadata::Recycle (struct PacketMetadata::Data *data) |
| 645 |
{ |
649 |
{ |
| 646 |
NS_LOG_LOGIC ("recycle size="<<data->m_size<<", list="<<m_freeList.size ()); |
650 |
NS_LOG_LOGIC ("recycle size="<<data->m_size<<", list="<<m_freeList->size ()); |
| 647 |
NS_ASSERT (data->m_count == 0); |
651 |
NS_ASSERT (data->m_count == 0); |
| 648 |
if (m_freeList.size () > 1000 || |
652 |
if (m_freeList->size () > 1000 || |
| 649 |
data->m_size < m_maxSize) |
653 |
data->m_size < m_maxSize) |
| 650 |
{ |
654 |
{ |
| 651 |
PacketMetadata::Deallocate (data); |
655 |
PacketMetadata::Deallocate (data); |
| 652 |
} |
656 |
} |
| 653 |
else |
657 |
else |
| 654 |
{ |
658 |
{ |
| 655 |
m_freeList.push_back (data); |
659 |
m_freeList->push_back (data); |
| 656 |
} |
660 |
} |
| 657 |
} |
661 |
} |
| 658 |
|
662 |
|