📄 schedordertest.cc
字号:
// -*- c-basic-offset: 4 -*-/* * schedordertest.{cc,hh} -- remember scheduling order * Eddie Kohler * * Copyright (c) 2004 Regents of the University of California * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, subject to the conditions * listed in the Click LICENSE file. These conditions include: you must * preserve this copyright notice, and you cannot mention the copyright * holders in advertising related to the Software without their permission. * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This * notice is a summary of the Click LICENSE file; the license in that file is * legally binding. */#include <click/config.h>#include "schedordertest.hh"#include <click/confparse.hh>#include <click/error.hh>#include <click/straccum.hh>#include <click/router.hh>#include <click/standard/scheduleinfo.hh>CLICK_DECLSSchedOrderTest::SchedOrderTest() : Element(0, 0), _count(0), _limit(0), _buf_begin(0), _bufsiz(0), _task(this), _stop(false){}SchedOrderTest::~SchedOrderTest(){ if (_bufpos_ptr == &_bufpos) delete[] _buf_begin;}intSchedOrderTest::configure(Vector<String>& conf, ErrorHandler* errh){ if (cp_va_parse(conf, this, errh, cpInteger, "ID", &_id, cpKeywords, "SIZE", cpInteger, "buffer size", &_bufsiz, "STOP", cpBool, "stop driver when done?", &_stop, "LIMIT", cpUnsigned, "maximum number of schedulings", &_limit, cpEnd) < 0) return -1; void*& main = router()->force_attachment("SchedOrderTest"); if (!main) main = this; SchedOrderTest* sot = (SchedOrderTest*) main; if (sot->_bufsiz < _bufsiz) sot->_bufsiz = _bufsiz; return 0;}intSchedOrderTest::initialize(ErrorHandler* errh){ SchedOrderTest* sot = (SchedOrderTest*) router()->attachment("SchedOrderTest"); if (!sot->_buf_begin) { if (sot->_bufsiz == 0) sot->_bufsiz = 1024; if (!(sot->_buf_begin = new int[sot->_bufsiz])) return errh->error("out of memory!"); sot->_buf_end = sot->_buf_begin + sot->_bufsiz; sot->_bufpos = sot->_buf_begin; } _buf_begin = sot->_buf_begin; _bufpos_ptr = &sot->_bufpos; _buf_end = sot->_buf_end; ScheduleInfo::initialize_task(this, &_task, true, errh); return 0;}boolSchedOrderTest::run_task(){ if (*_bufpos_ptr < _buf_end) { *((*_bufpos_ptr)++) = _id; } else if (_stop) router()->please_stop_driver(); if (_limit == 0 || ++_count < _limit) _task.fast_reschedule(); return true;}StringSchedOrderTest::read_handler(Element* e, void*){ SchedOrderTest* sot = (SchedOrderTest*) e; StringAccum sa; for (int* x = sot->_buf_begin; x < *sot->_bufpos_ptr; x++) sa << *x << ' '; sa.back() = '\n'; return sa.take_string();}voidSchedOrderTest::add_handlers(){ add_read_handler("order", read_handler, 0);}CLICK_ENDDECLSEXPORT_ELEMENT(SchedOrderTest)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -