Ignore:
Timestamp:
06/13/13 13:43:39 (11 years ago)
Author:
morasjul
Message:

Beta-2 : Fix CMakeList (link), remove useless code and add improvement

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.0-beta1/include/Pacpus/kernel/inputOutputInterface.h

    r102 r110  
    44#include <Pacpus/kernel/Log.h>
    55#include <Pacpus/kernel/inputOutputBase.h>
     6#include <QApplication>
     7#include <typeinfo>
    68
    7 #include <typeinfo>
    89#include <QDebug>
    9 #include <QApplication>
     10#include <QThread>
    1011
    1112#include <QByteArray>
     
    1314#define ADD_INPUT(name,ComponentType, DataType, functionName)  input.insert(name,new InputInterface<DataType,ComponentType> (name,this,&ComponentType::functionName))
    1415#define ADD_OUTPUT(name,ComponentType, DataType)      output.insert(name,new OutputInterface<DataType,ComponentType> (name,this))
     16
    1517#define GET_OUTPUT(name,ComponentType, DataType) dynamic_cast<OutputInterface<DataType,ComponentType> *> (output.value(name))
     18#define GET_INPUT(name,ComponentType, DataType) dynamic_cast<InputInterface<DataType,ComponentType> *> (input.value(name))
    1619
    1720namespace pacpus {
     
    2629    QString getDataType() {return QString(typeid(T).name());}
    2730
    28     protected:
    29     int boundingTime_;
     31protected:
    3032
    31     public:
     33public:
    3234
    33     PacpusEvent getEventTemplate() {return PacpusTypedEvent<T>(TYPED_EVENT); }
     35    PacpusEvent* getEventTemplate() {return new PacpusTypedEvent<T>(TYPED_EVENT); }
    3436
    3537    void customEvent(QEvent* event) {
     
    3739        switch (event->type()) {
    3840
    39                 // from Component to Component (T->T)
    40             case TYPED_EVENT: {
    41                 PacpusTypedEvent<T> * typedEvent = dynamic_cast<PacpusTypedEvent<T> *> (event);
    42                 //qDebug() << "E1 ";
    43                 //qDebug() << "recived 2 thread " << QThread::currentThread();
    44                     if(typedEvent->tr_ == 0 && readingMode_ == TimeBounded) {
    45                         //LOG_WARN("Incorrect TimeRange (0), switch to NeverSkip");
    46                         readingMode_ = NeverSkip;}
     41        // from Component to Component (T->T)
     42        case TYPED_EVENT: {
     43            PacpusTypedEvent<T> * typedEvent = dynamic_cast<PacpusTypedEvent<T> *> (event);
    4744
    48                 switch (readingMode_){
    49                     case TimeBounded:
    50                                                 qDebug() << "Input " << this->getSignature() << " Time bournded "<< road_time()- typedEvent->t_ << " " << typedEvent->tr_;
    51                     if(road_time() - typedEvent->t_> typedEvent->tr_)
    52                                                 { qDebug() << "Data skip " << this->getSignature();
    53                                         break;}
    54                         (dynamic_cast<C*>(_component)->*method)(typedEvent->_data);
    55                         break;
    56                     case GetLast:
    57                                                 qDebug() << "Input " << this->getSignature() << "GetLast "<< road_time() - typedEvent->t_ << " " << typedEvent->tr_;
    58                         (dynamic_cast<C*>(_component)->*method)(typedEvent->_data);
    59                         QCoreApplication::removePostedEvents(this,TYPED_EVENT); // delete all remining events
    60                         break;
    61                     case NeverSkip:
    62                                                 qDebug() << "Input " << this->getSignature() << "NeverSkip "<< road_time() - typedEvent->t_ << " " << typedEvent->tr_;
    63                     default:
    64                         (dynamic_cast<C*>(_component)->*method)(typedEvent->_data);
    65                 }
     45            qDebug() << "Revever " << getSignature() << " thread " << QThread::currentThread() << " Data & " << & typedEvent->data_;
     46
     47            if(typedEvent->tr_ < 500 && readingMode_ == TimeBounded) {
     48                //LOG_WARN("Incorrect TimeRange (0), switch to NeverSkip");
     49                qDebug() << "Incorrect TimeRange (0), switch to NeverSkip";
     50                readingMode_ = NeverSkip;}
     51
     52            switch (readingMode_){
     53            case TimeBounded:
     54                qDebug() << "Input " << this->getSignature().leftJustified(20) << QString("Time bournded").leftJustified(15) << road_time()- typedEvent->t_ << "\t" << typedEvent->tr_;
     55
     56                if(road_time() - typedEvent->t_> typedEvent->tr_)
     57                    {qDebug() << "Data skip " << this->getSignature();  break;}
     58
     59                (dynamic_cast<C*>(_component)->*method)(typedEvent->data_);
    6660                break;
     61
     62            case GetLast:
     63                qDebug() << "Input " << this->getSignature().leftJustified(20) << QString("GetLast").leftJustified(15) << road_time() - typedEvent->t_ << "\t" << typedEvent->tr_;
     64
     65                (dynamic_cast<C*>(_component)->*method)(typedEvent->data_);
     66                QCoreApplication::removePostedEvents(this,TYPED_EVENT); // delete all remining events
     67                break;
     68
     69            case NeverSkip:
     70                qDebug() << "Input " << this->getSignature().leftJustified(20) << QString("NeverSkip").leftJustified(15) << road_time() - typedEvent->t_ << "\t" << typedEvent->tr_;
     71
     72            default:
     73                (dynamic_cast<C*>(_component)->*method)(typedEvent->data_);
    6774            }
     75            break;
     76        }
    6877
    69                 // from Connection interface to Component (G->T)
    70 /*            case GENERIC_EVENT2: {
     78            // from Connection interface to Component (G->T)
     79            /*            case GENERIC_EVENT2: {
    7180                PacpusTypedEvent<QByteArray> * genericEvent = dynamic_cast<PacpusTypedEvent<QByteArray> *> (event);
    7281                T data;
    73                 QByteArray& buf = (QByteArray&) genericEvent->_data;
     82                QByteArray& buf = (QByteArray&) genericEvent->data_;
    7483                QDataStream in(&buf,QIODevice::ReadOnly);
    7584
     
    8190            case GENERIC_EVENT3: {
    8291                PacpusTypedEvent<T> * typedEvent = dynamic_cast<PacpusTypedEvent<T> *> (event);
    83                 (dynamic_cast<C*>(_component)->*method)(typedEvent->_data);     // copy 3 X
     92                (dynamic_cast<C*>(_component)->*method)(typedEvent->data_);     // copy 3 X
    8493
    8594                break;
    8695            }*/
    8796
    88             default:
     97        default:
    8998
    9099            qDebug() << "Unknown event ID " << event->type();
    91                 break;
     100            break;
    92101        }
     102    event->accept();
     103    }
    93104
     105    T& getData() {
     106        T data;
     107        // TODO ask output data;
    94108
     109            //LOG4CXX_INFO(getLogger(), "Hello, World");
     110
     111        return data;
    95112    }
    96113
    97114protected:
    98115    void (C::*method)(const T&);
     116
     117 /*   log4cxx::LoggerPtr& getLogger() {
     118        static log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger(    LOG4CXX_LOCATION.getClassName()));
     119        return logger;
     120    }*/
    99121
    100122};
     
    109131    // Used by Components to send data througth typed output
    110132    void send(const T & data, road_time_t t = road_time(), road_timerange_t tr = 0) {
     133
     134        //QSharedPointer<T> sharedPointer = new T(data);
     135
     136        for(QList<ConnectionBase>::iterator it = _connection.begin(); it!=_connection.end(); ++it){
     137            QApplication::postEvent(it->getInterface(),new PacpusTypedEvent<T>(TYPED_EVENT,data,t,tr),it->getPriority()); // Event is delete by the event loop handler
     138            qDebug() << "sender " << it->getInterface()->getSignature() <<  " thread " << QThread::currentThread() << " Data & " << &data << " ";
     139            // TODO DAta SHAred
     140        }
     141    }
     142
     143    /*    void send(const T & data, road_time_t t = road_time(), road_timerange_t tr = 0) {
    111144        for(QList<ConnectionBase>::iterator it = _connection.begin(); it!=_connection.end(); ++it){
    112145
    113             //if(it->getInterface()->getDataType() != QString(typeid(QByteArray).name()))
     146            if(it->getInterface()->getDataType() != QString(typeid(QByteArray).name()))
    114147                QApplication::postEvent(it->getInterface(),new PacpusTypedEvent<T>(TYPED_EVENT,data,t,tr),it->getPriority());
    115            /*else {
     148           else {
    116149                QByteArray buf;
    117150                QDataStream out(&buf,QIODevice::ReadWrite);
    118151                PacpusTypedEvent<QByteArray> * ev =new PacpusTypedEvent<QByteArray>(GENERIC_EVENT3,buf);
    119152                QApplication::postEvent(it->getInterface(),ev,it->getPriority()); // Copy 2 (ctor)
    120                 }*/
     153                }
    121154        }
    122155    }
    123156
    124157    // Used by Connection Interfaces only to pose generic event
    125 /*    void sendGenericData(char * data, size_t size) {
     158        void sendGenericData(char * data, size_t size) {
    126159        QByteArray buf(data,size);  // copy 5
    127160        for(QList<ConnectionBase>::iterator it = _connection.begin(); it!=_connection.end(); ++it)
Note: See TracChangeset for help on using the changeset viewer.