• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

knode

  • sources
  • kde-4.12
  • kdepim
  • knode
knarticlecollection.cpp
Go to the documentation of this file.
1 /*
2  KNode, the KDE newsreader
3  Copyright (c) 1999-2005 the KNode authors.
4  See file AUTHORS for details
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10  You should have received a copy of the GNU General Public License
11  along with this program; if not, write to the Free Software Foundation,
12  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, US
13 */
14 
15 #include "knarticlecollection.h"
16 
17 #include "knarticle.h"
18 
19 #include <KDebug>
20 #include <QByteArray>
21 
22 
23 KNArticleVector::KNArticleVector(KNArticleVector *master, SortingType sorting)
24  : m_aster( master ),
25  s_ortType( sorting )
26 {
27 }
28 
29 KNArticleVector::~KNArticleVector()
30 {
31 }
32 
33 void KNArticleVector::append( KNArticle::Ptr a )
34 {
35  if ( a ) {
36  mList.append( a );
37  }
38 }
39 
40 void KNArticleVector::remove( int pos )
41 {
42  if ( pos >= 0 && pos < mList.size() ) {
43  mList.removeAt( pos );
44  }
45 }
46 
47 
48 void KNArticleVector::clear()
49 {
50  mList.clear();
51 }
52 
53 void KNArticleVector::syncWithMaster()
54 {
55  if (!m_aster) return;
56 
57  mList = m_aster->mList;
58  sort();
59 }
60 
61 
62 void KNArticleVector::sort()
63 {
64  bool (*cmp)( KNArticle::Ptr, KNArticle::Ptr ) = 0;
65 
66  switch(s_ortType) {
67  case STid:
68  cmp=compareById;
69  break;
70  case STmsgId:
71  cmp=compareByMsgId;
72  break;
73  default:
74  cmp=0;
75  break;
76  }
77 
78  if(cmp) {
79  qSort( mList.begin(), mList.end(), cmp );
80  }
81 }
82 
83 
84 bool KNArticleVector::compareById( KNArticle::Ptr a1, KNArticle::Ptr a2 )
85 {
86  return ( a1->id() < a2->id() );
87 }
88 
89 
90 bool KNArticleVector::compareByMsgId( KNArticle::Ptr a1, KNArticle::Ptr a2 )
91 {
92  QByteArray mid1 = a1->messageID( true )->as7BitString( false );
93  QByteArray mid2 = a2->messageID( true )->as7BitString( false );
94  return ( mid1 < mid2 );
95 }
96 
97 
98 KNArticle::Ptr KNArticleVector::bsearch( int id )
99 {
100  return at( indexForId( id ) );
101 }
102 
103 
104 KNArticle::Ptr KNArticleVector::bsearch( const QByteArray &id )
105 {
106  return at ( indexForMsgId( id ) );
107 }
108 
109 
110 int KNArticleVector::indexForId(int id)
111 {
112  if(s_ortType!=STid) return -1;
113 
114  int start = 0, mid = 0, currentId = 0;
115  int end = mList.size();
116  bool found=false;
117 
118  while(start!=end && !found) {
119  mid=(start+end)/2;
120  currentId = mList[ mid ]->id();
121 
122  if(currentId==id)
123  found=true;
124  else if(currentId < id)
125  start=mid+1;
126  else
127  end=mid;
128  }
129 
130  if(found)
131  return mid;
132  else {
133  return -1;
134  }
135 }
136 
137 
138 int KNArticleVector::indexForMsgId( const QByteArray &id )
139 {
140  if(s_ortType!=STmsgId) return -1;
141 
142  int start = 0, mid = 0;
143  int end = mList.size();
144  QByteArray currentMid;
145  bool found=false;
146  int cnt=0;
147 
148  while(start!=end && !found) {
149  mid=(start+end)/2;
150  currentMid = mList[ mid ]->messageID( true )->as7BitString( false );
151 
152  if(currentMid==id)
153  found=true;
154  else if( currentMid < id )
155  start=mid+1;
156  else
157  end=mid;
158 
159  cnt++;
160  }
161 
162  if(found) {
163  return mid;
164  } else {
165  return -1;
166  }
167 }
168 
169 
170 
171 // -------------------------------------------------------------------------------------------
172 
173 
174 KNArticleCollection::KNArticleCollection( KNCollection::Ptr p )
175  : KNCollection(p), l_astID(0), l_ockedArticles(0), n_otUnloadable(false)
176 {
177  a_rticles.setSortMode(KNArticleVector::STid);
178  m_idIndex.setSortMode(KNArticleVector::STmsgId);
179  m_idIndex.setMaster(&a_rticles);
180 }
181 
182 KNArticleCollection::~KNArticleCollection()
183 {
184 }
185 
186 void KNArticleCollection::append( KNArticle::Ptr a )
187 {
188  a_rticles.append( a );
189  if( a->id() == -1 ) {
190  a->setId( ++l_astID );
191  }
192 }
193 
194 void KNArticleCollection::remove( const KNArticle::Ptr &art )
195 {
196  a_rticles.remove( a_rticles.indexForId( art->id() ) );
197 }
198 
199 
200 void KNArticleCollection::clear()
201 {
202  a_rticles.clear();
203  m_idIndex.clear();
204  l_astID=0;
205 }
206 
207 
208 void KNArticleCollection::compact()
209 {
210  m_idIndex.clear();
211 }
212 
213 
214 KNArticle::Ptr KNArticleCollection::byId( int id )
215 {
216  return a_rticles.bsearch(id);
217 }
218 
219 
220 KNArticle::Ptr KNArticleCollection::byMessageId( const QByteArray &mid )
221 {
222  if(m_idIndex.isEmpty()) {
223  m_idIndex.syncWithMaster();
224  kDebug(5003) <<"KNArticleCollection::byMessageId() : created index";
225  }
226  return m_idIndex.bsearch(mid);
227 }
228 
229 
230 void KNArticleCollection::setLastID()
231 {
232  if ( !a_rticles.isEmpty() ) {
233  l_astID = a_rticles.at( a_rticles.size()-1 )->id();
234  } else {
235  l_astID=0;
236  }
237 }
238 
239 
240 void KNArticleCollection::syncSearchIndex()
241 {
242  m_idIndex.syncWithMaster();
243 }
KNArticleCollection::setLastID
void setLastID()
Definition: knarticlecollection.cpp:230
KNArticleCollection::~KNArticleCollection
~KNArticleCollection()
Definition: knarticlecollection.cpp:182
KNArticleVector
Article storage used by KNArticleCollection.
Definition: knarticlecollection.h:26
KNArticleCollection::syncSearchIndex
void syncSearchIndex()
Definition: knarticlecollection.cpp:240
KNArticleVector::append
void append(KNArticle::Ptr a)
Appends an article to this store.
Definition: knarticlecollection.cpp:33
KNArticleVector::bsearch
KNArticle::Ptr bsearch(int id)
Definition: knarticlecollection.cpp:98
KNArticleVector::compareByMsgId
static bool compareByMsgId(KNArticle::Ptr a1, KNArticle::Ptr a2)
Definition: knarticlecollection.cpp:90
KNArticleVector::remove
void remove(int pos)
Remove the element at position pos in this store.
Definition: knarticlecollection.cpp:40
KNArticleVector::KNArticleVector
KNArticleVector(KNArticleVector *master=0, SortingType sorting=STunsorted)
Definition: knarticlecollection.cpp:23
KNCollection
Abstract base class for everything that is visible in the folder tree.
Definition: kncollection.h:30
KNArticleVector::clear
void clear()
Definition: knarticlecollection.cpp:48
KNArticleVector::STid
Definition: knarticlecollection.h:29
KNArticleCollection::clear
void clear()
Definition: knarticlecollection.cpp:200
KNArticleCollection::KNArticleCollection
KNArticleCollection(KNCollection::Ptr p=KNCollection::Ptr())
Definition: knarticlecollection.cpp:174
KNArticleCollection::byId
KNArticle::Ptr byId(int id)
Returns the article whose id is id, or an empty KNArticle::Ptr if it is not found.
Definition: knarticlecollection.cpp:214
knarticlecollection.h
KNArticleVector::setMaster
void setMaster(KNArticleVector *m)
Definition: knarticlecollection.h:35
KNArticleVector::indexForId
int indexForId(int id)
Definition: knarticlecollection.cpp:110
KNCollection::Ptr
boost::shared_ptr< KNCollection > Ptr
Shared pointer to a KNCollection.
Definition: kncollection.h:40
KNArticleVector::STmsgId
Definition: knarticlecollection.h:29
KNArticleCollection::append
void append(KNArticle::Ptr a)
Appends an article to this collection.
Definition: knarticlecollection.cpp:186
KNArticle::Ptr
boost::shared_ptr< KNArticle > Ptr
Shared pointer to a KNArticle. To be used instead of raw KNArticle*.
Definition: knarticle.h:39
KNArticleVector::at
KNArticle::Ptr at(int i)
Definition: knarticlecollection.h:58
KNArticleCollection::compact
void compact()
Definition: knarticlecollection.cpp:208
KNArticleVector::indexForMsgId
int indexForMsgId(const QByteArray &id)
Definition: knarticlecollection.cpp:138
KNArticleVector::setSortMode
void setSortMode(SortingType s)
Definition: knarticlecollection.h:53
KNArticleVector::~KNArticleVector
virtual ~KNArticleVector()
Definition: knarticlecollection.cpp:29
knarticle.h
KNArticleVector::compareById
static bool compareById(KNArticle::Ptr a1, KNArticle::Ptr a2)
Definition: knarticlecollection.cpp:84
KNArticleCollection::remove
void remove(const KNArticle::Ptr &art)
Remove the article art from this collection.
Definition: knarticlecollection.cpp:194
KNArticleVector::isEmpty
bool isEmpty()
Definition: knarticlecollection.h:37
KNArticleVector::SortingType
SortingType
Definition: knarticlecollection.h:29
KNArticleCollection::byMessageId
KNArticle::Ptr byMessageId(const QByteArray &mid)
Returns the article whose message-id is mid, or an empty KNArticle::Ptr if it is not found...
Definition: knarticlecollection.cpp:220
KNArticleVector::syncWithMaster
void syncWithMaster()
Definition: knarticlecollection.cpp:53
KNArticleVector::size
int size()
Definition: knarticlecollection.h:38
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:58:36 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

knode

Skip menu "knode"
  • Main Page
  • Namespace List
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal