commit a32eff2e168ada41276dc13979ce7595c977b286
parent b0f0d72de20458e9191a9a22852ea4f41a14b391
Author: Brian Swetland <swetland@frotz.net>
Date: Sun, 7 Aug 2011 05:28:19 -0700
Sonos/SonosItem: avoid some copies during callbacks
Diffstat:
2 files changed, 21 insertions(+), 15 deletions(-)
diff --git a/net/frotz/sonos/Sonos.java b/net/frotz/sonos/Sonos.java
@@ -35,6 +35,11 @@ public class Sonos {
name = new XMLSequence();
value = new XMLSequence();
item = new SonosItem();
+ item.title = new XMLSequence();
+ item.artist = new XMLSequence();
+ item.album = new XMLSequence();
+ item.idURI = new XMLSequence();
+ item.playURI = new XMLSequence();
rpc = new SoapRPC(host, 1400);
@@ -229,6 +234,7 @@ public class Sonos {
break;
}
} while (n < total);
+ cb.updateDone(_id);
}
int processBrowseResults(XML result, int n, String _id, SonosListener cb) throws XML.Oops {
SonosItem item = this.item;
@@ -242,7 +248,7 @@ public class Sonos {
String thing;
n++;
item.reset();
- item.idURI = result.getAttr("id").copy();
+ item.idURI.init(result.getAttr("id"));
try {
result.open("item");
thing = "item";
@@ -252,19 +258,19 @@ public class Sonos {
}
while (result.tryRead(name,value)) {
if ("dc:title".contentEquals(name)) {
- item.title = value.unescape().copy();
+ item.title.init(value.unescape());
continue;
}
if ("dc:creator".contentEquals(name)) {
- item.artist = value.unescape().copy();
+ item.artist.init(value.unescape());
continue;
}
if ("upnp:album".contentEquals(name)) {
- item.album = value.unescape().copy();
+ item.album.init(value.unescape());
continue;
}
if ("res".contentEquals(name)) {
- item.playURI = value.unescape().copy();
+ item.playURI.init(value.unescape());
continue;
}
}
diff --git a/net/frotz/sonos/SonosItem.java b/net/frotz/sonos/SonosItem.java
@@ -2,17 +2,17 @@ package net.frotz.sonos;
public class SonosItem {
- public CharSequence title;
- public CharSequence album;
- public CharSequence artist;
- public CharSequence playURI; /* to enqueue */
- public CharSequence idURI; /* for browse/list */
+ public XMLSequence title;
+ public XMLSequence album;
+ public XMLSequence artist;
+ public XMLSequence playURI; /* to enqueue */
+ public XMLSequence idURI; /* for browse/list */
public void reset() {
- title = null;
- album = null;
- artist = null;
- playURI = null;
- idURI= null;
+ title.adjust(0,0);
+ album.adjust(0,0);
+ artist.adjust(0,0);
+ playURI.adjust(0,0);
+ idURI.adjust(0,0);
}
}