Update contrib.
2 * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of the License "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
20 inline REncodeWriteStream& operator<<(REncodeWriteStream& aStream,const T& anObject)
22 const std::string &name = anObject.Name();
26 // Generate human readable progress
27 REncodeWriteStream tmp(prog);
31 if(aStream.HumanReadable())
33 if(anObject.CommentOnlyInHumanMode() && !aStream.Verbose())
38 aStream.WriteIndent();
39 if(anObject.CommentOnlyInHumanMode())
41 aStream.WriteByte('#');
43 aStream.WriteBin(name.data(), name.size());
45 EncodeHuman(aStream, anObject.Value());
46 aStream.WriteLineEnd();
50 // Just write as binary "store" format
51 aStream.StoreWriteStream() << anObject.Value();
57 REncodeWriteStream& operator<<(REncodeWriteStream& aStream, const EncDecEnum<T> &aEncDecEnum)
59 const std::string &name = aEncDecEnum.Name();
63 // Generate human readable progress
64 REncodeWriteStream tmp(prog);
68 if(aStream.HumanReadable())
70 if(aEncDecEnum.CommentOnlyInHumanMode() && !aStream.Verbose())
74 aStream.WriteIndent();
75 if(aEncDecEnum.CommentOnlyInHumanMode())
77 aStream.WriteByte('#');
79 aStream.WriteBin(name.data(), name.size());
81 const char *enumName = aEncDecEnum.ValueName();
84 aStream.WriteByte('"');
85 aStream.WriteBin(enumName, strlen(enumName));
86 aStream.WriteByte('"');
89 // In verbose mode so include numeric value as a comment
90 aStream.WriteCStr(" # ");
91 EncodeHuman(aStream, TUint32(aEncDecEnum.Value()));
96 // Symbolic value not available, so write as numeric
97 EncodeHuman(aStream, TUint32(aEncDecEnum.Value()));
99 aStream.WriteLineEnd();
103 // Just write as binary "store" format
104 aStream.StoreWriteStream() << aEncDecEnum.Value();
111 inline RDecodeReadStream& operator>>(RDecodeReadStream& aStream,T& anObject)
113 const std::string &name = anObject.Name();
114 if(aStream.HumanReadable())
116 if(anObject.CommentOnlyInHumanMode())
118 return aStream; // Not accepted in human mode, so just return...
120 // Need to convert to ascii
121 aStream.CheckName(name);
122 DecodeHuman(aStream, anObject.Value());
127 aStream.iReadStream >> anObject.Value();
130 // Generate human readable progress
131 // prog.WriteIndent();
132 REncodeWriteStream tmp(prog);
138 template <typename T>
139 RDecodeReadStream& operator>>(RDecodeReadStream& aStream, EncDecEnum<T> &aEncDecEnum)
141 const std::string &name = aEncDecEnum.Name();
142 if(aStream.HumanReadable())
144 if(aEncDecEnum.CommentOnlyInHumanMode())
146 return aStream; // Not accepted in human mode, so just return...
148 // Need to convert to ascii
149 aStream.CheckName(name);
151 aStream.ReadNextToken();
152 aEncDecEnum.SetValue(aStream.Token().c_str());
157 aStream.iReadStream >> aEncDecEnum.Value();
160 // Generate human readable progress
161 // prog.WriteIndent();
162 REncodeWriteStream tmp(prog);
171 EncDecEnum<T>::EncDecEnum(const char *aName, const EnumEntry *aEnumEntries, bool aCommentOnlyInHumanMode)
172 : iName(aName), iEnumEntries(aEnumEntries), iCommentOnlyInHumanMode(aCommentOnlyInHumanMode), iValue(0)
174 if(iEnumEntries == 0)
176 FatalError(); // programing error
183 void EncDecEnum<T>::SetValue(const T &aValue)
185 // Search enum entires which one which matches
186 if(ValueToName(aValue) == 0)
189 dbg << Log::Indent() << "Unknown value for enum " << iName << " value " << TUint32(aValue) << Log::Endl();
198 void EncDecEnum<T>::SetValue(const char *aName)
200 // Search enum entires which one which matches
201 const EnumEntry *p = iEnumEntries;
204 // We ignore case when matching enums
205 if(strcasecmp(aName, p->iName) == 0)
215 dbg << Log::Indent() << "Unknown value for enum " << iName << " value '" << aName << "'" << Log::Endl();
216 std::string str(aName);
217 iValue = ReadUnsignedNumber(str,sizeof(T));
221 const char *EncDecEnum<T>::ValueToName(const T &aValue) const
223 if(iEnumEntries == 0) FatalError();
224 const EnumEntry *p = iEnumEntries;
227 if(p->iValue == aValue)