summaryrefslogtreecommitdiffabout
path: root/kabc/vcard
Unidiff
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
@@ -70,15 +70,21 @@ VCardEntity::operator == (VCardEntity & x)
70} 70}
71 71
72VCardEntity::~VCardEntity() 72VCardEntity::~VCardEntity()
73{ 73{
74} 74}
75 75
76#include <qdatetime.h>;
76 void 77 void
77VCardEntity::_parse() 78VCardEntity::_parse()
78{ 79{
80#if 0
81 QTime tim;
82 tim.start();
83 int num = 0;
84 // old code
79 vDebug("parse"); 85 vDebug("parse");
80 QCString s(strRep_); 86 QCString s(strRep_);
81 87
82 int i = s.find(QRegExp("BEGIN:VCARD", false)); 88 int i = s.find(QRegExp("BEGIN:VCARD", false));
83 89
84 while (i != -1) { 90 while (i != -1) {
@@ -92,12 +98,51 @@ VCardEntity::_parse()
92 cardList_.append(v); 98 cardList_.append(v);
93 99
94 v->parse(); 100 v->parse();
95 101
96 s.remove(0, i); 102 s.remove(0, i);
97 } 103 }
104
105#else
106 // this code is up to 17 (!) times faster
107 int start = 0;
108 QTime tim;
109 tim.start();
110 int i = 11;
111 int len = strRep_.length();
112 int num = 0;
113 while (i < len ) {
114 while( i < len ) {
115 int add = 1;
116 if ( strRep_.at(i) == 'B' ) {
117 if ( i+add < len && strRep_.at(i+add++) == 'E')
118 if ( i+add < len && strRep_.at(i+add++) == 'G')
119 if ( i+add < len && strRep_.at(i+add++) == 'I')
120 if ( i+add < len && strRep_.at(i+add++) == 'N')
121 if ( i+add < len && strRep_.at(i+add++) == ':')
122 if ( i+add < len && strRep_.at(i+add++) == 'V')
123 if ( i+add < len && strRep_.at(i+add++) == 'C')
124 if ( i+add < len && strRep_.at(i+add++) == 'A')
125 if ( i+add < len && strRep_.at(i+add++) == 'R')
126 if ( i+add < len && strRep_.at(i+add++) == 'D')
127 break;
128 }
129 ++i;
130 }
131 if ( i <= len ) {
132 ++num;
133 char* dat = strRep_.data()+start;
134 VCard * v = new VCard( QCString ( dat,i-start ) );
135 start = i;
136 cardList_.append(v);
137 v->parse();
138 }
139 i+= 11;
140 }
141#endif
142 //qDebug("***time %d found %d", tim.elapsed(), num);
98} 143}
99 144
100 void 145 void
101VCardEntity::_assemble() 146VCardEntity::_assemble()
102{ 147{
103 VCardListIterator it(cardList_); 148 VCardListIterator it(cardList_);