Unit.h

Go to the documentation of this file.
00001 /*
00002 *       This file contains abstract class which represents working units.
00003 *
00004 *       Author:
00005 *                       Tomas Mrkvicka
00006 *                       xmrkvi03@stud.fit.vutbr.cz
00007 *
00008 */
00009 
00010 // FORWARD DECLARATIONS
00011 namespace NSPipeline
00012 {
00013         class TUnit;
00014 };
00015 
00016 #ifndef _PIPELINE_UNIT_HH_
00017 #define _PIPELINE_UNIT_HH_
00018 
00019 #include "pipeline/UnitTypes.h"
00020 #include "pipeline/ImageAbstract.h"
00021 
00022 namespace NSPipeline
00023 {
00024 
00025 ////////////////////////////////////////////////////////////////////////////////
00026 ////////////////////////////////////////////////////////////////////////////////
00027 ////////////////////////////////////////////////////////////////////////////////
00028 // TUnitInterface
00029 
00030 /** Tato trida reprezentuje rozhrani pracovni jednotky.
00031 *
00032 *       Toto rozhrani (nebo trida z nej odvozena) je dostupne aplikaci.
00033 *
00034 *       U metod Start(), Stop() a Release() se predpoklada, ze budou volany pouze
00035 *       z jednoho vlakna a tedy neni vyzadovana synchronizace pro vicevlaknovy pristup.
00036 *
00037 *       Metoda GetType() typicky vraci konstantu a v takovem pripade soubezny pristup
00038 *       nemusi byt synchronizovan.
00039 *
00040 *       Metoda GetResult() vraci vysledky pro zadane snimky (podle ID snimku) - je volana pouze
00041 *       jednim vlaknem, ale je nutne zajistit, ze vnitrni vlakno jednotky ukladajici vysledky 
00042 *       bude synchronizovano s vlaknem, ktere pristupuje k temto vysledkum.
00043 */
00044 class TUnitInterface
00045 {
00046 //PUBLIC METHODS
00047 public:
00048         /** Vrati typ navratove hodnoty teto jednotky.
00049         */
00050         virtual EnumUnitType                    GetType(void) = 0;
00051 
00052         /** Vysledek pro snimek s pozadovanym identifikatorem.
00053         *
00054         *       Muze vracet NULL pokud vysledek neni k dispozici.
00055         *
00056         *       \param  id      [in] identifikator vysledku (z casove znacky)
00057         */
00058         virtual TUnitRetTypeInterface*  GetResult(DWORD id) = 0;
00059 
00060         /** Vraci hodnotu udavajici pocet snimku, ktere jednotce
00061         *       "utecou" behem zpracovani dvou snimkou.
00062         *
00063         *       Tato hodnota se meni behem zpracovani a jednotka ji pocita jako 
00064         *       rozdil mezi ID poslednich dvou snimku.
00065         */
00066         virtual DWORD                   GetFrameInterval() = 0;
00067 
00068         /** Spusteni vypoctu jednotky.
00069         *
00070         *       Vraci TRUE pokud jednotka jiz bezi nebo byla uspesne spustena.
00071         */
00072         virtual BOOL                    Start(void) = 0;
00073 
00074         /** Ukonceni vypoctu jednotky.
00075         *
00076         *       \warning        Musi uvolnit vsechny vysledky ktere jsou ulozene v jednotce!
00077         *
00078         *       Vraci TRUE v pripade zastaveni jednotky, FALSE pri kriticke chybe.
00079         */
00080         virtual BOOL                    Stop(void) = 0;
00081 
00082         /** Odstrani jednotku.
00083         *
00084         *       Pred odstranenim jednotky by mela byt jednotka zastavena volanim metody Stop.
00085         */
00086         virtual void                    Release(void) = 0;
00087 
00088 //PROTECTED METHODS
00089 protected:
00090                                                         TUnitInterface(void){};
00091                                                         virtual ~TUnitInterface(void){};
00092 
00093 //PROTECTED FAKE METHODS
00094 protected:
00095                                                         TUnitInterface( const TUnitInterface & orig );  ///< falesny kopirovaci konstruktor
00096         void                                    operator=( const TUnitInterface & orig );               ///< falesny prirazovaci operator
00097 
00098 };
00099 //OK 2007-08-25 18:19:20 B04-315B\Tom
00100 
00101 // TUnitInterface
00102 ////////////////////////////////////////////////////////////////////////////////
00103 ////////////////////////////////////////////////////////////////////////////////
00104 ////////////////////////////////////////////////////////////////////////////////
00105 
00106 /** Typ DLL knihovny.
00107 *
00108 *       Typ urcuje parametry funkci CreateUnit v DLL pres kterou se vytvari vypocetni jednotka.
00109 */
00110 enum EnumDLLType
00111 {
00112         /**
00113         *       Zakladni typ DLL - funkce CreateUnit vyzaduje pouze 
00114         *       ukazatel na rozhrani dispatcheru.
00115         *
00116         *       CreateUnit( TDispatcherInterface * dispatcher ) 
00117         */
00118         ENUM_DLLTYPE_BASIC = 0,
00119 
00120         /**
00121         *       Funkce CreateUnit vyzaduje rozhrani dispatcheru
00122         *       a jako druhy parametr retezec zakonceny nulou.
00123         *
00124         *       CreateUnit( TDispatcherInterface * dispatcher, const char * string )
00125         */      
00126         ENUM_DLLTYPE_STRING = 1,                                                                                        
00127 
00128         ENUM_DLLTYPE_FORCED32 = 0x7fffffff              ///< zarovnani na 32-bitu
00129 };
00130 //OK 2007-08-25 18:19:18 B04-315B\Tom
00131 
00132 ////////////////////////////////////////////////////////////////////////////////
00133 ////////////////////////////////////////////////////////////////////////////////
00134 ////////////////////////////////////////////////////////////////////////////////
00135 
00136 /** Ukazatel na funkci pro ziskani informaci o typu navratove funkce CreateUnit.
00137 *
00138 *       Funkce se jmenuje "GetType".
00139 */
00140 typedef EnumDLLType (*PTR_DLLTYPE) (void);
00141 
00142 /** Ukazatel na funkci z DLL knihovny, pres kterou lze ziskat vypocetni jednotku.
00143 *
00144 *       Funkce se jmenuje "CreateUnit".
00145 */
00146 typedef TUnitInterface* (*PTR_UNITGET_BASIC)( TDispatcherInterface * dispatcher );
00147 
00148 /** Ukazatel na funkce z DLL knihovny, pres kterou lze ziskat vypocetni jednotku.
00149 *
00150 *       Funkce se jmenuje "CreateUnit".
00151 */
00152 typedef TUnitInterface* (*PTR_UNITGET_STRING)( TDispatcherInterface * dispatcher, const char * str );
00153 
00154 }; //end of NSPipeline
00155 using namespace NSPipeline;
00156 
00157 #endif

Generated on Sat Nov 17 16:23:26 2007 for Image Processing Pipeline by  doxygen 1.4.6-NO