BDictionary.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "Qt.h"
00024 #include "BDictionary.h"
00025 #include "BErrorItem.h"
00026 #include "BString.h"
00027 #include "Imports.cpp"
00028
00030
00032 BDictionary::BDictionary()
00033 : dict(), errorItem()
00034 {
00035 }
00036
00038
00041 BDictionary::~BDictionary()
00042 {
00043 foreach (const BItem *item, dict.values())
00044 delete item;
00045 }
00046
00048
00051 void BDictionary::insert (QByteArray key, const BItem *value)
00052 {
00053 dict.insert (key, value);
00054 }
00055
00057
00060 QList<QByteArray> BDictionary::keys() const
00061 {
00062 return dict.keys();
00063 }
00064
00066
00070 bool BDictionary::read (BinaryReader &reader)
00071 {
00072 uchar dictionaryMarker = reader.readByte();
00073 Q_ASSERT (dictionaryMarker == 'd');
00074
00075 while (reader.lookAhead(1) != 'e') {
00076 auto_ptr <BItem> key = readItem (reader);
00077 auto_ptr <BItem> value = readItem (reader);
00078 if (typeid (*key) != typeid (BString) ||
00079 typeid (*value) == typeid (BErrorItem)) {
00080 return false;
00081 }
00082 BString &string = dynamic_cast <BString &> (*(key.get()));
00083 insert (string.value(), value.release());
00084 }
00085 reader.readByte();
00086 return true;
00087 }