+ public int LineNumber { get { return mLineNumber; } }\r
+\r
+ public bool End { get { return mLineNumber >= mExpectedNumberOfLines; } }\r
+ }\r
+\r
+\r
+ /// <summary>\r
+ /// This class is the actual implementation. The implementation is wrapped\r
+ /// in a subclass because the invoker seems to only be able to invoke public\r
+ /// methods, and this needs to invoke methods that shouldn't be public.\r
+ /// </summary>\r
+ class Impl\r
+ {\r
+ public Impl(ContentReader input)\r
+ {\r
+ mInput = new LineReader(input);\r
+ ReadSectionHeaders();\r
+ PostProcess();\r
+ }\r
+\r
+ public Map GetMap()\r
+ {\r
+ return new Map(mMetadata, mGrid, mEntities);\r
+ }\r
+\r
+\r
+ public void ReadSectionHeaders()\r
+ {\r
+ mMetadata = new Map.Metadata();\r
+\r
+ while (!mInput.End)\r