• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

ibrdtn/ibrdtn/data/Serializer.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 /* 
00003  * File:   Serializer.h
00004  * Author: morgenro
00005  *
00006  * Created on 30. Mai 2010, 15:31
00007  */
00008 
00009 #ifndef _SERIALIZER_H
00010 #define _SERIALIZER_H
00011 
00012 #include <iostream>
00013 #include "ibrdtn/data/Dictionary.h"
00014 #include "ibrdtn/data/PrimaryBlock.h"
00015 #include "ibrdtn/data/Exceptions.h"
00016 
00017 namespace dtn
00018 {
00019         namespace data
00020         {
00021                 class Bundle;
00022                 class Block;
00023                 class PrimaryBlock;
00024 
00025                 class Serializer
00026                 {
00027                 public:
00028                         virtual ~Serializer() {};
00029 
00030                         virtual Serializer &operator<<(const dtn::data::Bundle &obj) = 0;
00031                         virtual Serializer &operator<<(const dtn::data::PrimaryBlock &obj) = 0;
00032                         virtual Serializer &operator<<(const dtn::data::Block &obj) = 0;
00033 
00034                         virtual size_t getLength(const dtn::data::Bundle &obj) const = 0;
00035                         virtual size_t getLength(const dtn::data::PrimaryBlock &obj) const = 0;
00036                         virtual size_t getLength(const dtn::data::Block &obj) const = 0;
00037                 };
00038 
00039                 class Deserializer
00040                 {
00041                 public:
00042                         virtual ~Deserializer() {};
00043 
00044                         virtual Deserializer &operator>>(dtn::data::Bundle &obj) = 0;
00045                         virtual Deserializer &operator>>(dtn::data::PrimaryBlock &obj) = 0;
00046                         virtual Deserializer &operator>>(dtn::data::Block &obj) = 0;
00047                 };
00048 
00049                 class Validator
00050                 {
00051                 public:
00052                         class RejectedException : public dtn::SerializationFailedException
00053                         {
00054                         public:
00055                                 RejectedException(string what = "A validate method has the bundle rejected.") throw() : dtn::SerializationFailedException(what)
00056                                 {
00057                                 };
00058                         };
00059 
00060                         virtual void validate(const dtn::data::PrimaryBlock&) const throw (RejectedException) = 0;
00061                         virtual void validate(const dtn::data::Block&, const size_t) const throw (RejectedException) = 0;
00062                         virtual void validate(const dtn::data::Bundle&) const throw (RejectedException) = 0;
00063                 };
00064 
00065                 class AcceptValidator : public Validator
00066                 {
00067                 public:
00068                         AcceptValidator();
00069                         ~AcceptValidator();
00070 
00071                         virtual void validate(const dtn::data::PrimaryBlock&) const throw (RejectedException);
00072                         virtual void validate(const dtn::data::Block&, const size_t) const throw (RejectedException);
00073                         virtual void validate(const dtn::data::Bundle&) const throw (RejectedException);
00074                 };
00075 
00076                 class DefaultSerializer : public Serializer
00077                 {
00078                 public:
00083                         DefaultSerializer(std::ostream &stream);
00084 
00091                         DefaultSerializer(std::ostream &stream, const Dictionary &d);
00092 
00096                         virtual ~DefaultSerializer() {};
00097 
00098                         virtual Serializer &operator<<(const dtn::data::Bundle &obj);
00099                         virtual Serializer &operator<<(const dtn::data::PrimaryBlock &obj);
00100                         virtual Serializer &operator<<(const dtn::data::Block &obj);
00101 
00102                         virtual size_t getLength(const dtn::data::Bundle &obj) const;
00103                         virtual size_t getLength(const dtn::data::PrimaryBlock &obj) const;
00104                         virtual size_t getLength(const dtn::data::Block &obj) const;
00105 
00106                 protected:
00107                         void rebuildDictionary(const dtn::data::Bundle &obj);
00108                         bool isCompressable(const dtn::data::Bundle &obj) const;
00109                         std::ostream &_stream;
00110 
00111                 private:
00112                         Dictionary _dictionary;
00113                         bool _compressable;
00114                 };
00115 
00116                 class DefaultDeserializer : public Deserializer
00117                 {
00118                 public:
00123                         DefaultDeserializer(std::istream &stream);
00124 
00132                         DefaultDeserializer(std::istream &stream, Validator &v);
00133 
00141                         DefaultDeserializer(std::istream &stream, const Dictionary &d);
00142 
00147                         virtual ~DefaultDeserializer() {};
00148 
00149                         virtual Deserializer &operator>>(dtn::data::Bundle &obj);
00150                         virtual Deserializer &operator>>(dtn::data::PrimaryBlock &obj);
00151                         virtual Deserializer &operator>>(dtn::data::Block &obj);
00152 
00153                 protected:
00154                         std::istream &_stream;
00155                         Validator &_validator;
00156                         AcceptValidator _default_validator;
00157 
00158                 private:
00159                         Dictionary _dictionary;
00160                         bool _compressed;
00161                 };
00162 
00163                 class SeparateSerializer : public DefaultSerializer
00164                 {
00165                 public:
00166                         SeparateSerializer(std::ostream &stream);
00167                         virtual ~SeparateSerializer();
00168 
00169                         virtual Serializer &operator<<(const dtn::data::Block &obj);
00170                         virtual size_t getLength(const dtn::data::Block &obj) const;
00171                 };
00172 
00173                 class SeparateDeserializer : public DefaultDeserializer
00174                 {
00175                 public:
00176                         SeparateDeserializer(std::istream &stream, Bundle &b);
00177                         virtual ~SeparateDeserializer();
00178 
00179                         void readBlock();
00180 
00181                         virtual Deserializer &operator>>(dtn::data::Block &obj);
00182 
00183                 private:
00184                         Bundle &_bundle;
00185                 };
00186         }
00187 }
00188 
00189 
00190 #endif  /* _SERIALIZER_H */
00191 

Generated on Thu Nov 11 2010 09:49:47 for IBR-DTNSuite by  doxygen 1.7.1