trustwood第三章——NerveTissue的引入

春过,夏至,何时,何地,善哉。播德种,扎德根,生德花,赚德果。易行,即以点滴力行,多积德之事,前往后来者,则无我(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值