📄 formatporuke.h
字号:
/*
Klase za rad sa formatima poruka.
*/
#ifndef FORMATPORUKE_H
#define FORMATPORUKE_H
#include <string>
#include <vector> // template "vector"
#include "Korisno.h"
using namespace std;
//******************************* Deklaracije << BEGIN >> *******************************
// - enumeracije
enum IDFormataPoruke;
enum IDKomponentePoruke;
// - kalse
class KOpisKomponenetePoruke;
class KFormatPoruke;
class KSpisakFormata;
// - tipovi
typedef vector<KOpisKomponenetePoruke> TOpisPoruke;
typedef vector<KFormatPoruke> TTabelaFormata;
// - konstante
const unsigned char START_PORUKE = 0x02;
//******************************** Deklaracije << END >> ********************************
// Tipovi formata poruke; prefiks FP ( Formt Poruke )
enum IDFormataPoruke { FP_DEFAULT = 1,
FP_KOMANDA,
FP_PODACI_TERMINAL,
FP_POTVRDA_SA_TERMINALA,
FP_KOMPLETNA_PORUKA
};
// Tipovi komponenata poruke; prefiks KP ( Komponenta Poruke )
enum IDKomponentePoruke { KP_START = 1,
KP_KOMANDA,
KP_SERIJSKI_BROJ,
KP_SADRZAJ,
KP_SUMA
};
class KOpisKomponenetePoruke {
public:
IDKomponentePoruke IDkomponente;
unsigned int pozicija;
unsigned int duzina;
// Konstruktori
KOpisKomponenetePoruke( void ) {}
KOpisKomponenetePoruke( IDKomponentePoruke ID, unsigned int poz, unsigned int duz ) :
IDkomponente( ID ), pozicija( poz ), duzina( duz ) { }
};
/*
Klasa za format poruke.
*/
class KFormatPoruke{
public:
// Konstruktori
KFormatPoruke( void ){}; // mora da postoji default konstruktor ( zbog Poruka.cpp )
KFormatPoruke( IDFormataPoruke formatID, TOpisPoruke& opisFormata ) : ID( formatID ), opis( opisFormata ) {}
// Vraca ID formata poruke
IDFormataPoruke DajID( void );
// Vraca opis svih komponenti poruke u promenljivu 'opis'
void DajOpis( TOpisPoruke& opis );
// Vraca poziciju i duzinu komponente poruke preko parametara nPozicija i nDuzina.
// Ako ne nadje komponentu sa datim ID-om, vraca 'false', a nPozicija = nDuzina = 0.
bool DajPozicijuKomponente( IDKomponentePoruke ID, unsigned int& nPozicija, unsigned int& nDuzina );
// Postavlja poziciju i duzinu komponente poruke.
// Ako ne nadje komponentu sa datim ID-om, vraca 'false'
bool PostaviPozicijuKomponente( IDKomponentePoruke ID, unsigned int nPozicija, unsigned int nDuzina );
// Vraca 'true' ako data komponenta poruke postoji
bool PostojiKomponenta( IDKomponentePoruke ID );
private:
IDFormataPoruke ID;
TOpisPoruke opis;
// Vraca iterator koji ukazuje na element vektora opisa sa datim ID-om ili NULL ako ne nadje.
TOpisPoruke::iterator DajIterator( IDKomponentePoruke ID );
};
/*
Klase koja cuva spisak formata poruka. Takodje, sadrzi procedure za manipulaciju 'formatiranim' stringovima.
Klasa je 'singleton': pristup procedurama se vrsi preko pointera 'KFormatPoruke::Instance()'.
*/
class KSpisakFormata {
public:
// Spisak formata poruka.
TTabelaFormata Tabela;
// Pristup jedinom objektu klase
static KSpisakFormata* Instance( void );
// Inizijalizacija spiska formata poruka. U slucaju neuspeha vraca false.
bool Inicijalizacija( void );
// Vraca format poruke u promenljivu 'format'. Ako ne nadje, vraca false.
bool DajFormatPoruke( IDFormataPoruke formatID, KFormatPoruke& format );
// Vraca 'default' format poruke u promenljivu 'format'. Ako ne nadje, vraca false.
bool DajDefaultFormat( KFormatPoruke& format );
// Vraca 'true' ako je dati format default format
bool FormatDefault( KFormatPoruke& format );
// Vraca 'default' poziciju i duzinu komponente poruke u datom formatu.
// Ako data komponenta u datom formatu ne postoju, vraca false
bool DefaultPozicijaKomponente( IDFormataPoruke formatID, IDKomponentePoruke IDkomponente,
unsigned int& nPozicija, unsigned int& nDuzina );
// Od 'formatiranog stringa' pravi 'obican niz bajtova'.
string DeformatPoruku( KString cUlazniString, KFormatPoruke& format );
string DeformatPoruku( KString cUlazniString, IDFormataPoruke formatID );
// Od 'obicnog niza bajtova' pravi 'formatirani string'.
string FormatPoruku( string cUlazniString, KFormatPoruke& format );
string FormatPoruku( string cUlazniString, IDFormataPoruke formatID );
// Pomocna procedura : ispisuje spisak formata
void OdstampajSpisakTxt( void );
// Postavlja velicinu i poziciju date komponente ( ovo zato sto sadrzaj moze da bude promenljiv )
void PostaviPozicijuIDuzinu( IDFormataPoruke formatID, IDKomponentePoruke IDkomponente,
unsigned int nPozicija, unsigned int nDuzina );
private:
// Posto je klasa singlton, konstruktor je privatni
KSpisakFormata();
// Vraca iterator koji ukazuje na element spiska formata sa datim ID-om ili NULL ako ga ne nadje.
TTabelaFormata::iterator DajIterator( IDFormataPoruke formatID );
// Pomocna procedura ( poziva se u 'DeformatPoruku' ). Vraca duzinu komponente u ulaznom stringu,
// a u 'cDeformatiranaKomponenta' vraca taj deo ulaznog stringa u 'deformatiranom' obliku.
unsigned int DeformatKomponentu( string& cDeformatiranaKomponenta, KString cUlazniString, unsigned int pozUlStr,
UIFormat formatKomponente, unsigned int duzinaKomponente );
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -