Skip to content

Commit 7dd452f

Browse files
committed
Remove duplicate properties from output
1 parent f7e5b49 commit 7dd452f

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

source/das2/producer.d

+14-2
Original file line numberDiff line numberDiff line change
@@ -942,6 +942,18 @@ struct Frame {
942942

943943
/* Writing Stream Headers ************************************************** */
944944

945+
private ubyte[] _propEncode(StreamFmt SF)(auto ref Property[] pProp)
946+
{
947+
// First write the properties as an associative array, that way duplicates
948+
// are removed.
949+
string[string] mProps;
950+
foreach(ref prop; pProp)
951+
mProps[prop.name] = prop.toString!SF();
952+
953+
ubyte[] pEnc = mProps.values.join("\n ").dup.r;
954+
return pEnc;
955+
}
956+
945957
void writeStreamHeader(StreamFmt SF)(
946958
ref Appender!(ubyte[]) buf, auto ref Property[] pProp, auto ref Frame[] pFrame
947959
){
@@ -955,7 +967,7 @@ void writeStreamHeader(StreamFmt SF)(
955967
pPkt ~= "\n<stream version=\"3.0\" type=\"das-basic-stream\">\n".r;
956968
if(pProp.length > 0){
957969
pPkt ~= " <properties>\n ".r;
958-
pPkt ~= pProp.map!( prop => prop.toString!SF()).join("\n ").r;
970+
pPkt ~= _propEncode!SF(pProp);
959971
pPkt ~= "\n </properties>\n".r;
960972
}
961973
foreach(ref frame; pFrame)
@@ -966,7 +978,7 @@ void writeStreamHeader(StreamFmt SF)(
966978
}
967979
else {
968980
pPkt ~= "<stream version=\"2.2\" >\n <properties\n ".r;
969-
pPkt ~= pProp.map!( prop => prop.toString!SF()).join("\n ").r;
981+
pPkt ~= _propEncode!SF(pProp);
970982
pPkt ~= "\n />\n";
971983
/* Hey man, no frames in das2.2...
972984
foreach(ref frame; pFrame)

0 commit comments

Comments
 (0)