summaryrefslogtreecommitdiffabout
path: root/kabc/vcard
authorzautrix <zautrix>2004-10-22 02:21:29 (UTC)
committer zautrix <zautrix>2004-10-22 02:21:29 (UTC)
commitc17118a0b2da49ec633e21cdcd51798c0c38644a (patch) (side-by-side diff)
tree581fbcaa64a5566991ffe0bd3b1b2d428589d87f /kabc/vcard
parentd6f9bd535e8cabe653bdff329500f9153e5e11fb (diff)
downloadkdepimpi-c17118a0b2da49ec633e21cdcd51798c0c38644a.zip
kdepimpi-c17118a0b2da49ec633e21cdcd51798c0c38644a.tar.gz
kdepimpi-c17118a0b2da49ec633e21cdcd51798c0c38644a.tar.bz2
made addressbook much faster
Diffstat (limited to 'kabc/vcard') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/vcard/VCardEntity.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/kabc/vcard/VCardEntity.cpp b/kabc/vcard/VCardEntity.cpp
index 5fca3bc..b676cc7 100644
--- a/kabc/vcard/VCardEntity.cpp
+++ b/kabc/vcard/VCardEntity.cpp
@@ -28,102 +28,147 @@
using namespace VCARD;
VCardEntity::VCardEntity()
: Entity()
{
cardList_.setAutoDelete( TRUE );
}
VCardEntity::VCardEntity(const VCardEntity & x)
: Entity(x)
{
cardList_.setAutoDelete( TRUE );
}
VCardEntity::VCardEntity(const QCString & s)
: Entity(s)
{
cardList_.setAutoDelete( TRUE );
}
VCardEntity &
VCardEntity::operator = (VCardEntity & x)
{
if (*this == x) return *this;
Entity::operator = (x);
return *this;
}
VCardEntity &
VCardEntity::operator = (const QCString & s)
{
Entity::operator = (s);
return *this;
}
bool
VCardEntity::operator == (VCardEntity & x)
{
x.parse();
return false;
}
VCardEntity::~VCardEntity()
{
}
+#include <qdatetime.h>;
void
VCardEntity::_parse()
{
+#if 0
+ QTime tim;
+ tim.start();
+ int num = 0;
+ // old code
vDebug("parse");
QCString s(strRep_);
int i = s.find(QRegExp("BEGIN:VCARD", false));
while (i != -1) {
i = s.find(QRegExp("BEGIN:VCARD", false), 11);
QCString cardStr(s.left(i));
VCard * v = new VCard(cardStr);
cardList_.append(v);
v->parse();
s.remove(0, i);
}
+
+#else
+ // this code is up to 17 (!) times faster
+ int start = 0;
+ QTime tim;
+ tim.start();
+ int i = 11;
+ int len = strRep_.length();
+ int num = 0;
+ while (i < len ) {
+ while( i < len ) {
+ int add = 1;
+ if ( strRep_.at(i) == 'B' ) {
+ if ( i+add < len && strRep_.at(i+add++) == 'E')
+ if ( i+add < len && strRep_.at(i+add++) == 'G')
+ if ( i+add < len && strRep_.at(i+add++) == 'I')
+ if ( i+add < len && strRep_.at(i+add++) == 'N')
+ if ( i+add < len && strRep_.at(i+add++) == ':')
+ if ( i+add < len && strRep_.at(i+add++) == 'V')
+ if ( i+add < len && strRep_.at(i+add++) == 'C')
+ if ( i+add < len && strRep_.at(i+add++) == 'A')
+ if ( i+add < len && strRep_.at(i+add++) == 'R')
+ if ( i+add < len && strRep_.at(i+add++) == 'D')
+ break;
+ }
+ ++i;
+ }
+ if ( i <= len ) {
+ ++num;
+ char* dat = strRep_.data()+start;
+ VCard * v = new VCard( QCString ( dat,i-start ) );
+ start = i;
+ cardList_.append(v);
+ v->parse();
+ }
+ i+= 11;
+ }
+#endif
+ //qDebug("***time %d found %d", tim.elapsed(), num);
}
void
VCardEntity::_assemble()
{
VCardListIterator it(cardList_);
for (; it.current(); ++it)
strRep_ += it.current()->asString() + "\r\n"; // One CRLF for luck.
}
VCardList &
VCardEntity::cardList()
{
parse();
return cardList_;
}
void
VCardEntity::setCardList(const VCardList & l)
{
parse();
//US cardList_ = l;
VCardListIterator it(l);
for (; it.current(); ++it) {
VCard* v = new VCard(*it.current());
cardList_.append(v);
}
}