Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

RNewsgroup Class Reference

#include <RNewsgroup.h>

Inheritance diagram for RNewsgroup:

Newsgroup List of all members.

Public Member Functions

 RNewsgroup ()
 RNewsgroup (RServer *srvr, OverviewFmt *fmt, const char *name)
 ~RNewsgroup ()
virtual void getsize (unsigned int *f, unsigned int *l)
virtual void setsize (unsigned int f, unsigned int l)
virtual void prefetchGroup (int lockgrp=1)
virtual void prefetchOverview (void)
virtual unsigned int firstnbr ()
virtual unsigned int lastnbr ()
virtual int hasrecord (unsigned int i)
virtual Articlegetarticle (unsigned int nbr)
virtual void freearticle (Article *artp)
virtual void setarticle (Article *art)
virtual void printarticle (std::ostream &os, unsigned int nbr)
virtual const char * getover (unsigned int nbr)
virtual void setover (const string &over)
virtual void readoverdb (std::istream &is)
virtual void printheaderdb (ostream &os, const char *header, unsigned int f=0, unsigned int l=UINT_MAX)
virtual void printlistgroup (ostream &os)

Private Types

typedef std::map< unsigned
int, string >::iterator 
iterator

Private Attributes

std::map< unsigned int, string > _OverviewDB
unsigned int _first
unsigned int _last
RServer_RemoteServer

Detailed Description

Author:
Thomas Gschwind
Bug:
Documentation is missing.

Definition at line 32 of file RNewsgroup.h.


Member Typedef Documentation

typedef std::map< unsigned int, string >::iterator RNewsgroup::iterator [private]
 

Definition at line 33 of file RNewsgroup.h.

Referenced by getover(), printheaderdb(), and printlistgroup().


Constructor & Destructor Documentation

RNewsgroup::RNewsgroup  )  [inline]
 

Definition at line 42 of file RNewsgroup.h.

00042                      :Newsgroup(NULL, NULL) {
00043         } RNewsgroup(RServer * srvr, OverviewFmt * fmt, const char *name)

RNewsgroup::RNewsgroup RServer srvr,
OverviewFmt fmt,
const char *  name
[inline]
 

Definition at line 43 of file RNewsgroup.h.

00044         :Newsgroup(fmt, name), _first(1), _last(0), _RemoteServer(srvr) {
00045         }

RNewsgroup::~RNewsgroup  )  [inline]
 

Definition at line 46 of file RNewsgroup.h.

00046                       {
00047         }


Member Function Documentation

virtual unsigned int RNewsgroup::firstnbr  )  [inline, virtual]
 

Implements Newsgroup.

Definition at line 61 of file RNewsgroup.h.

References _first.

00061                                         {
00062                 return _first;
00063         }

virtual void RNewsgroup::freearticle Article artp  )  [inline, virtual]
 

Implements Newsgroup.

Definition at line 82 of file RNewsgroup.h.

00082                                                  {
00083                 delete artp;
00084         }

virtual Article* RNewsgroup::getarticle unsigned int  nbr  )  [inline, virtual]
 

Implements Newsgroup.

Definition at line 71 of file RNewsgroup.h.

References _RemoteServer, and RServer::article().

00071                                                       {
00072                 try {
00073                         Article *a = new Article;
00074                         _RemoteServer->article(_NewsgroupName, nbr, a);
00075                         return a;
00076                 }
00077                 catch(...) {
00078                         return NULL;
00079                 }
00080         }

virtual const char* RNewsgroup::getover unsigned int  nbr  )  [inline, virtual]
 

Implements Newsgroup.

Definition at line 89 of file RNewsgroup.h.

References _OverviewDB, and iterator.

00089                                                       {
00090                 iterator over = _OverviewDB.find(nbr);
00091                 if (over != _OverviewDB.end())
00092                         return over->second.c_str();
00093                 else
00094                         return NULL;
00095         }

virtual void RNewsgroup::getsize unsigned int *  f,
unsigned int *  l
[inline, virtual]
 

Implements Newsgroup.

Definition at line 49 of file RNewsgroup.h.

References _first, and _last.

00049                                                                {
00050                 *f = _first;
00051                 *l = _last;
00052         }

virtual int RNewsgroup::hasrecord unsigned int  i  )  [inline, virtual]
 

Implements Newsgroup.

Definition at line 67 of file RNewsgroup.h.

References _OverviewDB.

00067                                               {
00068                 return (_OverviewDB.find(i) != _OverviewDB.end());
00069         }

virtual unsigned int RNewsgroup::lastnbr  )  [inline, virtual]
 

Implements Newsgroup.

Definition at line 64 of file RNewsgroup.h.

References _last.

00064                                        {
00065                 return _last;
00066         }

virtual void RNewsgroup::prefetchGroup int  lockgrp = 1  )  [inline, virtual]
 

Implements Newsgroup.

Definition at line 56 of file RNewsgroup.h.

00056                                                     {
00057         }

virtual void RNewsgroup::prefetchOverview void   )  [inline, virtual]
 

Implements Newsgroup.

Definition at line 58 of file RNewsgroup.h.

00058                                             {
00059         }

void RNewsgroup::printarticle std::ostream &  os,
unsigned int  nbr
[virtual]
 

Implements Newsgroup.

Definition at line 25 of file RNewsgroup.cc.

References _RemoteServer, and RServer::article().

