Advertisement
Guest User

Untitled

a guest
Apr 20th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <unistd.h>
  3. #include <vector>
  4. #include <wait.h>
  5. #include <cmath>
  6. #include <chrono>
  7. #include "generationByCubitect/generator.hpp"
  8. #include "generationByCubitect/finders.hpp"
  9. #define USE_SIMD
  10.  
  11. void signalHandler(int signum) {
  12. std::cout << "received SIGTERM " << signum << " on group pid : " << getgid() << std::endl;
  13. kill(-getgid(), SIGKILL);
  14. }
  15.  
  16. void gen(int process) {
  17. initBiomes();
  18. LayerStack g = setupGenerator(MC_1_12);
  19. std::chrono::high_resolution_clock::time_point t1= std::chrono::high_resolution_clock::now();
  20. for (int64_t seed = (4000000000+process * 4000000000); seed < (8000000000 + process * 4000000000); seed++) {
  21. int64_t seed2=seed;
  22. if (seed % 10000 == 0) {
  23. std::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();
  24. std::chrono::duration<double> time_span = std::chrono::duration_cast<std::chrono::duration<double>>(t2 - t1);
  25. std::cout<<"We are on thread "<<process<< " at: "<< seed<<" and it took me "<<time_span.count()<<" seconds."<<std::endl;
  26. }
  27. applySeed(&g, (int64_t) seed);
  28. bool hasJungle = false;
  29. bool hasRoofedForest = false;
  30. bool hasSavanna = false;
  31. bool hasSpruce = false;
  32. int *map = allocCache(&g.layers[g.layerNum - 1], 256, 256);
  33. Pos pos = getSpawn(MC_1_12, &g, map, seed2);
  34. genArea(&g.layers[g.layerNum - 1], map, pos.x -30, pos.z - 30, 60, 60);
  35.  
  36. for (long z = 0; z < 60 * 60; z++) {
  37. int biome = map[z];
  38. if (biome == 21 || biome == 22 || biome == 23)hasJungle = true;
  39. else if (biome == 29)hasRoofedForest = true;
  40. else if (biome == 35 || biome == 36)hasSavanna = true;
  41. else if (biome == 3 || biome == 5 || biome == 19 || biome == 30 || biome == 31 || biome == 32 ||
  42. biome == 33 || biome == 133 || biome == 158 || biome == 160 || biome == 161)
  43. hasSpruce = true;
  44. }
  45.  
  46. if (hasJungle && hasRoofedForest && hasSavanna && hasSpruce)std::cout << "Found good seed : " << seed << ".\n";
  47.  
  48. free(map);
  49. }
  50. freeGenerator(g);
  51. exit(0);
  52.  
  53. }
  54.  
  55. int return_id(std::vector<pid_t> &array) {
  56. int retval = 0;
  57. for (int i = 0; i < (int) array.size(); i++) {
  58. retval += (array[i] > 0 ? 1 : 0) * (int) pow(2, i);
  59. }
  60. return retval;
  61. }
  62.  
  63. void handler(int processes, pid_t pidMain) {
  64. std::vector<pid_t> pids;
  65. switch (processes) {
  66. case 2: {
  67. pid_t pid1 = fork();
  68. pids.push_back(pid1);
  69. break;
  70. }
  71. case 4: {
  72. pid_t pid1 = fork();
  73. pid_t pid2 = fork();
  74. pids.push_back(pid1);
  75. pids.push_back(pid2);
  76. break;
  77. }
  78. case 8: {
  79. pid_t pid1 = fork();
  80. pid_t pid2 = fork();
  81. pid_t pid3 = fork();
  82. pids.push_back(pid1);
  83. pids.push_back(pid2);
  84. pids.push_back(pid3);
  85. break;
  86. }
  87. default: {
  88. processes = 1;
  89. }
  90. }
  91. setpgid(getpid(), pidMain);
  92. gen(return_id(pids));
  93. }
  94.  
  95. int main() {
  96. int processes = 8;
  97. pid_t pidMain = fork();
  98. if (pidMain == 0) {
  99. handler(processes, getppid());
  100. } else {
  101. setpgid(getpid(), getpid());
  102. signal(SIGTERM, signalHandler);
  103. while (waitpid(0, nullptr, WCONTINUED) != -1) {}
  104. }
  105. std::cout << "Done.";
  106. system("pause");
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement