s11n-boost.h

Go to the documentation of this file.
00001 ///
00002 /// \file       s11n-boost.h
00003 ///             Non-intrusive versions of serialization functions for the
00004 ///             record classes.  These template functions make it possible
00005 ///             to use the record classes with the Boost::Serialization
00006 ///             library.
00007 ///
00008 
00009 /*
00010     Copyright (C) 2005-2010, Net Direct Inc. (http://www.netdirect.ca/)
00011 
00012     This program is free software; you can redistribute it and/or modify
00013     it under the terms of the GNU General Public License as published by
00014     the Free Software Foundation; either version 2 of the License, or
00015     (at your option) any later version.
00016 
00017     This program is distributed in the hope that it will be useful,
00018     but WITHOUT ANY WARRANTY; without even the implied warranty of
00019     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020 
00021     See the GNU General Public License in the COPYING file at the
00022     root directory of this project for more details.
00023 */
00024 
00025 #ifndef __BARRY_S11N_BOOST_H__
00026 #define __BARRY_S11N_BOOST_H__
00027 
00028 #include "record.h"
00029 #include <boost/serialization/vector.hpp>
00030 
00031 ///////////////////////////////////////////////////////////////////////////////
00032 // special versions
00033 //
00034 // BARRY_BASE_S11N_VERSION      - the base version where all record data is
00035 //                                stored so it can be fully retrieved and
00036 //                                uploaded to the handheld device later.
00037 // BARRY_POD_MAP_VERSION        - if these templates are called with a version
00038 //                                equal or greater than this, only mappable,
00039 //                                POD data is included in the serialization
00040 //
00041 #define BARRY_BASE_S11N_VERSION         0
00042 #define BARRY_POD_MAP_VERSION           1000
00043 
00044 // namespace boost::serialization, for the non-intrusive version
00045 namespace boost {
00046 namespace serialization {
00047 
00048 template <class ArchiveT>
00049 void serialize(ArchiveT &ar, Barry::UnknownField &uf, const unsigned int ver)
00050 {
00051         ar & make_nvp("type", uf.type);
00052         ar & make_nvp("data", uf.data.raw_data);
00053 }
00054 
00055 template <class ArchiveT>
00056 void serialize(ArchiveT &ar, Barry::Contact::GroupLink &g, const unsigned int ver)
00057 {
00058         ar & make_nvp("Link", g.Link);
00059         ar & make_nvp("Unknown", g.Unknown);
00060 }
00061 
00062 template <class ArchiveT>
00063 void serialize(ArchiveT &ar, Barry::CategoryList &cl, const unsigned int ver)
00064 {
00065         std::vector<std::string> &sl = cl;
00066         ar & make_nvp("CategoryList", sl);
00067 }
00068 
00069 template <class ArchiveT>
00070 void serialize(ArchiveT &ar, Barry::Contact &c, const unsigned int ver)
00071 {
00072         ar & make_nvp("RecType", c.RecType);
00073         ar & make_nvp("RecordId", c.RecordId);
00074 
00075         ar & make_nvp("EmailAddresses", c.EmailAddresses);
00076         ar & make_nvp("Phone", c.Phone);
00077         ar & make_nvp("Fax", c.Fax);
00078         ar & make_nvp("WorkPhone", c.WorkPhone);
00079         ar & make_nvp("HomePhone", c.HomePhone);
00080         ar & make_nvp("MobilePhone", c.MobilePhone);
00081         ar & make_nvp("Pager", c.Pager);
00082         ar & make_nvp("PIN", c.PIN);
00083         ar & make_nvp("Radio", c.Radio);
00084         ar & make_nvp("WorkPhone2", c.WorkPhone2);
00085         ar & make_nvp("HomePhone2", c.HomePhone2);
00086         ar & make_nvp("OtherPhone", c.OtherPhone);
00087         ar & make_nvp("FirstName", c.FirstName);
00088         ar & make_nvp("LastName", c.LastName);
00089         ar & make_nvp("Company", c.Company);
00090         ar & make_nvp("DefaultCommunicationsMethod", c.DefaultCommunicationsMethod);
00091         ar & make_nvp("Address1", c.WorkAddress.Address1);
00092         ar & make_nvp("Address2", c.WorkAddress.Address2);
00093         ar & make_nvp("Address3", c.WorkAddress.Address3);
00094         ar & make_nvp("City", c.WorkAddress.City);
00095         ar & make_nvp("Province", c.WorkAddress.Province);
00096         ar & make_nvp("PostalCode", c.WorkAddress.PostalCode);
00097         ar & make_nvp("Country", c.WorkAddress.Country);
00098         ar & make_nvp("JobTitle", c.JobTitle);
00099         ar & make_nvp("PublicKey", c.PublicKey);
00100         ar & make_nvp("URL", c.URL);
00101         ar & make_nvp("Prefix", c.Prefix);
00102         ar & make_nvp("Categories", c.Categories);
00103         ar & make_nvp("HomeAddress1", c.HomeAddress.Address1);
00104         ar & make_nvp("HomeAddress2", c.HomeAddress.Address2);
00105         ar & make_nvp("HomeAddress3", c.HomeAddress.Address3);
00106         ar & make_nvp("Notes", c.Notes);
00107         ar & make_nvp("UserDefined1", c.UserDefined1);
00108         ar & make_nvp("UserDefined2", c.UserDefined2);
00109         ar & make_nvp("UserDefined3", c.UserDefined3);
00110         ar & make_nvp("UserDefined4", c.UserDefined4);
00111         ar & make_nvp("HomeCity", c.HomeAddress.City);
00112         ar & make_nvp("HomeProvince", c.HomeAddress.Province);
00113         ar & make_nvp("HomePostalCode", c.HomeAddress.PostalCode);
00114         ar & make_nvp("HomeCountry", c.HomeAddress.Country);
00115         ar & make_nvp("Image", c.Image);
00116 
00117         if( ver < BARRY_POD_MAP_VERSION ) {
00118                 ar & make_nvp("GroupLinks", c.GroupLinks);
00119                 ar & make_nvp("Unknowns", c.Unknowns);
00120         }
00121 }
00122 
00123 template <class ArchiveT>
00124 void serialize(ArchiveT &ar, Barry::EmailAddress &a, const unsigned int ver)
00125 {
00126         ar & make_nvp("Name", a.Name);
00127         ar & make_nvp("Email", a.Email);
00128 }
00129 
00130 template <class ArchiveT>
00131 void serialize(ArchiveT &ar, Barry::Message &m, const unsigned int ver)
00132 {
00133         ar & make_nvp("From", m.From);
00134         ar & make_nvp("To", m.To);
00135         ar & make_nvp("Cc", m.Cc);
00136         ar & make_nvp("Sender", m.Sender);
00137         ar & make_nvp("ReplyTo", m.ReplyTo);
00138         ar & make_nvp("Subject", m.Subject);
00139         ar & make_nvp("Body", m.Body);
00140         ar & make_nvp("Attachment", m.Attachment);
00141         ar & make_nvp("MessageRecordId", m.MessageRecordId);
00142         ar & make_nvp("MessageReplyTo", m.MessageReplyTo);
00143         ar & make_nvp("MessageDateSent", m.MessageDateSent);
00144         ar & make_nvp("MessageDateReceived", m.MessageDateReceived);
00145 
00146         ar & make_nvp("MessageTruncated", m.MessageTruncated);
00147         ar & make_nvp("MessageRead", m.MessageRead);
00148         ar & make_nvp("MessageReply", m.MessageReply);
00149         ar & make_nvp("MessageSaved", m.MessageSaved);
00150         ar & make_nvp("MessageSavedDeleted", m.MessageSavedDeleted);
00151 
00152         ar & make_nvp("MessagePriority", m.Priority);
00153         ar & make_nvp("MessageSensitivity", m.Sensitivity);
00154 
00155         if( ver < BARRY_POD_MAP_VERSION ) {
00156                 ar & make_nvp("Unknowns", m.Unknowns);
00157         }
00158 }
00159 
00160 template <class ArchiveT>
00161 void serialize(ArchiveT &ar, Barry::Calendar &c, const unsigned int ver)
00162 {
00163         ar & make_nvp("RecType", c.RecType);
00164         ar & make_nvp("RecordId", c.RecordId);
00165 
00166         ar & make_nvp("AllDayEvent", c.AllDayEvent);
00167 
00168         ar & make_nvp("Subject", c.Subject);
00169         ar & make_nvp("Notes", c.Notes);
00170         ar & make_nvp("Location", c.Location);
00171 
00172         ar & make_nvp("NotificationTime", c.NotificationTime);
00173         ar & make_nvp("StartTime", c.StartTime);
00174         ar & make_nvp("EndTime", c.EndTime);
00175 
00176         ar & make_nvp("Organizer", c.Organizer);
00177         ar & make_nvp("AcceptedBy", c.AcceptedBy);
00178         ar & make_nvp("Invited", c.Invited);
00179 
00180         ar & make_nvp("FreeBusyFlag", c.FreeBusyFlag);
00181         ar & make_nvp("ClassFlag", c.ClassFlag);
00182 
00183         ar & make_nvp("Recurring", c.Recurring);
00184         ar & make_nvp("RecurringType", c.RecurringType);
00185         ar & make_nvp("Interval", c.Interval);
00186         ar & make_nvp("RecurringEndTime", c.RecurringEndTime);
00187         ar & make_nvp("Perpetual", c.Perpetual);
00188         ar & make_nvp("CalendarID", c.CalendarID);
00189         ar & make_nvp("TimeZoneCode", c.TimeZoneCode);
00190         ar & make_nvp("TimeZoneValid", c.TimeZoneValid);
00191 
00192         ar & make_nvp("DayOfWeek", c.DayOfWeek);
00193         ar & make_nvp("WeekOfMonth", c.WeekOfMonth);
00194         ar & make_nvp("DayOfMonth", c.DayOfMonth);
00195         ar & make_nvp("MonthOfYear", c.MonthOfYear);
00196         ar & make_nvp("WeekDays", c.WeekDays);
00197 
00198         if( ver < BARRY_POD_MAP_VERSION ) {
00199                 ar & make_nvp("Unknowns", c.Unknowns);
00200         }
00201 }
00202 
00203 template <class ArchiveT>
00204 void serialize(ArchiveT &ar, Barry::CalendarAll &c, const unsigned int ver)
00205 {
00206         serialize(ar, static_cast<Barry::Calendar&>(c), ver);
00207 
00208         ar & make_nvp("MailAccount", c.MailAccount);
00209 }
00210 
00211 template <class ArchiveT>
00212 void serialize(ArchiveT &ar, Barry::CallLog &c, const unsigned int ver)
00213 {
00214         ar & make_nvp("RecType", c.RecType);
00215         ar & make_nvp("RecordId", c.RecordId);
00216 
00217         ar & make_nvp("Duration", c.Duration);
00218         ar & make_nvp("Timestamp", c.Timestamp);
00219         ar & make_nvp("ContactName", c.ContactName);
00220         ar & make_nvp("PhoneNumber", c.PhoneNumber);
00221 
00222         ar & make_nvp("DirectionFlag", c.DirectionFlag);
00223         ar & make_nvp("StatusFlag", c.StatusFlag);
00224         ar & make_nvp("PhoneTypeFlag", c.PhoneTypeFlag);
00225         ar & make_nvp("PhoneInfoFlag", c.PhoneInfoFlag);
00226 
00227         if( ver < BARRY_POD_MAP_VERSION ) {
00228                 ar & make_nvp("Unknowns", c.Unknowns);
00229         }
00230 }
00231 
00232 template <class ArchiveT>
00233 void serialize(ArchiveT &ar, Barry::ServiceBookConfig &c, const unsigned int ver)
00234 {
00235         ar & make_nvp("Format", c.Format);
00236 
00237         if( ver < BARRY_POD_MAP_VERSION ) {
00238                 ar & make_nvp("Unknowns", c.Unknowns);
00239         }
00240 }
00241 
00242 template <class ArchiveT>
00243 void serialize(ArchiveT &ar, Barry::ServiceBook &c, const unsigned int ver)
00244 {
00245         ar & make_nvp("RecType", c.RecType);
00246         ar & make_nvp("RecordId", c.RecordId);
00247 
00248         ar & make_nvp("Name", c.Name);
00249         ar & make_nvp("HiddenName", c.HiddenName);
00250         ar & make_nvp("Description", c.Description);
00251         ar & make_nvp("DSID", c.DSID);
00252         ar & make_nvp("BesDomain", c.BesDomain);
00253         ar & make_nvp("UniqueId", c.UniqueId);
00254         ar & make_nvp("ContentId", c.ContentId);
00255         ar & make_nvp("Config", c.Config);
00256 
00257         if( ver < BARRY_POD_MAP_VERSION ) {
00258                 ar & make_nvp("Unknowns", c.Unknowns);
00259         }
00260 }
00261 
00262 template <class ArchiveT>
00263 void serialize(ArchiveT &ar, Barry::Memo &m, const unsigned int ver)
00264 {
00265         ar & make_nvp("RecType", m.RecType);
00266         ar & make_nvp("RecordId", m.RecordId);
00267 
00268         ar & make_nvp("Title", m.Title);
00269         ar & make_nvp("Body", m.Body);
00270         ar & make_nvp("Categories", m.Categories);
00271 
00272         if( ver < BARRY_POD_MAP_VERSION ) {
00273                 ar & make_nvp( "Unknowns", m.Unknowns);
00274         }
00275 }
00276 
00277 template <class ArchiveT>
00278 void serialize(ArchiveT &ar, Barry::Task &t, const unsigned int ver)
00279 {
00280         ar & make_nvp("RecType", t.RecType);
00281         ar & make_nvp("RecordId", t.RecordId);
00282 
00283         ar & make_nvp("Summary", t.Summary);
00284         ar & make_nvp("Notes", t.Notes);
00285         ar & make_nvp("Categories", t.Categories);
00286         ar & make_nvp("UID", t.UID);
00287 
00288         ar & make_nvp("StartTime", t.StartTime);
00289         ar & make_nvp("DueTime", t.DueTime);
00290         ar & make_nvp("AlarmTime", t.AlarmTime);
00291 
00292         ar & make_nvp("TimeZoneCode", t.TimeZoneCode);
00293         ar & make_nvp("TimeZoneValid", t.TimeZoneValid);
00294 
00295         ar & make_nvp("AlarmType", t.AlarmType);
00296         ar & make_nvp("Interval", t.Interval);
00297         ar & make_nvp("RecurringType", t.RecurringType);
00298         ar & make_nvp("RecurringEndTime", t.RecurringEndTime);
00299         ar & make_nvp("DayOfWeek", t.DayOfWeek);
00300         ar & make_nvp("WeekOfMonth", t.WeekOfMonth);
00301         ar & make_nvp("DayOfMonth", t.DayOfMonth);
00302         ar & make_nvp("MonthOfYear", t.MonthOfYear);
00303         ar & make_nvp("WeekDays", t.WeekDays);
00304 
00305         ar & make_nvp("PriorityFlag", t.PriorityFlag);
00306         ar & make_nvp("StatusFlag", t.StatusFlag);
00307         ar & make_nvp("Recurring", t.Recurring);
00308         ar & make_nvp("Perpetual", t.Perpetual);
00309         ar & make_nvp("DueDateFlag", t.DueDateFlag);
00310 
00311         if( ver < BARRY_POD_MAP_VERSION ) {
00312                 ar & make_nvp( "Unknowns", t.Unknowns);
00313         }
00314 }
00315 
00316 template<class ArchiveT>
00317 void serialize(ArchiveT &ar, Barry::PINMessage &p, const unsigned int ver)
00318 {
00319         ar & make_nvp("RecType", p.RecType);
00320         ar & make_nvp("RecordId", p.RecordId);
00321 
00322         ar & make_nvp("From", p.From);
00323         ar & make_nvp("To", p.To);
00324         ar & make_nvp("Cc", p.Cc);
00325         ar & make_nvp("Bcc", p.Bcc);
00326         ar & make_nvp("Subject", p.Subject);
00327         ar & make_nvp("Body", p.Body);
00328         ar & make_nvp("MessageRecordId", p.MessageRecordId);
00329         ar & make_nvp("MessageReplyTo", p.MessageReplyTo);
00330         ar & make_nvp("MessageDateSent", p.MessageDateSent);
00331         ar & make_nvp("MessageDateReceived", p.MessageDateReceived);
00332 
00333         ar & make_nvp("MessageTruncated", p.MessageTruncated);
00334         ar & make_nvp("MessageRead", p.MessageRead);
00335         ar & make_nvp("MessageReply", p.MessageReply);
00336         ar & make_nvp("MessageSaved", p.MessageSaved);
00337         ar & make_nvp("MessageSavedDeleted", p.MessageSavedDeleted);
00338 
00339         ar & make_nvp("MessagePriority", p.Priority);
00340         ar & make_nvp("MessageSensitivity", p.Sensitivity);
00341 
00342         if(ver < BARRY_POD_MAP_VERSION) {
00343                 ar & make_nvp("Unknowns", p.Unknowns);
00344         }
00345 }
00346 
00347 template <class ArchiveT>
00348 void serialize(ArchiveT &ar, Barry::SavedMessage &m, const unsigned int ver)
00349 {
00350         ar & make_nvp("RecType", m.RecType);
00351         ar & make_nvp("RecordId", m.RecordId);
00352 
00353         ar & make_nvp("From", m.From);
00354         ar & make_nvp("To", m.To);
00355         ar & make_nvp("Cc", m.Cc);
00356         ar & make_nvp("Bcc", m.Bcc);
00357         ar & make_nvp("Sender", m.Sender);
00358         ar & make_nvp("ReplyTo", m.ReplyTo);
00359         ar & make_nvp("Subject", m.Subject);
00360         ar & make_nvp("Body", m.Body);
00361         ar & make_nvp("Attachment", m.Attachment);
00362         ar & make_nvp("MessageRecordId", m.MessageRecordId);
00363         ar & make_nvp("MessageReplyTo", m.MessageReplyTo);
00364         ar & make_nvp("MessageDateSent", m.MessageDateSent);
00365         ar & make_nvp("MessageDateReceived", m.MessageDateReceived);
00366 
00367         ar & make_nvp("MessageTruncated", m.MessageTruncated);
00368         ar & make_nvp("MessageRead", m.MessageRead);
00369         ar & make_nvp("MessageReply", m.MessageReply);
00370         ar & make_nvp("MessageSaved", m.MessageSaved);
00371         ar & make_nvp("MessageSavedDeleted", m.MessageSavedDeleted);
00372 
00373         ar & make_nvp("MessagePriority", m.Priority);
00374         ar & make_nvp("MessageSensitivity", m.Sensitivity);
00375 
00376         if( ver < BARRY_POD_MAP_VERSION ) {
00377                 ar & make_nvp("Unknowns", m.Unknowns);
00378         }
00379 }
00380 
00381 template <class ArchiveT>
00382 void serialize(ArchiveT &ar, Barry::Sms &m, const unsigned int ver)
00383 {
00384         ar & make_nvp("RecType", m.RecType);
00385         ar & make_nvp("RecordId", m.RecordId);
00386 
00387         ar & make_nvp("MessageStatus", m.MessageStatus);
00388         ar & make_nvp("DeliveryStatus", m.DeliveryStatus);
00389 
00390         ar & make_nvp("IsNew", m.IsNew);
00391         ar & make_nvp("NewConversation", m.NewConversation);
00392         ar & make_nvp("Saved", m.Saved);
00393         ar & make_nvp("Deleted", m.Deleted);
00394         ar & make_nvp("Opened", m.Opened);
00395 
00396         ar & make_nvp("Timestamp", m.Timestamp);
00397         ar & make_nvp("ServiceCenterTimestamp", m.ServiceCenterTimestamp);
00398 
00399         ar & make_nvp("DataCodingScheme", m.DataCodingScheme);
00400         ar & make_nvp("ErrorId", m.ErrorId);
00401 
00402         ar & make_nvp("Addresses", m.Addresses);
00403         ar & make_nvp("Body", m.Body);
00404 
00405         if( ver < BARRY_POD_MAP_VERSION ) {
00406                 ar & make_nvp("Unknowns", m.Unknowns);
00407         }
00408 }
00409 
00410 template <class ArchiveT>
00411 void serialize(ArchiveT &ar, Barry::Folder &f, const unsigned int ver)
00412 {
00413         ar & make_nvp("RecType", f.RecType);
00414         ar & make_nvp("RecordId", f.RecordId);
00415 
00416         ar & make_nvp("FolderName", f.Name);
00417         ar & make_nvp("FolderNumber", f.Number);
00418         ar & make_nvp("FolderLevel", f.Level);
00419         ar & make_nvp("FolderType", f.Type);
00420 
00421         if( ver < BARRY_POD_MAP_VERSION ) {
00422                 ar & make_nvp( "Unknowns", f.Unknowns);
00423         }
00424 }
00425 
00426 template <class ArchiveT>
00427 void serialize(ArchiveT &ar, Barry::Timezone &t, const unsigned int ver)
00428 {
00429         ar & make_nvp("RecType", t.RecType);
00430         ar & make_nvp("RecordId", t.RecordId);
00431 
00432         ar & make_nvp("TZType", t.TZType);
00433         ar & make_nvp("DSTOffset", t.DSTOffset);
00434         ar & make_nvp("Index", t.Index);
00435         ar & make_nvp("Offset", t.Offset);
00436         ar & make_nvp("OffsetFraction", t.OffsetFraction);
00437         ar & make_nvp("StartMonth", t.StartMonth);
00438         ar & make_nvp("EndMonth", t.EndMonth);
00439         ar & make_nvp("Left", t.Left);
00440         ar & make_nvp("UseDST", t.UseDST);
00441 
00442         ar & make_nvp("TimeZoneName", t.TimeZoneName);
00443 
00444         if( ver < BARRY_POD_MAP_VERSION ) {
00445                 ar & make_nvp("Unknowns", t.Unknowns);
00446         }
00447 }
00448 
00449 }} // namespace boost::serialization
00450 
00451 #endif
00452 
Generated by  doxygen 1.6.2-20100208