Function: semantic-brute-find-tag-by-position

semantic-brute-find-tag-by-position is a byte-compiled function defined in find.el.gz.

Signature

(semantic-brute-find-tag-by-position POSITION STREAMORBUFFER &optional NOMEDIAN)

Documentation

Find a tag covering POSITION within STREAMORBUFFER.

POSITION is a number, or marker. If NOMEDIAN is non-nil, don't do the median calculation, and return nil.

Source Code

;; Defined in /usr/src/emacs/lisp/cedet/semantic/find.el.gz
;;; Old Positional Searches
;;
;; Are these useful anymore?
;;
(defun semantic-brute-find-tag-by-position (position streamorbuffer
						     &optional nomedian)
  "Find a tag covering POSITION within STREAMORBUFFER.
POSITION is a number, or marker.  If NOMEDIAN is non-nil, don't do
the median calculation, and return nil."
  (save-excursion
    (if (markerp position) (set-buffer (marker-buffer position)))
    (let* ((stream (if (bufferp streamorbuffer)
		       (with-current-buffer streamorbuffer
			 (semantic-fetch-tags))
		     streamorbuffer))
	   (prev nil)
	   (found nil))
      (while (and stream (not found))
	;; perfect fit
	(if (and (>= position (semantic-tag-start (car stream)))
		 (<= position (semantic-tag-end (car stream))))
	    (setq found (car stream))
	  ;; Median between to objects.
	  (if (and prev (not nomedian)
		   (>= position (semantic-tag-end prev))
		   (<= position (semantic-tag-start (car stream))))
	      (let ((median (/ (+ (semantic-tag-end prev)
				  (semantic-tag-start (car stream)))
			       2)))
		(setq found
		      (if (> position median)
			  (car stream)
			prev)))))
	;; Next!!!
	(setq prev (car stream)
	      stream (cdr stream)))
      found)))