mirror of https://github.com/dnomd343/klotski.git
Dnomd343
1 year ago
6 changed files with 143 additions and 9 deletions
@ -0,0 +1,27 @@ |
|||||
|
#include "klotski.h" |
||||
|
#include "all_cases.h" |
||||
|
|
||||
|
#include <iostream> |
||||
|
#include <future> |
||||
|
|
||||
|
using klotski::cases::AllCases; |
||||
|
using klotski::cases::BasicRanges; |
||||
|
|
||||
|
void all_cases_prebuild() { |
||||
|
BasicRanges::Instance().Build(); |
||||
|
} |
||||
|
|
||||
|
void all_cases_prebuild_async(executor_t executor, notifier_t callback) { |
||||
|
executor([](void *cb) { |
||||
|
all_cases_prebuild(); |
||||
|
((notifier_t)cb)(); |
||||
|
}, (void*)callback); |
||||
|
} |
||||
|
|
||||
|
int is_all_cases_prebuild_available() { |
||||
|
if (BasicRanges::Instance().IsAvailable()) { |
||||
|
return KLOTSKI_TRUE; |
||||
|
} else { |
||||
|
return KLOTSKI_FALSE; |
||||
|
} |
||||
|
} |
@ -0,0 +1,47 @@ |
|||||
|
#ifndef KLOTSKI_H_ |
||||
|
#define KLOTSKI_H_ |
||||
|
|
||||
|
#ifdef __cplusplus |
||||
|
#include <cstdint> |
||||
|
#else |
||||
|
#include <stdint.h> |
||||
|
#endif |
||||
|
|
||||
|
#define KLOTSKI_TRUE 1 |
||||
|
#define KLOTSKI_FALSE 0 |
||||
|
|
||||
|
#define EXTERN extern |
||||
|
|
||||
|
typedef void (*notifier_t)(); |
||||
|
typedef void (*executor_t)(void (*fn)(void*), void *arg); |
||||
|
|
||||
|
#ifdef __cplusplus |
||||
|
extern "C" { |
||||
|
#endif |
||||
|
|
||||
|
/// Execute all_cases pre-build work, blocking until the end of the build. If
|
||||
|
/// the build has been completed, the function will return directly.
|
||||
|
EXTERN void all_cases_prebuild(); |
||||
|
|
||||
|
/// Execute all_cases pre-build work, the function will return directly without
|
||||
|
/// blocking, and will be notified with callback when completed. If the build
|
||||
|
/// has been completed, the parameter function will still be called.
|
||||
|
EXTERN void all_cases_prebuild_async(executor_t executor, notifier_t callback); |
||||
|
|
||||
|
/// Returns the pre-build status of all_cases without any block, value is 0 if
|
||||
|
/// not completed, non-0 otherwise.
|
||||
|
EXTERN int is_all_cases_prebuild_available(); |
||||
|
|
||||
|
//EXTERN void all_cases_build();
|
||||
|
//EXTERN int is_all_cases_available();
|
||||
|
|
||||
|
//extern const uint32_t ALL_CASES_SIZE;
|
||||
|
//EXTERN_FUNC void export_all_cases(uint64_t *buffer);
|
||||
|
|
||||
|
//extern const uint32_t BASIC_RANGES_SIZE;
|
||||
|
//EXTERN_FUNC void export_basic_ranges(uint32_t *buffer);
|
||||
|
#ifdef __cplusplus |
||||
|
} |
||||
|
#endif |
||||
|
|
||||
|
#endif /* KLOTSKI_H_ */ |
@ -1,6 +1,59 @@ |
|||||
#include "klotski.h" |
#include <printf.h> |
||||
|
#include <pthread.h> |
||||
|
#include <stdlib.h> |
||||
|
#include <unistd.h> |
||||
|
#include "core/ffi/klotski.h" |
||||
|
|
||||
|
struct pthread_wrapper_t { |
||||
|
void (*fn)(void*); |
||||
|
void *arg; |
||||
|
}; |
||||
|
|
||||
|
void* pthread_wrapper(void *arg) { |
||||
|
|
||||
|
printf("enter wrapper\n"); |
||||
|
|
||||
|
struct pthread_wrapper_t *kk = (struct pthread_wrapper_t*)arg; |
||||
|
|
||||
|
kk->fn(kk->arg); |
||||
|
|
||||
|
return NULL; |
||||
|
} |
||||
|
|
||||
|
void callback() { |
||||
|
printf("enter callback\n"); |
||||
|
} |
||||
|
|
||||
|
void executor(void(*fn)(void*), void *arg) { |
||||
|
printf("executor receive task\n"); |
||||
|
// fn(arg);
|
||||
|
|
||||
|
struct pthread_wrapper_t *kk = (struct pthread_wrapper_t*)malloc(sizeof(struct pthread_wrapper_t)); |
||||
|
|
||||
|
kk->fn = fn; |
||||
|
kk->arg = arg; |
||||
|
|
||||
|
pthread_t pp; |
||||
|
pthread_create(&pp, NULL, pthread_wrapper, (void*)kk); |
||||
|
|
||||
|
} |
||||
|
|
||||
int main() { |
int main() { |
||||
tmain(); |
printf("prebuild available -> %d\n", is_all_cases_prebuild_available()); |
||||
|
|
||||
|
// printf("prebuild begin\n");
|
||||
|
// all_cases_prebuild();
|
||||
|
// printf("prebuild complete\n");
|
||||
|
|
||||
|
printf("prebuild begin\n"); |
||||
|
all_cases_prebuild_async(executor, callback); |
||||
|
printf("prebuild func exited\n"); |
||||
|
printf("prebuild available -> %d\n", is_all_cases_prebuild_available()); |
||||
|
|
||||
|
printf("start sleep 3s\n"); |
||||
|
sleep(3); |
||||
|
|
||||
|
printf("prebuild available -> %d\n", is_all_cases_prebuild_available()); |
||||
|
|
||||
return 0; |
return 0; |
||||
} |
} |
||||
|
Loading…
Reference in new issue