/extra/sequences/inserters/inserters.factor

http://github.com/abeaumont/factor · Factor · 44 lines · 34 code · 9 blank · 1 comment · 0 complexity · 2e4e863fc4d72e5ac05e035fb23a5732 MD5 · raw file

  1. ! (c)2010 Joe Groff bsd license
  2. USING: accessors fry growable kernel locals math sequences ;
  3. IN: sequences.inserters
  4. TUPLE: offset-growable { underlying read-only } { offset read-only } ;
  5. C: <offset-growable> offset-growable
  6. INSTANCE: offset-growable virtual-sequence
  7. M: offset-growable length
  8. [ underlying>> length ] [ offset>> ] bi - ; inline
  9. M: offset-growable virtual-exemplar
  10. underlying>> ; inline
  11. M: offset-growable virtual@
  12. [ offset>> + ] [ underlying>> ] bi ; inline
  13. M: offset-growable set-length
  14. [ offset>> + ] [ underlying>> ] bi set-length ; inline
  15. MIXIN: inserter
  16. M: inserter like
  17. nip underlying>> ; inline
  18. M: inserter new-resizable
  19. [ drop 0 ] dip new-sequence ; inline
  20. M: inserter length
  21. drop 0 ; inline
  22. TUPLE: appender { underlying read-only } ;
  23. C: <appender> appender
  24. INSTANCE: appender inserter
  25. M:: appender new-sequence ( len inserter -- sequence )
  26. inserter underlying>> :> underlying
  27. underlying length :> old-length
  28. old-length len + :> new-length
  29. new-length underlying set-length
  30. underlying old-length <offset-growable> ; inline
  31. TUPLE: replacer { underlying read-only } ;
  32. C: <replacer> replacer
  33. INSTANCE: replacer inserter
  34. M: replacer new-sequence
  35. underlying>> [ set-length ] keep ; inline