#include <iostream>
#include <list>
#include "isr/isr.h"
#include "dictionary.h"
cDictionary::cDictionary( void )
{
}
cDictionary::~cDictionary( void )
{
}
void cDictionary::PrintHighReferences()
{
std::list<ISR::cWord> WordTable;
std::list<ISR::cWord>::const_iterator x;
WordMap::iterator i;
ISR::cWord * ptr = NULL;
for ( i = mTable.begin(); i != mTable.end(); i++ )
WordTable.push_back(*(new ISR::cWord(i->first, i->second)));
WordTable.sort();
WordTable.reverse();
std::cout << "\n\n";
for ( x = WordTable.begin(); x != WordTable.end(); x++ )
printf( "%9d - %s\n", x->GetRef(), (x->GetStr()).c_str() );
}
void cDictionary::PrintAlphabetical( void )
{
WordMap::iterator i;
std::cout << "\n\n";
for ( i = mTable.begin(); i != mTable.end(); i++ )
printf( "%9d - %s\n", i->second, i->first.c_str() );
}
void cDictionary::Populate( bool display )
{
std::string str;
int i = 0;
if ( display )
std::cout << "Words: ";
while ( !std::cin.eof() )
{
ISR::ScanAlnum( str ); AddRef( str );
i++;
}
if ( display )
std::cout << i;
}
int cDictionary::AddRef( const std::string & str)
{
WordMap::iterator i;
i = mTable.find(str);
if ( i == mTable.end() )
mTable[str] = 1;
else
i->second++;
return i->second;
}
int cDictionary::SubRef( const std::string & str)
{
WordMap::iterator i;
i = mTable.find(str);
if ( i == mTable.end() )
return 0;
else
{
i->second--;
if ( i->second <= 0 ) {
mTable.erase(i);
return 0;
}
}
return i->second;
}
int cDictionary::GetRef( const std::string & str)
{
WordMap::iterator i;
i = mTable.find(str);
if ( i == mTable.end() )
return 0;
return i->second;
}