Artifact 7f6934afced2ee4a73e92ad4b8e29a79059d11c96696abc0d5afdfb5cd4f657b:
- Executable file
r37/lisp/csl/jlisp/LispString.java
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 3351) [annotate] [blame] [check-ins using] [more...]
// // This file is part of the Jlisp implementation of Standard Lisp // Copyright \u00a9 (C) Codemist Ltd, 1998-2000. // import java.io.*; public class LispString extends LispObject { static int stringCount = 0; String string; LispString(String s) { this.string = s; } static StringBuffer sb = new StringBuffer(); void iprint() { String s; if ((currentFlags & printEscape) != 0) s = escapedPrint(); else s = string; if ((currentFlags & noLineBreak) == 0 && currentOutput.column + s.length() > currentOutput.lineLength) currentOutput.println(); currentOutput.print(s); } String escapedPrint() { sb.setLength(0); sb.append("\""); int n = string.indexOf('"'); if (n == -1) sb.append(string); else { int s = 0; while (n != -1) { sb.append(string.substring(s, n+1)); sb.append("\""); s = n+1; n = string.indexOf('"', s); } sb.append(string.substring(s, string.length())); } sb.append("\""); return sb.toString(); } void blankprint() { String s; if ((currentFlags & printEscape) != 0) s = escapedPrint(); else s = string; if ((currentFlags & noLineBreak) == 0 && currentOutput.column + s.length() >= currentOutput.lineLength) currentOutput.println(); else currentOutput.print(" "); currentOutput.print(s); } public boolean lispequals(Object b) { if (!(b instanceof LispString)) return false; return string.equals(((LispString)b).string); } public boolean equals(Object b) { if (!(b instanceof LispString)) return false; return string.equals(((LispString)b).string); } public int lisphashCode() { return string.hashCode(); } public int hashCode() { return string.hashCode(); } void scan() { if (Jlisp.objects.contains(string)) // seen before? { if (!Jlisp.repeatedObjects.containsKey(string)) { Jlisp.repeatedObjects.put( string, Jlisp.nil); // value is junk at this stage } } else Jlisp.objects.add(string); } void dump() throws IOException { Object w = Jlisp.repeatedObjects.get(string); if (w != null && w instanceof Integer) putSharedRef(w); // processed before else { if (w != null) // will be used again sometime { Jlisp.repeatedObjects.put( string, new Integer(Jlisp.sharedIndex++)); Jlisp.odump.write(X_STORE); } // The next line turns the string into bytes using the platform's default // encoding. I would LIKE to use a representation guaranteed to be available // and to behave consistently everywhere... byte [] rep = string.getBytes("UTF8"); int length = rep.length; putPrefix2(length, X_STRn, X_STR); for (int i=0; i<length; i++) { Jlisp.odump.write(rep[i]); } } } private void readObject(ObjectInputStream stream) throws ClassNotFoundException, IOException { stream.defaultReadObject(); stringCount++; } } // end of LispString.java