+ * The `name', `id' and `context' pointers will be saved in the cache,
+ * and if the caller frees these pointers the caller is also responsible
+ * of deleting the cache entry. Otherwise the cache will have the freed
+ * pointers stored.
+ *
+ * If the `ret' is non-NULL the created ID Cache entry is returned to