Skip to content
Snippets Groups Projects
Forked from NiranV / Black Dragon Viewer
Source project has a limited visibility.
  • Nat Goodspeed's avatar
    71b593e8
    MAINT-6584: Streamline static LLImageJ2C implementation API. · 71b593e8
    Nat Goodspeed authored
    Specifically, remove unused function pointer types CreateLLImageJ2CFunction,
    DestroyLLImageJ2CFunction and EngineInfoLLImageJ2CFunction.
    
    Also eliminate static fallbackDestroyLLImageJ2CImpl() and
    fallbackEngineInfoLLImageJ2CImpl(), leaving only static
    fallbackCreateLLImageJ2CImpl().
    
    We do need a factory function to instantiate the appropriate LLImageJ2CImpl
    subclass, so leave the fallbackCreateLLImageJ2CImpl() link seam in place.
    
    However, given that every known LLImageJ2CImpl subclass is cheap to
    instantiate, make getEngineInfo() a pure virtual method on that subclass: the
    static LLImageJ2C::getEngineInfo() method can temporarily construct an
    instance to query. While we're at it, make getEngineInfo() return std::string
    like LLImageJ2C::getEngineInfo(). It's ridiculous that
    fallbackEngineInfoLLImageJ2CImpl() implementations constructed a static
    std::string and returned its c_str(), only to have LLImageJ2C::getEngineInfo()
    construct ANOTHER std::string from the returned const char*.
    
    fallbackDestroyLLImageJ2CImpl() never did anything useful: it merely deleted
    the passed LLImageJ2CImpl subclass pointer as the specific subclass type. But
    since LLImageJ2CImpl's destructor is virtual, LLImageJ2C's destructor could
    simply delete the stored LLImageJ2CImpl*. In fact, make mImpl a
    boost::scoped_ptr<LLImageJ2CImpl> so we don't even have to delete it manually.
    71b593e8
    History
    MAINT-6584: Streamline static LLImageJ2C implementation API.
    Nat Goodspeed authored
    Specifically, remove unused function pointer types CreateLLImageJ2CFunction,
    DestroyLLImageJ2CFunction and EngineInfoLLImageJ2CFunction.
    
    Also eliminate static fallbackDestroyLLImageJ2CImpl() and
    fallbackEngineInfoLLImageJ2CImpl(), leaving only static
    fallbackCreateLLImageJ2CImpl().
    
    We do need a factory function to instantiate the appropriate LLImageJ2CImpl
    subclass, so leave the fallbackCreateLLImageJ2CImpl() link seam in place.
    
    However, given that every known LLImageJ2CImpl subclass is cheap to
    instantiate, make getEngineInfo() a pure virtual method on that subclass: the
    static LLImageJ2C::getEngineInfo() method can temporarily construct an
    instance to query. While we're at it, make getEngineInfo() return std::string
    like LLImageJ2C::getEngineInfo(). It's ridiculous that
    fallbackEngineInfoLLImageJ2CImpl() implementations constructed a static
    std::string and returned its c_str(), only to have LLImageJ2C::getEngineInfo()
    construct ANOTHER std::string from the returned const char*.
    
    fallbackDestroyLLImageJ2CImpl() never did anything useful: it merely deleted
    the passed LLImageJ2CImpl subclass pointer as the specific subclass type. But
    since LLImageJ2CImpl's destructor is virtual, LLImageJ2C's destructor could
    simply delete the stored LLImageJ2CImpl*. In fact, make mImpl a
    boost::scoped_ptr<LLImageJ2CImpl> so we don't even have to delete it manually.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.