Support multiple whitespace characters am: bf3bd35ef8 am: 974af37e1d am: e1c10f6e5b

Original change: https://android-review.googlesource.com/c/platform/system/tools/xsdc/+/2038983

Change-Id: I0673d978418ddd0cc1380a2b67c775751f7c5a8a
diff --git a/src/com/android/xsdc/cpp/CppCodeGenerator.java b/src/com/android/xsdc/cpp/CppCodeGenerator.java
index 272a296..e470216 100644
--- a/src/com/android/xsdc/cpp/CppCodeGenerator.java
+++ b/src/com/android/xsdc/cpp/CppCodeGenerator.java
@@ -154,6 +154,7 @@
         parserHeaderFile.printf("#include <optional>\n");
         parserHeaderFile.printf("#include <string>\n");
         parserHeaderFile.printf("#include <vector>\n");
+        parserHeaderFile.printf("#include <sstream>\n");
         if (writer) {
             parserHeaderFile.printf("#include <iostream>\n");
         }
diff --git a/src/com/android/xsdc/cpp/CppSimpleType.java b/src/com/android/xsdc/cpp/CppSimpleType.java
index 282855f..d063ebe 100644
--- a/src/com/android/xsdc/cpp/CppSimpleType.java
+++ b/src/com/android/xsdc/cpp/CppSimpleType.java
@@ -63,15 +63,12 @@
         if (list) {
             expression.append(
                     String.format("%s value;\n", getName()));
-            expression.append(String.format("{\nint base = 0;\n"
-                    + "int found;\n"
-                    + "while(true) {\n"
-                    + "found = raw.find_first_of(\" \", base);\n"
-                    + "value.push_back(%s);\n"
-                    + "if (found == raw.npos) break;\n"
-                    + "base = found + 1;\n"
+            expression.append(String.format("{\n"
+                    + "std::istringstream stream(raw);\n"
+                    + "for(std::string str; stream >> str; ) {\n"
+                    + "    value.push_back(%s);\n"
                     + "}\n",
-                    String.format(rawParsingExpression, "raw.substr(base, found - base)")));
+                    String.format(rawParsingExpression, "str")));
             expression.append("}\n");
         } else {
             expression.append(
diff --git a/tests/resources/attr_group_simple.xml b/tests/resources/attr_group_simple.xml
index 0a14222..fa400f9 100644
--- a/tests/resources/attr_group_simple.xml
+++ b/tests/resources/attr_group_simple.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Student State="CA" city="Mountain View" road="Street 101" list="1 2 3">
+<Student State="CA" city="Mountain View" road="Street 101" list="1  2
+                                                                 3">
     <Name>Jun</Name>
 </Student>