c++-impl: gen server stub boilerplate

-Lc++-impl now generates a default implementation for all
the interfaces in the specified package. The method
implementations are all left empty.

The default implementation also contains a special function,
HIDL_FETCH_IFOO(), which is used to retrieve an instance of
a particular interface in pass-through mode. For that to work,
the default implementation must live in a shared-library with
a well-known name, eg android.hardware.tests.foo@1.0.impl.so.

Sample invocation:
hidl-gen -o tmp/impl/ -Lc++-impl -randroid.hardware:hardware/interfaces
android.hardware.tests.foo@1.0

Bug: 31228745
Change-Id: I747aa47cb76931eed85179b8131d2efd3f887471
diff --git a/FQName.h b/FQName.h
index 8a0ad30..2fe7963 100644
--- a/FQName.h
+++ b/FQName.h
@@ -77,6 +77,18 @@
     bool operator<(const FQName &other) const;
     bool operator==(const FQName &other) const;
 
+    // the following comments all assume that the FQName
+    // is ::android::hardware::Foo::V1_0::IBar::Baz
+
+    // returns highest type in the hidl namespace, i.e.
+    // ::android::hardware::Foo::V1_0::IBar
+    const FQName getTopLevelType() const;
+
+    // returns an unambiguous fully qualified name which can be
+    // baked into a token, i.e.
+    // android_hardware_Foo_V1_0_IBar_Baz
+    std::string tokenName() const;
+
     // Returns an absolute C++ namespace prefix, i.e.
     // ::android::hardware::Foo::V1_0.
     std::string cppNamespace() const;
@@ -86,14 +98,14 @@
     std::string cppLocalName() const;
 
     // Returns a fully qualified absolute C++ type name, i.e.
-    // ::android::hardware::Foo::V1_0::bar::baz.
+    // ::android::hardware::Foo::V1_0::IBar::Baz.
     std::string cppName() const;
 
     // Returns the java package name, i.e. "android.hardware.Foo.V1_0".
     std::string javaPackage() const;
 
     // Returns the fully qualified java type name,
-    // i.e. "android.hardware.Foo.V1_0.IBar"
+    // i.e. "android.hardware.Foo.V1_0.IBar.Baz"
     std::string javaName() const;
 
     bool endsWith(const FQName &other) const;