mirror of
https://github.com/Cubitect/cubiomes.git
synced 2025-09-22 11:04:57 -04:00
Removed POSIX dependence.
This commit is contained in:
parent
5127be24a4
commit
f3243ca3fc
@ -8,6 +8,7 @@
|
|||||||
#include "finders.h"
|
#include "finders.h"
|
||||||
#include "generator.h"
|
#include "generator.h"
|
||||||
|
|
||||||
|
|
||||||
#define SEED_BUF_LEN 0x10000
|
#define SEED_BUF_LEN 0x10000
|
||||||
|
|
||||||
|
|
||||||
@ -16,7 +17,12 @@ struct compactinfo_t
|
|||||||
int64_t seedStart, seedEnd;
|
int64_t seedStart, seedEnd;
|
||||||
};
|
};
|
||||||
|
|
||||||
void *searchCompactBiomesThread(void *data)
|
|
||||||
|
#ifdef USE_PTHREAD
|
||||||
|
static void *searchCompactBiomesThread(void *data)
|
||||||
|
#else
|
||||||
|
static DWORD WINAPI searchCompactBiomesThread(LPVOID data)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
struct compactinfo_t info = *(struct compactinfo_t *)data;
|
struct compactinfo_t info = *(struct compactinfo_t *)data;
|
||||||
|
|
||||||
@ -26,15 +32,15 @@ void *searchCompactBiomesThread(void *data)
|
|||||||
LayerStack g = setupGenerator(MC_1_7);
|
LayerStack g = setupGenerator(MC_1_7);
|
||||||
int *cache = allocCache(&g.layers[L_BIOME_256], 8, 8);
|
int *cache = allocCache(&g.layers[L_BIOME_256], 8, 8);
|
||||||
|
|
||||||
for(s = info.seedStart; s < info.seedEnd; s += SEED_BUF_LEN)
|
for (s = info.seedStart; s < info.seedEnd; s += SEED_BUF_LEN)
|
||||||
{
|
{
|
||||||
if(s + SEED_BUF_LEN > info.seedEnd)
|
if (s + SEED_BUF_LEN > info.seedEnd)
|
||||||
scnt = info.seedEnd - s;
|
scnt = info.seedEnd - s;
|
||||||
else
|
else
|
||||||
scnt = SEED_BUF_LEN;
|
scnt = SEED_BUF_LEN;
|
||||||
|
|
||||||
|
|
||||||
for(i = 0; i < scnt; i++)
|
for (i = 0; i < scnt; i++)
|
||||||
{
|
{
|
||||||
seeds[i] = s + i;
|
seeds[i] = s + i;
|
||||||
}
|
}
|
||||||
@ -44,7 +50,7 @@ void *searchCompactBiomesThread(void *data)
|
|||||||
// The biomes really shouldn't be further out than 1024 blocks.
|
// The biomes really shouldn't be further out than 1024 blocks.
|
||||||
scnt = filterAllMajorBiomes(&g, cache, seeds, seeds, scnt, -4, -4, 8, 8);
|
scnt = filterAllMajorBiomes(&g, cache, seeds, seeds, scnt, -4, -4, 8, 8);
|
||||||
|
|
||||||
for(i = 0; i < scnt; i++)
|
for (i = 0; i < scnt; i++)
|
||||||
{
|
{
|
||||||
printf("%"PRId64"\n", seeds[i]);
|
printf("%"PRId64"\n", seeds[i]);
|
||||||
}
|
}
|
||||||
@ -53,7 +59,10 @@ void *searchCompactBiomesThread(void *data)
|
|||||||
|
|
||||||
free(seeds);
|
free(seeds);
|
||||||
|
|
||||||
return NULL;
|
#ifdef USE_PTHREAD
|
||||||
|
pthread_exit(NULL);
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -64,16 +73,16 @@ int main(int argc, char *argv[])
|
|||||||
int64_t seedStart, seedEnd;
|
int64_t seedStart, seedEnd;
|
||||||
unsigned int threads, t;
|
unsigned int threads, t;
|
||||||
|
|
||||||
if(argc <= 1 || sscanf(argv[1], "%"PRId64, &seedStart) != 1) seedStart = 0;
|
if (argc <= 1 || sscanf(argv[1], "%"PRId64, &seedStart) != 1) seedStart = 0;
|
||||||
if(argc <= 2 || sscanf(argv[2], "%"PRId64, &seedEnd) != 1) seedEnd = 100000000LL;
|
if (argc <= 2 || sscanf(argv[2], "%"PRId64, &seedEnd) != 1) seedEnd = 100000000LL;
|
||||||
if(argc <= 3 || sscanf(argv[3], "%u", &threads) != 1) threads = 1;
|
if (argc <= 3 || sscanf(argv[3], "%u", &threads) != 1) threads = 1;
|
||||||
|
|
||||||
printf("Starting search through seeds %"PRId64 " to %"PRId64", using %u threads.\n", seedStart, seedEnd, threads);
|
printf("Starting search through seeds %"PRId64 " to %"PRId64", using %u threads.\n", seedStart, seedEnd, threads);
|
||||||
|
|
||||||
pthread_t threadID[threads];
|
thread_id_t threadID[threads];
|
||||||
struct compactinfo_t info[threads];
|
struct compactinfo_t info[threads];
|
||||||
|
|
||||||
for(t = 0; t < threads; t++)
|
for (t = 0; t < threads; t++)
|
||||||
{
|
{
|
||||||
int64_t seedCnt = (seedEnd - seedStart) / threads;
|
int64_t seedCnt = (seedEnd - seedStart) / threads;
|
||||||
info[t].seedStart = seedStart + seedCnt * t;
|
info[t].seedStart = seedStart + seedCnt * t;
|
||||||
@ -81,16 +90,29 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
info[threads-1].seedEnd = seedEnd;
|
info[threads-1].seedEnd = seedEnd;
|
||||||
|
|
||||||
for(t = 0; t < threads; t++)
|
#ifdef USE_PTHREAD
|
||||||
|
|
||||||
|
for (t = 0; t < threads; t++)
|
||||||
{
|
{
|
||||||
pthread_create(&threadID[t], NULL, searchCompactBiomesThread, (void*)&info[t]);
|
pthread_create(&threadID[t], NULL, searchCompactBiomesThread, (void*)&info[t]);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(t = 0; t < threads; t++)
|
for (t = 0; t < threads; t++)
|
||||||
{
|
{
|
||||||
pthread_join(threadID[t], NULL);
|
pthread_join(threadID[t], NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
for (t = 0; t < threads; t++)
|
||||||
|
{
|
||||||
|
threadID[t] = CreateThread(NULL, 0, searchCompactBiomesThread, (LPVOID)&info[t], 0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
WaitForMultipleObjects(threads, threadID, TRUE, INFINITE);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
29
finders.c
29
finders.c
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <pthread.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
@ -488,8 +487,11 @@ int countBlocksInSpawnRange(Pos p[4], const int ax, const int ay, const int az)
|
|||||||
return best;
|
return best;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_PTHREAD
|
||||||
static void *search4QuadBasesThread(void *data)
|
static void *search4QuadBasesThread(void *data)
|
||||||
|
#else
|
||||||
|
static DWORD WINAPI search4QuadBasesThread(LPVOID data)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
quad_threadinfo_t info = *(quad_threadinfo_t*)data;
|
quad_threadinfo_t info = *(quad_threadinfo_t*)data;
|
||||||
|
|
||||||
@ -595,14 +597,17 @@ static void *search4QuadBasesThread(void *data)
|
|||||||
fclose(fp);
|
fclose(fp);
|
||||||
free(lowerBits);
|
free(lowerBits);
|
||||||
|
|
||||||
return NULL;
|
#ifdef USE_PTHREAD
|
||||||
|
pthread_exit(NULL);
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void search4QuadBases(const char *fnam, const int threads,
|
void search4QuadBases(const char *fnam, const int threads,
|
||||||
const StructureConfig structureConfig, const int quality)
|
const StructureConfig structureConfig, const int quality)
|
||||||
{
|
{
|
||||||
pthread_t threadID[threads];
|
thread_id_t threadID[threads];
|
||||||
quad_threadinfo_t info[threads];
|
quad_threadinfo_t info[threads];
|
||||||
int64_t t;
|
int64_t t;
|
||||||
|
|
||||||
@ -616,6 +621,9 @@ void search4QuadBases(const char *fnam, const int threads,
|
|||||||
info[t].sconf = structureConfig;
|
info[t].sconf = structureConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef USE_PTHREAD
|
||||||
|
|
||||||
for (t = 0; t < threads; t++)
|
for (t = 0; t < threads; t++)
|
||||||
{
|
{
|
||||||
pthread_create(&threadID[t], NULL, search4QuadBasesThread, (void*)&info[t]);
|
pthread_create(&threadID[t], NULL, search4QuadBasesThread, (void*)&info[t]);
|
||||||
@ -626,6 +634,19 @@ void search4QuadBases(const char *fnam, const int threads,
|
|||||||
pthread_join(threadID[t], NULL);
|
pthread_join(threadID[t], NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
for (t = 0; t < threads; t++)
|
||||||
|
{
|
||||||
|
threadID[t] = CreateThread(NULL, 0, search4QuadBasesThread, (LPVOID)&info[t], 0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
WaitForMultipleObjects(threads, threadID, TRUE, INFINITE);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// merge thread parts
|
// merge thread parts
|
||||||
|
|
||||||
char fnamThread[256];
|
char fnamThread[256];
|
||||||
|
14
finders.h
14
finders.h
@ -4,9 +4,21 @@
|
|||||||
#include "generator.h"
|
#include "generator.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <pthread.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <Windows.h>
|
||||||
|
|
||||||
|
typedef HANDLE thread_id_t;
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define USE_PTHREAD
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
|
typedef pthread_t thread_id_t;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define SEED_BASE_MAX (1LL << 48)
|
#define SEED_BASE_MAX (1LL << 48)
|
||||||
#define PI 3.141592653589793
|
#define PI 3.141592653589793
|
||||||
|
2
layers.h
2
layers.h
@ -46,7 +46,7 @@ enum BiomeType
|
|||||||
|
|
||||||
enum BiomeTempCategory
|
enum BiomeTempCategory
|
||||||
{
|
{
|
||||||
Oceanic, Warm, Lush, Cold, Freezing, Unknown
|
Oceanic, Warm, Lush, Cold, Freezing, UnknownTemp
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
8
makefile
8
makefile
@ -1,7 +1,13 @@
|
|||||||
CC = gcc
|
CC = gcc
|
||||||
LDFLAGS = -lm -pthread
|
override LDFLAGS = -lm
|
||||||
override CFLAGS += -Wall -fwrapv -march=native
|
override CFLAGS += -Wall -fwrapv -march=native
|
||||||
|
|
||||||
|
ifeq ($(OS),Windows_NT)
|
||||||
|
override CFLAGS += -D_WIN32
|
||||||
|
else
|
||||||
|
override LDFLAGS += -lX11 -pthread
|
||||||
|
endif
|
||||||
|
|
||||||
.PHONY : all debug clean
|
.PHONY : all debug clean
|
||||||
|
|
||||||
all: CFLAGS += -O3
|
all: CFLAGS += -O3
|
||||||
|
Loading…
x
Reference in New Issue
Block a user