datasource.h

来自「一个语言识别引擎」· C头文件 代码 · 共 113 行

H
113
字号
// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-

/*
 * Copyright (C) 2006 Paul Fitzpatrick
 * CopyPolicy: Released under the terms of the GNU GPL v2.0.
 *
 */

#ifndef YARP2_DATASOURCE
#define YARP2_DATASOURCE

#include <yarp/os/Port.h>
#include <yarp/os/Runnable.h>
#include <yarp/os/PortWriterBuffer.h>
#include <yarp/os/Stamp.h>

namespace yarp {
    namespace dev {
        template <class T> class DataSource;
        template <class T> class DataWriter;
        template <class T1, class T2> class DataSource2;
        template <class T1, class T2> class DataWriter2;
    }
}


template <class T>
class yarp::dev::DataSource {
public:
    virtual bool getDatum(T& datum) = 0;
};


template <class T>
class yarp::dev::DataWriter : public yarp::os::Runnable {
private:
    yarp::os::Port& port;
    yarp::os::PortWriterBuffer<T> writer;
    DataSource<T>& dater;
    yarp::os::Stamp stamp;
    bool canDrop;
    bool addStamp;
public:
    DataWriter(yarp::os::Port& port, DataSource<T>& dater, 
               bool canDrop=true,
               bool addStamp=false) : 
        port(port), dater(dater), canDrop(canDrop), addStamp(addStamp)
    {
        writer.attach(port);
    }

    virtual void run() {
        T& datum = writer.get();
        dater.getDatum(datum);
        if (addStamp) {
            stamp.update();
            port.setEnvelope(stamp);
        }
        writer.write(!canDrop);
    }
};



template <class T1, class T2>
class yarp::dev::DataSource2 {
public:
    virtual bool getDatum(T1& datum1, T2& datum2) = 0;
};


template <class T1, class T2>
class yarp::dev::DataWriter2 : public yarp::os::Runnable {
private:
    yarp::os::Port& port1;
    yarp::os::Port& port2;
    yarp::os::PortWriterBuffer<T1> writer1;
    yarp::os::PortWriterBuffer<T2> writer2;
    DataSource2<T1,T2>& dater;
    bool canDrop;
    bool addStamp;
    yarp::os::Stamp stamp;
public:
    DataWriter2(yarp::os::Port& port1, 
                yarp::os::Port& port2,
                DataSource2<T1,T2>& dater,
                bool canDrop=true,
                bool addStamp=false) : 
        port1(port1), port2(port2), dater(dater), canDrop(canDrop),
        addStamp(addStamp)
    {
        writer1.attach(port1);
        writer2.attach(port2);
    }

    virtual void run() {
        T1& datum1 = writer1.get();
        T2& datum2 = writer2.get();
        dater.getDatum(datum1,datum2);
        if (addStamp) {
            stamp.update();
            port1.setEnvelope(stamp);
            port2.setEnvelope(stamp);
        }
        writer1.write(!canDrop);
        writer2.write(!canDrop);
    }
};


#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?