in the function getInstance, different instances of SupplementalDataInfo are stored in a map named directory_instance,where the keys are the Supplemental Data directories (in String form). The function will return a previously generated instance if its key exists in the map, otherwise a new one is made and added to the map. However duplicate instances of SupplementalDatainfo exist because there are different ways to represent a directory, for example "cldr\trunk\common\supplemental" is the same as "cldr\trunk\common\main\..\supplemental" and is also the same as "cldr\trunk\common\main/../supplemental/".
Look up the string.
If exists, return.
If there is nothing, canonicalize the file name, then look up again.
If exists, put original-string + result into map, and return.
If there is nothing
Put into the map the original string + result
Put into the map the canonical string + result