X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fstring.lisp;h=1bb322b84f6f6e4847d566a386fb2d1e5e57e467;hb=928c6f695253c9f03ff440d18338efb8eea9b2f0;hp=1aa09ace78794dcfd7cdb3017ca422f318107124;hpb=26af6f56fc615a008c3f433265ccecbfce815a61;p=jscl.git diff --git a/src/string.lisp b/src/string.lisp index 1aa09ac..1bb322b 100644 --- a/src/string.lisp +++ b/src/string.lisp @@ -13,24 +13,59 @@ ;; You should have received a copy of the GNU General Public License ;; along with JSCL. If not, see . +(defun stringp (s) + (stringp s)) + +(defun string-length (string) + (storage-vector-size string)) + +(defun make-string (n &key initial-element) + (make-array n :element-type 'character :initial-element initial-element)) + (defun string (x) (cond ((stringp x) x) ((symbolp x) (symbol-name x)) - (t (char-to-string x)))) + (t (make-string 1 :initial-element x)))) (defun string= (s1 s2) - (let ((n (length s1))) + (let* ((s1 (string s1)) + (s2 (string s2)) + (n (length s1))) (when (= (length s2) n) (dotimes (i n t) (unless (char= (char s1 i) (char s2 i)) (return-from string= nil)))))) +(defun string< (s1 s2) + (let ((len-1 (length s1)) + (len-2 (length s2))) + (cond ((= len-2 0) nil) + ((= len-1 0) 0) + (t (dotimes (i len-1 nil) + (when (char< (char s1 i) (char s2 i)) + (return-from string< i)) + (when (and (= i (1- len-1)) (> len-2 len-1)) + (return-from string< (1+ i)))))))) + (define-setf-expander char (string index) (let ((g!string (gensym)) (g!index (gensym)) (g!value (gensym))) - (list (list g!string g!index) - (list string index) - (list g!value) - `(aset ,g!string ,g!index ,g!value) - `(char ,g!string ,g!index)))) + (values (list g!string g!index) + (list string index) + (list g!value) + `(aset ,g!string ,g!index ,g!value) + `(char ,g!string ,g!index)))) + +(defun concatenate-two (string1 string2) + (let* ((len1 (length string1)) + (len2 (length string2)) + (string (make-array (+ len1 len2) :element-type 'character)) + (i 0)) + (dotimes (j len1) + (aset string i (char string1 j)) + (incf i)) + (dotimes (j len2) + (aset string i (char string2 j)) + (incf i)) + string))