prd.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include <stdlib.h>
  2. #include <uuid/uuid.h>
  3. #define NIT_SHORT_NAMES
  4. #include <nit/macros.h>
  5. #include <nit/palloc.h>
  6. #include <nit/list.h>
  7. #include "des.h"
  8. #include "cell.h"
  9. #include "pur.h"
  10. #include "frm.h"
  11. #include "fld.h"
  12. #include "prd.h"
  13. Inb_prd *
  14. inb_prd_newf(uuid_t id, Inb_cell *args, Inb_fld *out, Inb_func func)
  15. {
  16. Inb_prd *prd;
  17. Inb_des *des = inb_palloc(prd);
  18. pcheck(prd, NULL);
  19. des->type = PRD;
  20. des->flags = INB_FREE | INB_PRDF;
  21. prd = inb_thing(des);
  22. if (id)
  23. uuid_copy(prd->id, id);
  24. else
  25. uuid_generate(prd->id);
  26. prd->args = args;
  27. prd->out = out;
  28. prd->d.func = func;
  29. return prd;
  30. }
  31. Inb_prd *
  32. inb_prd_newb(uuid_t id, Inb_cell *args, Inb_fld *out, Inb_cell *bod)
  33. {
  34. Inb_prd *prd;
  35. Inb_des *des = inb_palloc(prd);
  36. pcheck(prd, NULL);
  37. des->type = PRD;
  38. des->flags = INB_FREE;
  39. prd = inb_thing(des);
  40. if (id)
  41. uuid_copy(prd->id, id);
  42. else
  43. uuid_generate(prd->id);
  44. prd->args = args;
  45. prd->out = out;
  46. prd->d.bod = bod;
  47. return prd;
  48. }
  49. void *
  50. inb_prd_apply(Inb_prd *prd, Inb_cell *args)
  51. {
  52. if (inb_des(prd)->flags & INB_PRDF)
  53. return prd->d.func(args);
  54. /* work on this! */
  55. return NULL;
  56. }