00026 {
00027         try {
00028                 Article article;
00029                 _RemoteServer->article(_NewsgroupName, nbr, &article);
00030                 os << article;
00031         } catch(...) {
00032         }
00033 }

virtual void RNewsgroup::printheaderdb ostream &  os,
const char *  header,
unsigned int  f = 0,
unsigned int  l = UINT_MAX
[inline, virtual]
 

Implements Newsgroup.

Definition at line 124 of file RNewsgroup.h.

References _OverviewDB, and iterator.

00127                                              {
00128                 char xheader[512], *p;
00129                 const char *q;
00130                 string fld;
00131 
00132                 p = xheader;
00133                 q = header;
00134                 while ((*p++ = *q++));
00135                 *(p - 1) = ':';
00136                 *p = '\0';
00137 
00138                 iterator begin = _OverviewDB.lower_bound(f), end =
00139                     _OverviewDB.end();
00140 
00141                 while (begin != end) {
00142                         unsigned int i = begin->first;
00143                         if (l < i)
00144                                 break;
00145 
00146                         try {
00147                                 fld =
00148                                     _OverviewFormat->
00149                                     getfield(_OverviewDB[i].c_str(),
00150                                              xheader, 0);
00151                                 os << i << " " << fld << "\r\n";
00152                         }
00153                         catch(NoSuchFieldError & nsfe) {
00154                                 os << i << " (none)\r\n";
00155                         }
00156                         ++begin;
00157                 }
00158         }

virtual void RNewsgroup::printlistgroup ostream &  os  )  [inline, virtual]
 

Implements Newsgroup.

Definition at line 160 of file RNewsgroup.h.

References _OverviewDB, and iterator.

00160                                                   {
00161                 iterator begin = _OverviewDB.begin(), end =
00162                     _OverviewDB.end();
00163 
00164                 while (begin != end) {
00165                         os << begin->first << "\r\n";
00166                         ++begin;
00167                 }
00168         }

virtual void RNewsgroup::readoverdb std::istream &  is  )  [inline, virtual]
 

Implements Newsgroup.

Definition at line 105 of file RNewsgroup.h.

References OverviewFmt::convert(), OverviewFmt::dotrans, nlreadline(), setover(), slog, and VERB.

00105                                                  {
00106                 VERB(slog.
00107                      p(Logger::Debug) << "RNewsgroup::readoverdb(&is)\n");
00108                 string line1, line2;
00109 
00110                 for (;;) {
00111                         nlreadline(is, line1, 0);
00112                         if (line1 == "." || is.eof())
00113                                 break;
00114                         if (_OverviewFormat->dotrans) {
00115                                 // Convert Record
00116                                 _OverviewFormat->convert(line1, line2);
00117                                 setover(line2);
00118                         } else {
00119                                 setover(line1);
00120                         }
00121                 }
00122         }

virtual void RNewsgroup::setarticle Article art  )  [inline, virtual]
 

Implements Newsgroup.

Definition at line 85 of file RNewsgroup.h.

00085                                                {
00086         }

virtual void RNewsgroup::setover const string &  over  )  [inline, virtual]
 

Implements Newsgroup.

Definition at line 97 of file RNewsgroup.h.

References _first, _last, and _OverviewDB.

Referenced by readoverdb().

00097                                                   {
00098                 unsigned int i = atoi(over.c_str());
00099 
00100                 if (_first <= i && i <= _last) {
00101                         _OverviewDB[i] = over;
00102                 }
00103         }

void RNewsgroup::setsize unsigned int  f,
unsigned int  l
[virtual]
 

Implements Newsgroup.

Definition at line 3 of file RNewsgroup.cc.

References _first, _last, _OverviewDB, _RemoteServer, RServer::overviewdb(), Logger::p(), and slog.

Referenced by CServer::getgroup(), and RServer::getgroup().

00004 {
00005         if (f < _first || l < _last) {
00006                 slog.p(Logger::Notice) << "watermark(s) decreased?!?\n";
00007                 _OverviewDB.erase(_OverviewDB.begin(), _OverviewDB.end());
00008                 _first = f;
00009                 _last = l;
00010                 _RemoteServer->overviewdb(this, f, l);
00011         } else {
00012                 if (_first < f) {
00013                         _OverviewDB.erase(_OverviewDB.begin(),
00014                                           _OverviewDB.lower_bound(f));
00015                 }
00016                 if (_last < l) {
00017                         int old_last = _last;
00018                         _first = f;
00019                         _last = l;
00020                         _RemoteServer->overviewdb(this, old_last + 1, l);
00021                 }
00022         }
00023 }


Member Data Documentation

unsigned int RNewsgroup::_first [private]
 

Definition at line 36 of file RNewsgroup.h.

Referenced by firstnbr(), getsize(), setover(), and setsize().

unsigned int RNewsgroup::_last [private]
 

Definition at line 36 of file RNewsgroup.h.

Referenced by getsize(), lastnbr(), setover(), and setsize().

std::map< unsigned int, string > RNewsgroup::_OverviewDB [private]
 

Definition at line 35 of file RNewsgroup.h.

Referenced by getover(), hasrecord(), printheaderdb(), printlistgroup(), setover(), and setsize().

RServer* RNewsgroup::_RemoteServer [private]
 

Definition at line 39 of file RNewsgroup.h.

Referenced by getarticle(), printarticle(), and setsize().


The documentation for this class was generated from the following files:
Generated on Fri Aug 20 10:58:12 2004 for NewsCache by doxygen 1.3.6-20040222