00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #if !defined(__ONIXS_FAST_H__)
00021 #define __ONIXS_FAST_H__
00022
00023 #include <string>
00024 #include <vector>
00025
00026 #include "OnixS/FIX/ABI.h"
00027 #include "OnixS/FIX/Definitions.h"
00028
00029 namespace OnixS
00030 {
00031 namespace FIX
00032 {
00033 ONIXS_FIXENGINE_API_DECL(class, Message);
00034 ONIXS_FIXENGINE_API_DECL(class, Dialect);
00035
00036 namespace FAST
00037 {
00039 class ONIXS_FIXENGINE_API Encoder
00040 {
00041 public:
00047 Encoder(const std::string& xmlTemplates, OnixS::FIX::Version fixVersion, bool encodeEachMessageIndependently);
00048
00050 ~Encoder(void);
00051
00060 size_t encode(const OnixS::FIX::Message& fixMessage, int templateID, char* buffer, size_t bufferSize);
00061
00069 size_t encode(const OnixS::FIX::Message& fixMessage, char* buffer, size_t bufferSize);
00070
00074 void reset();
00075
00076 private:
00077 Encoder(const Encoder&);
00078 Encoder& operator = (const Encoder&);
00079
00080 Encoder(void* native);
00081
00082 struct Impl;
00083 Impl* impl_;
00084 void* native_;
00085 };
00086
00088 class ONIXS_FIXENGINE_API Decoder{
00089 public:
00096 Decoder(const std::string& xmlTemplates, OnixS::FIX::Version fixVersion, bool decodeEachMessageIndependently);
00097
00105 Decoder(const std::string& xmlTemplates, const OnixS::FIX::Dialect & fixDialect, bool decodeEachMessageIndependently);
00106
00108 ~Decoder(void);
00109
00118 const OnixS::FIX::Message& decode(const char* buffer, size_t bufferSize);
00119
00127 const OnixS::FIX::Message& decode(const std::vector<char> & chunk);
00128
00143 bool tryDecode(const char* buffer, size_t offset, size_t count, const OnixS::FIX::Message** message, size_t* numberOfDecodedBytes);
00144
00153 static bool tryDecodeUnsignedInteger(const char* buffer, size_t bufferSize, unsigned int* value, size_t* fieldLength);
00154
00158 void reset();
00159
00160 private:
00161 Decoder(const Decoder&);
00162 Decoder& operator = (const Decoder&);
00163
00164 Decoder(void* native);
00165
00166 void init(const std::string& xmlTemplates, const std::string& fixDictionary, bool decodeEachMessageIndependently);
00167
00168 struct Impl;
00169 Impl* impl_;
00170 void* native_;
00171 };
00172 }
00173 }
00174 }
00175
00176 #endif // __ONIXS_FAST_H__