⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 energy.cc

📁 Matlab下的大名鼎鼎的Leach分簇算法实现。对网络研究的有用处
💻 CC
字号:
/************************************************************************* * * This code was developed as part of the MIT SPIN project. (June, 1999) * *************************************************************************/#include <stdlib.h>#include <mit/rca/energy.h>#define SUCCESS 0#define SUCCESS_STRING "success"#define FAIL -1#define FAIL_STRING "fail"#define ALARM 1#define ALARM_STRING "alarm"static class EnergyResourceClass : public TclClass {public:  EnergyResourceClass() : TclClass("Resource/Energy") {}  TclObject* create(int, const char*const*) {    return (new EnergyResource);  }} class_EnergyResource;EnergyResource::EnergyResource() {  energy_level_ = 0;  alarm_level_ = 0;  bind("energyLevel_",&energy_level_);  bind("alarmLevel_",&alarm_level_);  bind("expended_",&expended_);}int EnergyResource::command(int argc, const char*const* argv){  Tcl& tcl = Tcl::instance();  if (argc == 2) {    if (strcmp(argv[1], "query") == 0) {      double val = EnergyResource::query();      tcl.resultf("%f",val);      return TCL_OK;    }  }  else  if (argc == 3) {    if (strcmp(argv[1], "add") == 0) {      EnergyResource::add(atof(argv[2]));      return TCL_OK;    }    else     if (strcmp(argv[1], "remove") == 0) {      int val = EnergyResource::remove(atof(argv[2]));      tcl.resultf("%s",EnergyResource::resulttostring(val));      return TCL_OK;    }     else    if (strcmp(argv[1], "acquire") == 0) {      double val = EnergyResource::acquire(atof(argv[2]));      tcl.resultf("%f",EnergyResource::resulttostring((int)val));      return TCL_OK;    }   }   return Resource::command(argc, argv);}void EnergyResource::add(double amount){  energy_level_ += amount;}int EnergyResource::remove(double amount){  double new_level = energy_level_ - amount;  energy_level_ = new_level;  expended_ += amount;  if (new_level < 0)    {      return FAIL;    }  if (new_level < alarm_level_)    {      return ALARM;    }  return SUCCESS;}int EnergyResource::acquire(double amount){  if ((energy_level_ - alarm_level_) < amount)    {      return FAIL;    }  return SUCCESS;}char *EnergyResource::resulttostring(int result){  switch (result)    {    case SUCCESS:      return SUCCESS_STRING;    case FAIL:      return FAIL_STRING;    case ALARM:      return ALARM_STRING;    default:      return NULL;    }  return NULL;}

⌨️ 快捷键说明

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