Skip to content

Instantly share code, notes, and snippets.

@slwu89
Last active July 24, 2018 22:57
Show Gist options
  • Save slwu89/e8fc6ae18603186ed75b6ea4f2aeea9b to your computer and use it in GitHub Desktop.
Save slwu89/e8fc6ae18603186ed75b6ea4f2aeea9b to your computer and use it in GitHub Desktop.
mgdrive releases without reallocating memory
//
// main.cpp
// main_only_test
//
// Created by Sean Wu on 7/24/18.
// Copyright © 2018 Sean Wu. All rights reserved.
//
#include <iostream>
#include <memory>
#include <vector>
/* release class */
class release {
public:
/* constructor and destructor */
release(const int release_pop_, const int release_time_) : release_pop(release_pop_), release_time(release_time_), egg_flag(false), release_flag(false) {};
~release() = default;
/* data members */
int release_pop;
int release_time;
bool egg_flag; /* for egg releases, need to seperate release into egg stage and adult stage */
bool release_flag; /* have i been released yet */
/* delete copy constructor/assignment operator, default move constructor/assignment operator */
release(const release&) = delete;
release& operator=(const release&) = delete;
release(release&&) = default;
release& operator=(release&&) = default;
};
using r_ptr = std::unique_ptr<release>;
int main(int argc, const char * argv[]) {
std::vector<r_ptr> releases;
releases.emplace_back(std::make_unique<release>(5,50));
releases.emplace_back(std::make_unique<release>(5,40));
releases.emplace_back(std::make_unique<release>(5,30));
releases.emplace_back(std::make_unique<release>(5,20));
releases.emplace_back(std::make_unique<release>(5,10));
releases.emplace_back(std::make_unique<release>(5,5));
releases.emplace_back(std::make_unique<release>(5,2));
releases.emplace_back(std::make_unique<release>(5,1));
std::cout << " prior to simulation, checking releases " << std::endl;
for(auto& it: releases){
std::cout << "release at: " << it->release_time << " with flag: " << it->release_flag << " --- \n";
};
/* test adult releases */
std::cout << "run 'simulation' for adult release schedule" << std::endl;
for(size_t i=0; i <= 60; i++){
std::cout <<"i: " << i << "\n ";
/* check releases */
auto it = releases.rbegin();
while(it != releases.rend()){
if((!(*it)->release_flag) && ((*it)->release_time <= i)){
std::cout <<"i: " << i << ", ";
std::cout << "adult release is good! flag: " << (*it)->release_flag << ", time: " << (*it)->release_time << "\n";
(*it)->release_flag = true;
std::cout << "firing release\n";
break;
}
++it;
}
}
std::cout << std::endl; /* flush console */
/* test egg releases */
for(auto& it : releases){
it->release_flag = false;
}
std::cout << "run 'simulation' for egg release schedule" << std::endl;
int aqua(5); /* duration of aqua stages */
for(size_t i=0; i < 60; i++){
std::cout <<"i: " << i << "\n ";
/* release into eggs */
auto it = releases.rbegin();
while(it != releases.rend()){
if((!(*it)->egg_flag) && ((*it)->release_time <= i)){
std::cout <<"i: " << i << ", ";
std::cout << "egg release to eggs is good! flag: " << (*it)->release_flag << ", time: " << (*it)->release_time << "\n";
(*it)->egg_flag = true;
std::cout << "firing release\n";
break;
}
++it;
}
/* release into adults */
it = releases.rbegin();
while(it != releases.rend()){
if((*it)->egg_flag && (!(*it)->release_flag) && ((*it)->release_time + aqua <= i)){
std::cout <<"i: " << i << ", ";
std::cout << "egg release to adults is good! flag: " << (*it)->release_flag << ", time: " << (*it)->release_time << "\n";
(*it)->release_flag = true;
std::cout << "firing release\n";
break;
}
++it;
}
}
std::cout << std::endl; /* flush console */
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment