📄 formatporuke.cpp
字号:
#include "FormatPoruke.h"
#include <iostream>
//********************************** KFormatPoruke << BEGIN >> **************************************
// Funkcija vraca iterator koji ukazuje na element vektora 'opis' sa datim ID-om ili NULL ako ne nadje.
TOpisPoruke::iterator KFormatPoruke::DajIterator( IDKomponentePoruke ID ) {
TOpisPoruke::iterator iter = opis.begin();
TOpisPoruke::iterator iPoslednji = opis.end();
while( iter!=iPoslednji && iter->IDkomponente != ID ) iter++;
if ( iter == iPoslednji ) iter = NULL;
return iter;
}
// Vraca ID formata poruke
IDFormataPoruke KFormatPoruke::DajID( void ){
return ID;
}
// Vraca opis formata poruke u promenljivu na koju ukazuje pokazivac 'pOpis'
void KFormatPoruke::DajOpis( TOpisPoruke& opis ){
opis = KFormatPoruke::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 KFormatPoruke::DajPozicijuKomponente( IDKomponentePoruke ID, unsigned int& nPozicija, unsigned int& nDuzina ){
bool izlaz = false;
nPozicija = 0;
nDuzina = 0;
TOpisPoruke::iterator iter = DajIterator( ID );
if( iter != NULL ){
nPozicija = iter->pozicija;
nDuzina = iter->duzina;
izlaz = true;
}
return izlaz;
}
// Postavlja poziciju i duzinu komponente poruke.
// Ako ne nadje komponentu sa datim ID-om, vraca 'false'
bool KFormatPoruke::PostaviPozicijuKomponente( IDKomponentePoruke ID, unsigned int nPozicija, unsigned int nDuzina ){
bool izlaz = false;
TOpisPoruke::iterator iter = DajIterator( ID );
if( iter != NULL ){
iter->pozicija = nPozicija;
iter->duzina = nDuzina;
izlaz = true;
}
return izlaz;
}
// Vraca 'true' ako data komponenta poruke postoji
bool KFormatPoruke::PostojiKomponenta( IDKomponentePoruke ID ){
if( DajIterator( ID ) != NULL ) return true;
else return false;
}
//*********************************** KFormatPoruke << END >> **************************************
//********************************* KSpisakFormata << BEGIN >> *************************************
// Konstruktor
KSpisakFormata::KSpisakFormata(){
Inicijalizacija();
}
// Pristup jedinom objektu klase
KSpisakFormata* KSpisakFormata::Instance( void ){
static KSpisakFormata instance;
return &instance;
}
// Inizijalizacija spiska formata poruka. U slucaju neuspeha vraca false.
bool KSpisakFormata::Inicijalizacija( void ){
bool izlaz = true;
KFormatPoruke* pFormatPoruke = NULL;
TOpisPoruke* pOpisPoruke = NULL;
KOpisKomponenetePoruke* pOpisKomponenete = NULL;
// trebalo bi da cita iz nekog konfiguracionog fajla
try {
// 'Default' format ( poruka koja ima samo sadrzaj, a duzina je definisana tim sadrzajem )
pOpisPoruke = new TOpisPoruke;
pOpisKomponenete = new KOpisKomponenetePoruke( KP_SADRZAJ, 0, 0 );
pOpisPoruke->push_back( *pOpisKomponenete );
pFormatPoruke = new KFormatPoruke( FP_DEFAULT, *pOpisPoruke );
Tabela.push_back( *pFormatPoruke );
// Komanda ( start, komanda, serijski broj, suma )
pOpisPoruke = new TOpisPoruke;
pOpisKomponenete = new KOpisKomponenetePoruke( KP_START, 0, 1 );
pOpisPoruke->push_back( *pOpisKomponenete );
pOpisKomponenete = new KOpisKomponenetePoruke( KP_KOMANDA, 1, 1 );
pOpisPoruke->push_back( *pOpisKomponenete );
pOpisKomponenete = new KOpisKomponenetePoruke( KP_SERIJSKI_BROJ,2, 4 );
pOpisPoruke->push_back( *pOpisKomponenete );
pOpisKomponenete = new KOpisKomponenetePoruke( KP_SUMA, 6, 1 );
pOpisPoruke->push_back( *pOpisKomponenete );
pFormatPoruke = new KFormatPoruke( FP_KOMANDA, *pOpisPoruke );
Tabela.push_back( *pFormatPoruke );
// Poruka sa podacima ( sa sadrzajem )
pOpisPoruke = new TOpisPoruke;
pOpisKomponenete = new KOpisKomponenetePoruke( KP_START, 0, 1 );
pOpisPoruke->push_back( *pOpisKomponenete );
pOpisKomponenete = new KOpisKomponenetePoruke( KP_KOMANDA, 1, 1 );
pOpisPoruke->push_back( *pOpisKomponenete );
pOpisKomponenete = new KOpisKomponenetePoruke( KP_SADRZAJ, 2, 0 );
pOpisPoruke->push_back( *pOpisKomponenete );
pOpisKomponenete = new KOpisKomponenetePoruke( KP_SUMA, 0, 1 );
pOpisPoruke->push_back( *pOpisKomponenete );
pFormatPoruke = new KFormatPoruke( FP_PODACI_TERMINAL, *pOpisPoruke );
Tabela.push_back( *pFormatPoruke );
// Potvrda terminala ( ACK )
pOpisPoruke = new TOpisPoruke;
pOpisKomponenete = new KOpisKomponenetePoruke( KP_START, 0, 1 );
pOpisPoruke->push_back( *pOpisKomponenete );
pOpisKomponenete = new KOpisKomponenetePoruke( KP_KOMANDA, 1, 1 );
pOpisPoruke->push_back( *pOpisKomponenete );
pOpisKomponenete = new KOpisKomponenetePoruke( KP_SUMA, 2, 1 );
pOpisPoruke->push_back( *pOpisKomponenete );
pFormatPoruke = new KFormatPoruke( FP_POTVRDA_SA_TERMINALA, *pOpisPoruke );
Tabela.push_back( *pFormatPoruke );
// Poruka koja sadrzi i serijski broj i sadrzaj
pOpisPoruke = new TOpisPoruke;
pOpisKomponenete = new KOpisKomponenetePoruke( KP_START, 0, 1 );
pOpisPoruke->push_back( *pOpisKomponenete );
pOpisKomponenete = new KOpisKomponenetePoruke( KP_KOMANDA, 1, 1 );
pOpisPoruke->push_back( *pOpisKomponenete );
pOpisKomponenete = new KOpisKomponenetePoruke( KP_SERIJSKI_BROJ,2, 4 );
pOpisPoruke->push_back( *pOpisKomponenete );
pOpisKomponenete = new KOpisKomponenetePoruke( KP_SADRZAJ, 6, 0 );
pOpisPoruke->push_back( *pOpisKomponenete );
pOpisKomponenete = new KOpisKomponenetePoruke( KP_SUMA, 0, 1 );
pOpisPoruke->push_back( *pOpisKomponenete );
pFormatPoruke = new KFormatPoruke( FP_KOMPLETNA_PORUKA, *pOpisPoruke );
Tabela.push_back( *pFormatPoruke );
}
catch (std::bad_alloc) { // nije uspela alokacija memorije sa 'new'
// oslobodi ono sto je alocirano
if ( pOpisPoruke != NULL ) {
(*pOpisPoruke).clear(); // obrisi elemente vektora ( da li ovo brise i same podatke ? )
delete pOpisPoruke; // obrisi vektor
}
izlaz = false;
}
return izlaz;
}
// Vraca format poruke u promenljivu 'format'. Ako ne nadje, vraca false.
bool KSpisakFormata::DajFormatPoruke( IDFormataPoruke formatID, KFormatPoruke& format ){
bool izlaz = false;
TTabelaFormata::iterator s_iter = DajIterator( formatID );
if ( s_iter != NULL ) {
format = *s_iter;
izlaz = true;
}
return izlaz;
}
// Vraca 'default' format poruke u promenljivu 'format'. Ako ne nadje, vraca false.
bool KSpisakFormata::DajDefaultFormat( KFormatPoruke& format ){
return DajFormatPoruke( FP_DEFAULT, format );
}
// Vraca 'true' ako je dati format default format
bool KSpisakFormata::FormatDefault( KFormatPoruke& format ){
if ( format.DajID() == FP_DEFAULT ) return true;
else return false;
}
// Vraca 'default' poziciju i duzinu komponente poruke u datom formatu.
// Ako data komponenta u datom formatu ne postoju, vraca false
bool KSpisakFormata::DefaultPozicijaKomponente( IDFormataPoruke formatID, IDKomponentePoruke IDkomponente,
unsigned int& nPozicija, unsigned int& nDuzina ){
bool izlaz = false;
TTabelaFormata::iterator s_iter = DajIterator( formatID );
if ( ( s_iter != NULL ) &&
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -