• 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) = 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                         virtual ~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);
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                         Dictionary _dictionary;
00112                         bool _compressable;
00113                 };
00114 
00115                 class DefaultDeserializer : public Deserializer
00116                 {
00117                 public:
00122                         DefaultDeserializer(std::istream &stream);
00123 
00131                         DefaultDeserializer(std::istream &stream, Validator &v);
00132 
00140                         DefaultDeserializer(std::istream &stream, const Dictionary &d);
00141 
00146                         virtual ~DefaultDeserializer() {};
00147 
00148                         virtual Deserializer &operator>>(dtn::data::Bundle &obj);
00149                         virtual Deserializer &operator>>(dtn::data::PrimaryBlock &obj);
00150                         virtual Deserializer &operator>>(dtn::data::Block &obj);
00151 
00152                 protected:
00153                         std::istream &_stream;
00154                         Validator &_validator;
00155                         AcceptValidator _default_validator;
00156 
00157                 private:
00158                         Dictionary _dictionary;
00159                         bool _compressed;
00160                 };
00161 
00162                 class SeparateSerializer : public DefaultSerializer
00163                 {
00164                 public:
00165                         SeparateSerializer(std::ostream &stream);
00166                         virtual ~SeparateSerializer();
00167 
00168                         virtual Serializer &operator<<(const dtn::data::Block &obj);
00169                         virtual size_t getLength(const dtn::data::Block &obj) const;
00170                 };
00171 
00172                 class SeparateDeserializer : public DefaultDeserializer
00173                 {
00174                 public:
00175                         SeparateDeserializer(std::istream &stream, Bundle &b);
00176                         virtual ~SeparateDeserializer();
00177 
00178                         void readBlock();
00179 
00180                         virtual Deserializer &operator>>(dtn::data::Block &obj);
00181 
00182                 private:
00183                         Bundle &_bundle;
00184                 };
00185         }
00186 }
00187 
00188 
00189 #endif  /* _SERIALIZER_H */
00190 

Generated on Wed Mar 30 2011 11:11:49 for IBR-DTNSuite by  doxygen 1.7.1