基于六边形的jps寻路算法实现
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.6 KiB

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<stdbool.h>
  4. #include<stdatomic.h>
  5. #include<erl_nif.h>
  6. #include "eHJpsAtom.h"
  7. struct NifTraits : public moodycamel::ConcurrentQueueDefaultTraits {
  8. static const size_t BLOCK_SIZE = 16;
  9. static const size_t EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD = 16;
  10. static const size_t EXPLICIT_INITIAL_INDEX_SIZE = 8;
  11. static const size_t IMPLICIT_INITIAL_INDEX_SIZE = 8;
  12. static const size_t INITIAL_IMPLICIT_PRODUCER_HASH_SIZE = 16;
  13. static const std::uint32_t EXPLICIT_CONSUMER_CONSUMPTION_QUOTA_BEFORE_ROTATE = 256;
  14. static inline void *malloc(std::size_t size) { return enif_alloc(size); }
  15. static inline void free(void *ptr) { enif_free(ptr); }
  16. };
  17. using lfqIns = moodycamel::ConcurrentQueue<ErlNifBinary, NifTraits> *;
  18. const size_t BulkDelCnt = 200;
  19. typedef struct Node_r {
  20. bool IsBarrier; // 是否障碍
  21. } Node;
  22. int nifLoad(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info) {
  23. enif_fprintf(stdout, "IMY*************nifload00000\n");
  24. NIF_ATOMS(NIF_ATOM_INIT)
  25. enif_fprintf(stdout, "IMY*************nifload00001\n");
  26. *priv_data = NULL;
  27. return 0;
  28. }
  29. int nifUpgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data, ERL_NIF_TERM load_info) {
  30. *priv_data = *old_priv_data;
  31. enif_fprintf(stdout, "IMY*************nifUpgrade %p %T\n", old_priv_data, load_info);
  32. return 0;
  33. }
  34. void nifUnload(ErlNifEnv* env, void* priv_data) {
  35. enif_fprintf(stdout, "IMY*************nifUnload0000 \n");
  36. return;
  37. }
  38. static ErlNifFunc nifFuns[] = {
  39. };
  40. ERL_NIF_INIT(eQuic, nifFuns, nifLoad, NULL, nifUpgrade, nifUnload)