AAPT2: Add Inline Complex XML support

See: https://developer.android.com/guide/topics/resources/complex-xml-resources.html

Change-Id: I8274c85e25cabf90423141c228697e873167d136
diff --git a/tools/aapt2/io/Data.h b/tools/aapt2/io/Data.h
index 467e604..34eed63 100644
--- a/tools/aapt2/io/Data.h
+++ b/tools/aapt2/io/Data.h
@@ -17,9 +17,9 @@
 #ifndef AAPT_IO_DATA_H
 #define AAPT_IO_DATA_H
 
-#include <utils/FileMap.h>
-
+#include <android-base/macros.h>
 #include <memory>
+#include <utils/FileMap.h>
 
 namespace aapt {
 namespace io {
@@ -35,6 +35,28 @@
     virtual size_t size() const = 0;
 };
 
+class DataSegment : public IData {
+public:
+    explicit DataSegment(std::unique_ptr<IData> data, size_t offset, size_t len) :
+            mData(std::move(data)), mOffset(offset), mLen(len) {
+    }
+
+    const void* data() const override {
+        return static_cast<const uint8_t*>(mData->data()) + mOffset;
+    }
+
+    size_t size() const override {
+        return mLen;
+    }
+
+private:
+    DISALLOW_COPY_AND_ASSIGN(DataSegment);
+
+    std::unique_ptr<IData> mData;
+    size_t mOffset;
+    size_t mLen;
+};
+
 /**
  * Implementation of IData that exposes a memory mapped file. The mmapped file is owned by this
  * object.