anchor.diff:             nil))
       (loop until (char-in-arr)
          do (next-char buffer))))
  -
  -(defun skip-spaces (buffer)
  -  "Skips spaces, tabs and newlines until a non-space character has been found"
  -  (when +do-skip-spaces+
  -    (loop while (find (current-char buffer) +space-characters+ :test #'eql)
  -       do (next-char buffer))))
  -(define-compiler-macro skip-spaces (&whole whole buffer)
  -  (declare (ignore buffer))
  -  (when +do-skip-spaces+
  -    whole))
  -
  -;; (defmacro skip-spaces (buffer)
  -;;   (declare (ignore buffer))
  -;;   nil)
   
   (defun subseq-until (buffer char-arr)
     "Returns a subsequence of stream, reading everything before a character belonging to char-arr is found.  The character which was found is not read from the buffer"
  
positive.code:  See #'parse for the normal variant.
   See #'build-key-container for a way to build new keyword containers."
    (let ((buffer (build-buffer json-string)))
      (skip-spaces buffer)
      (read-partial-object buffer container)))
  
  (defun parse (string &rest keywords-to-read)
    "Reads a json object from the given string, with the given keywords being the keywords which are fetched from the object.
   All parse functions assume <string> is not an empty json object.  (string/= string \"{}\")"
    (let ((buffer (build-buffer string)))
      (skip-spaces buffer)
      (if keywords-to-read
  	(read-partial-object buffer (apply #'build-character-tree keywords-to-read))
  	(read-value buffer))))
  
negative.code: ;;;; buffer support
  ;;;;;;;;;;;;;;;;;;;
  
  (defstruct buffer
    "A string-buffer which is used to operate on the strings
   The use of a string-buffer allows us to read the data in bulk, and to operate on it, by using simple index manipulations.
  