First steps in CCNx packet coding. ccnx_encode* routines rewritten in NS3 style (using NS3::Buffer)
diff --git a/in-progress/ccnx-cs.cpp b/in-progress/ccnx-cs.cpp
new file mode 100644
index 0000000..c102cd5
--- /dev/null
+++ b/in-progress/ccnx-cs.cpp
@@ -0,0 +1,90 @@
+/*
+ * File: ndn_cs.cpp
+ * Author: cawka
+ *
+ * Created on December 15, 2010, 2:17 PM
+ */
+
+#include "ndn_cs.h"
+
+NdnCs::NdnCs( int maxSize )
+: _maxSize(maxSize) { }
+
+//NdnCs::NdnCs( constNdnCs& orig ) { }
+
+NdnCs::~NdnCs( ) { }
+
+//Find corresponding CS entry for the given content name
+CsIterator NdnCs::lookup( const string &prefix )
+{
+ QNThreadLock lock( &_csMutex );
+
+ CsIterator entry=_cs.find( prefix );
+ if( entry!=_cs.end() ) promote( entry->second );
+ return entry;
+}
+
+
+
+//Add entry to content store, if content store is full, use LRU replacement
+void NdnCs::add( const string &contentName, int contentSize )
+{
+ QNThreadLock lock( &_csMutex );
+
+ _cs.erase( contentName ); // removing the old record
+
+ if( _cs.size()==_maxSize )
+ {
+ CsEntry *entry=_lru.back();
+ _cs.erase( entry->contentName );
+ _lru.pop_back( );
+ }
+
+ CsEntry ce;
+ ce.contentName = contentName;
+ ce.contentSize = contentSize;
+
+ _cs[ contentName ] = ce;
+
+ CsEntry *ce_in_hash = &(_cs[ contentName ]);
+ _lru.push_front( ce_in_hash );
+ ce_in_hash->lruPosition = _lru.begin( );
+}
+
+
+//move the given CS entry to the head of the list
+void NdnCs::promote( CsEntry &ce )
+{
+ // should not lock mutex. Otherwise deadlocks will be welcome
+ if( _lru.front() == &ce ) return;
+
+ assert( *(ce.lruPosition)==&ce ); // should point to the same object
+
+ // swaping positions in _lru
+ _lru.erase( ce.lruPosition );
+ _lru.push_front( &ce );
+ ce.lruPosition = _lru.begin( );
+
+ assert( *(ce.lruPosition)==&ce ); // should point to the same object
+}
+
+void NdnCs::dump()
+{
+ QNThreadLock lock( &_csMutex );
+
+ for( CsRangeIterator it=_cs.begin(); it!=_cs.end(); ++it )
+ {
+ printf("-%s-", it->second.contentName.c_str() );
+ }
+
+ printf("\n");
+// list<CsEntry *>::reverse_iterator rit;
+//
+// for (rit = contentList->rbegin(); rit != contentList->rend(); rit ++)
+// {
+// temp = *rit;
+// printf("=%s=", temp->contentName);
+// }
+//
+// printf("\n");
+}