春过,夏至,何时,何地,善哉。播德种,扎德根,生德花,赚德果。易行,即以点滴力行,多积德之事,前往后来者,则无我(wood)无彩。
做善事,尝善果。
今日新消息,trustwood的新地基
NerveTissue进行引入
神经组织,后面会对神经组织进行分类,如生成或对抗,现在开始打地基,进行基础操作,如判断是否激活(isActive),连接神经元(connect)、添加多层或一层(add),设置过期日期(set)函数功能等
library.h
本次更新所有头文件
#include <functional>
#include <map>
#include <vector>
#include <ctime>
#include <cmath>
#include <chrono>
///神经组织,进行对神经列表为一层次的公共层次的一系列操作
class NerveTissue {
vector<tuple<int,vector<Neuron>,double>> globalFloors = {};
time_t expires_date = 0;
public:
double skills{};
double check{};
void add(const vector<vector<Neuron>>& floors);
void add(const vector<Neuron>& neurons);
static void connect(vector<Neuron> &neurons, map<int,int> connect_map);
void set(int at);
bool isActive(int at);
string description();
NerveTissue() = default;
NerveTissue(double skills, double check);
};
神经组织的api实现。
library.cpp
本次更新所有头文件
#include <iostream>
#include <sstream>
#include "library.h"
///NerveTissue api处
void NerveTissue::add(const vector<vector<Neuron> > &floors) {
for (const auto& floor : floors) {
add(floor);
}
}
void NerveTissue::add(const vector<Neuron> &neurons) {
globalFloors.emplace_back(tuple(globalFloors.size(),neurons,0.0));
}
void NerveTissue::connect(vector<Neuron> &neurons, map<int, int> connect_map) {
for (int i = 0; i < neurons.size(); i++)
if (connect_map[i]) neurons[i].head = *neurons.at(connect_map[i]);
}
void NerveTissue::set(const int at) {
if(expires_date > time(nullptr)) {
skills = 0.0;
globalFloors.clear();
return;
}
double parallel = get<2>(globalFloors[at])+skills;
tie(ignore, get<2>(globalFloors[at])) = std::make_tuple(0, parallel);
expires_date = chrono::system_clock::to_time_t(chrono::system_clock::now() + chrono::seconds(static_cast<int>(round(parallel * 300))));
}
bool NerveTissue::isActive(const int at) {
set(at);
return check <= get<2>(globalFloors[at]);
}
NerveTissue::NerveTissue(const double skills, const double check) {
this->skills = skills;
this->check = check;
}
string NerveTissue::description() {
stringstream ss1;
ss1 << "<NerveTissue [";
int at = 0;
for(auto globalFloor: globalFloors) {
ss1 << "floor(" << get<0>(globalFloor) << ", [";
int index = 0;
for(auto neuron: get<1>(globalFloor)) {
ss1 << neuron.description();
if(index < get<1>(globalFloor).size()-1) ss1 << ", ";
index++;
}
ss1 << "], " << get<2>(globalFloor) << ")";
if(at < globalFloors.size()-1) ss1 << ", ";
at++;
}
ss1 << "], " << skills << ", " << check << ">";
return ss1.str();
}
这次的api生成,上次修改getDescription为description为更简洁的代码服务
测试代码
///主函数入口(运行函数,内部代码将会被c++查找并运行)
int main() {
const string message = "hello world";
auto neuron = Neuron(Any(2), nullptr, MessageType::integer, false);
const auto neuron2 = Neuron(Any(message), *neuron, MessageType::String, true);
auto nerveTissue = NerveTissue(1,1.1);
nerveTissue.add(vector<vector<Neuron>>{{neuron},{neuron2}});/
std::cout << nerveTissue.description() << " " << nerveTissue.isActive(0);
return 0;
}
给大家看看CLion的运行结果
D:\CLionProjects\trustwood\cmake-build-debug\trustwood.exe
<NerveTissue [floor(0, [<Neuron msg=0x1b21c665a38 head=0>], 0), floor(1, [<Neuron msg=hello world head=0x2f54bff8d0>], 0
)], 1, 1.1> 0
Process finished with exit code 0