Optimized CompactByteString.apply methods for the case of empty input

This commit is contained in:
Oliver Schulz 2012-04-24 23:38:48 +02:00
parent 68d073203c
commit a8030b0bf0

View file

@ -353,30 +353,41 @@ object CompactByteString {
/** /**
* Creates a new CompactByteString by copying a byte array. * Creates a new CompactByteString by copying a byte array.
*/ */
def apply(bytes: Array[Byte]): CompactByteString = ByteString.ByteString1C(bytes.clone) def apply(bytes: Array[Byte]): CompactByteString = {
if (bytes.isEmpty) empty
else ByteString.ByteString1C(bytes.clone)
}
/** /**
* Creates a new CompactByteString by copying bytes. * Creates a new CompactByteString by copying bytes.
*/ */
def apply(bytes: Byte*): CompactByteString = { def apply(bytes: Byte*): CompactByteString = {
val ar = new Array[Byte](bytes.size) if (bytes.isEmpty) empty
bytes.copyToArray(ar) else {
CompactByteString(ar) val ar = new Array[Byte](bytes.size)
bytes.copyToArray(ar)
CompactByteString(ar)
}
} }
/** /**
* Creates a new CompactByteString by converting from integral numbers to bytes. * Creates a new CompactByteString by converting from integral numbers to bytes.
*/ */
def apply[T](bytes: T*)(implicit num: Integral[T]): CompactByteString = def apply[T](bytes: T*)(implicit num: Integral[T]): CompactByteString = {
ByteString.ByteString1C(bytes.map(x num.toInt(x).toByte)(collection.breakOut)) if (bytes.isEmpty) empty
else ByteString.ByteString1C(bytes.map(x num.toInt(x).toByte)(collection.breakOut))
}
/** /**
* Creates a new CompactByteString by copying bytes from a ByteBuffer. * Creates a new CompactByteString by copying bytes from a ByteBuffer.
*/ */
def apply(bytes: ByteBuffer): CompactByteString = { def apply(bytes: ByteBuffer): CompactByteString = {
val ar = new Array[Byte](bytes.remaining) if (bytes.remaining < 1) empty
bytes.get(ar) else {
ByteString.ByteString1C(ar) val ar = new Array[Byte](bytes.remaining)
bytes.get(ar)
ByteString.ByteString1C(ar)
}
} }
/** /**
@ -387,8 +398,10 @@ object CompactByteString {
/** /**
* Creates a new CompactByteString by encoding a String with a charset. * Creates a new CompactByteString by encoding a String with a charset.
*/ */
def apply(string: String, charset: String): CompactByteString = def apply(string: String, charset: String): CompactByteString = {
ByteString.ByteString1C(string.getBytes(charset)) if (string.isEmpty) empty
else ByteString.ByteString1C(string.getBytes(charset))
}
/** /**
* Creates a new CompactByteString by copying length bytes starting at offset from * Creates a new CompactByteString by copying length bytes starting at offset from