Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | None | 0 0
  1. FUNCTOR: specialized-array ( T -- ) [[
  2.  
  3. USING: accessors alien alien.c-types alien.data byte-arrays
  4. classes kernel math math.vectors parser prettyprint.custom
  5. sequences sequences.private specialized-arrays
  6. specialized-arrays.private ;
  7.  
  8. TUPLE: ${T}-array
  9. { underlying c-ptr read-only }
  10. { length array-capacity read-only } ; final
  11.  
  12. : <direct-${T}-array> ( alien len -- specialized-array ) ${T}-array boa ; inline
  13.  
  14. M: ${T}-array direct-like drop <direct-${T}-array> ; inline
  15.  
  16. : <${T}-array> ( n -- specialized-array )
  17. [ \ ${T} <underlying> ] keep <direct-${T}-array> ; inline
  18.  
  19. : (${T}-array) ( n -- specialized-array )
  20. [ \ ${T} (underlying) ] keep <direct-${T}-array> ; inline
  21.  
  22. M: ${T}-array clone [ underlying>> clone ] [ length>> ] bi <direct-${T}-array> ; inline
  23.  
  24. M: ${T}-array length length>> ; inline
  25.  
  26. M: ${T}-array nth-unsafe underlying>> \ ${T} alien-element ; inline
  27.  
  28. M: ${T}-array nth-c-ptr underlying>> \ ${T} array-accessor drop swap <displaced-alien> ; inline
  29.  
  30. M: ${T}-array set-nth-unsafe underlying>> \ ${T} set-alien-element ; inline
  31.  
  32. M: ${T}-array like drop dup ${T}-array instance? [ \ ${T} >c-array ] unless ; inline
  33.  
  34. M: ${T}-array new-sequence drop (${T}-array) ; inline
  35.  
  36. M: ${T}-array equal? over ${T}-array instance? [ sequence= ] [ 2drop f ] if ;
  37.  
  38. M: ${T}-array resize
  39. [
  40. [ \ ${T} heap-size * ] [ underlying>> ] bi*
  41. resize-byte-array
  42. ] [ drop ] 2bi
  43. <direct-${T}-array> ; inline
  44.  
  45. M: ${T}-array element-size drop \ ${T} heap-size ; inline
  46.  
  47. M: ${T}-array underlying-type drop \ ${T} ;
  48. <<
  49. SYNTAX: ${T}-array{ \ } [ \ ${T} >c-array ] parse-literal ;
  50. >>
  51. M: ${T}-array pprint-delims drop \ ${T}-array{ \ } ;
  52.  
  53. M: ${T}-array >pprint-sequence ;
  54.  
  55. INSTANCE: ${T}-array specialized-array
  56.  
  57. M: ${T}-array vs+ [ + \ ${T} c-type-clamp ] 2map ; inline
  58. M: ${T}-array vs- [ - \ ${T} c-type-clamp ] 2map ; inline
  59. M: ${T}-array vs* [ * \ ${T} c-type-clamp ] 2map ; inline
  60.  
  61. M: ${T}-array v*high [ * \ ${T} heap-size neg shift ] 2map ; inline
  62. ]]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement