Fix Linux UI issues introduced by moving llinitparam to llcommon.
In a number of places, the viewer uses a lookup based on std::type_info*. We used to use std::map<std::type_info*, whatever>. But on Linux, &typeid(SomeType) can produce different pointer values, depending on the dynamic load module in which the code is executed. Introduce LLTypeInfoLookup<T>, with an API that deliberately mimics std::map<std::type_info*, T>. LLTypeInfoLookup::find() first tries an efficient search for the specified std::type_info*. But if that fails, it scans the underlying container for a match on the std::type_info::name() string. If found, it caches the new std::type_info* to optimize subsequent lookups with the same pointer. Use LLTypeInfoLookup instead of std::map<std::type_info*, ...> in llinitparam.h and llregistry.h. Introduce LLSortedVector<KEY, VALUE>, a std::vector<std::pair<KEY, VALUE>> maintained in sorted order with binary-search lookup. It presents a subset of the std::map<KEY, VALUE> API.
Showing
- indra/linux_updater/CMakeLists.txt 3 additions, 3 deletionsindra/linux_updater/CMakeLists.txt
- indra/llcommon/CMakeLists.txt 2 additions, 0 deletionsindra/llcommon/CMakeLists.txt
- indra/llcommon/llinitparam.h 4 additions, 3 deletionsindra/llcommon/llinitparam.h
- indra/llcommon/llregistry.h 20 additions, 1 deletionindra/llcommon/llregistry.h
- indra/llcommon/llsortedvector.h 152 additions, 0 deletionsindra/llcommon/llsortedvector.h
- indra/llcommon/lltypeinfolookup.h 112 additions, 0 deletionsindra/llcommon/lltypeinfolookup.h
Loading
Please register or sign in to comment