[Jython-checkins] jython: Allow BaseBytes in asWritable, add new frombytes to StringUtil.

frank.wierzbicki jython-checkins at python.org
Thu Jun 7 21:18:27 CEST 2012


http://hg.python.org/jython/rev/9777f6d57240
changeset:   6684:9777f6d57240
user:        Frank Wierzbicki <fwierzbicki at gmail.com>
date:        Thu Jun 07 12:18:04 2012 -0700
summary:
  Allow BaseBytes in asWritable, add new frombytes to StringUtil.

Thanks Jeff Allen for frombytes code.

files:
  src/org/python/core/util/StringUtil.java     |  16 +++++++++-
  src/org/python/modules/_fileio/PyFileIO.java |   3 +
  2 files changed, 18 insertions(+), 1 deletions(-)


diff --git a/src/org/python/core/util/StringUtil.java b/src/org/python/core/util/StringUtil.java
--- a/src/org/python/core/util/StringUtil.java
+++ b/src/org/python/core/util/StringUtil.java
@@ -5,6 +5,7 @@
 import java.nio.ByteBuffer;
 
 import org.python.core.Py;
+import org.python.core.BaseBytes;
 
 /**
  * String Utility methods.
@@ -66,7 +67,20 @@
     }
 
     /**
-     * Decapitalize a String if it begins with a capital letter, e.g.:
+     * Return a new String with chars corresponding to b.
+     *
+     * @param b a BaseBytes containing bytes
+     * @return a new String corresponding to the bytes in b
+     */
+    public static String fromBytes(BaseBytes b) {
+
+         int size = b.__len__();
+         StringBuilder buf = new StringBuilder(size);
+         for (int j = 0; j < size; j++)  buf.append((char) b.intAt(j));
+         return buf.toString();
+     }
+
+    /** Decapitalize a String if it begins with a capital letter, e.g.:
      * FooBar -> fooBar
      *
      * @param string a String
diff --git a/src/org/python/modules/_fileio/PyFileIO.java b/src/org/python/modules/_fileio/PyFileIO.java
--- a/src/org/python/modules/_fileio/PyFileIO.java
+++ b/src/org/python/modules/_fileio/PyFileIO.java
@@ -5,6 +5,7 @@
 import java.util.concurrent.Callable;
 
 import org.python.core.ArgParser;
+import org.python.core.BaseBytes;
 import org.python.core.BuiltinDocs;
 import org.python.core.Py;
 import org.python.core.PyArray;
@@ -231,6 +232,8 @@
             return ((PyString) obj).getString();
         } else if (obj instanceof PyArray) {
             return ((PyArray)obj).tostring();
+        } else if (obj instanceof BaseBytes) {
+            return StringUtil.fromBytes((BaseBytes)obj);
         }
         if (message == null) {
             message = String.format("argument 1 must be string or buffer, not %.200s",

-- 
Repository URL: http://hg.python.org/jython


More information about the Jython-checkins mailing list