2 kbytearrayescaper.cpp - A small class that allow to (un)escape a QByteArray using custom escape sequences.
4 Copyright (c) 2003-2007 by Michel Hermier <michel.hermier@gmail.com>
6 Kopete (c) 2003-2007 by the Kopete developers <kopete-devel@kde.org>
8 *************************************************************************
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
15 *************************************************************************
18 #include "kbytearrayescaper.h"
20 class KByteArrayEscaper::Private
28 KByteArrayEscaper::KByteArrayEscaper(char escape_char
, const KByteArrayEscaper::EscapeList
&escapes
)
29 : d(new KByteArrayEscaper::Private
)
35 KByteArrayEscaper::~KByteArrayEscaper()
40 void KByteArrayEscaper::reset(char escape_char
)
42 d
->escape_char
= escape_char
;
43 for (int i
=0; i
<256; ++i
)
47 void KByteArrayEscaper::addEscape(char escape
, char replacement
)
49 d
->escape
[(uchar
)escape
] = replacement
;
50 d
->reverse
[(uchar
)replacement
] = escape
;
53 void KByteArrayEscaper::addEscape(const KByteArrayEscaper::EscapeList
&escapeds
)
55 Q_FOREACH(const KByteArrayEscaper::Escape
&escaped
, escapeds
)
56 addEscape(escaped
.first
, escaped
.second
);
59 void KByteArrayEscaper::removeEscape(char escape
)
61 addEscape(escape
, escape
);
64 QByteArray
KByteArrayEscaper::escape(const QByteArray
&buffer
) const
73 // ret.resize(buffer.size()*1.10);
76 foreach (char c
, buffer
)
78 escaped
= d
->escaped
[(uchar
)c
];
79 if(c
!= escaped
|| c
== d
->escape
)
87 QList
<QByteArray
> KByteArrayEscaper::escape(const QList
<QByteArray
> &buffers
) const
89 QList
<QByteArray
> ret
;
90 Q_FOREACH(const QByteArray
&buffer
, buffers
)
91 ret
.append(escape(buffer
));
95 QByteArray
KByteArrayEscaper::unescape(const QByteArray
&buffer
) const
104 // ret.resize(buffer.size()*1.10);
106 bool escaped
= false;
107 foreach (char c
, buffer
)
110 quoted
+= d
->reverse
[(uchar
)c
];
111 escaped
= !escaped
&& c
== d
->escape
;
122 QList
<QByteArray
> KByteArrayEscaper::unescape(const QList
<QByteArray
> &buffers
) const
124 QList
<QByteArray
> ret
;
125 Q_FOREACH(const QByteArray
&buffer
, buffers
)
126 ret
.append(unescape(buffer
));