I'm still struggling to identify the design goals here.
Indirecting calls via a CCSContextInterface member pointer gives the capability to change the implementation of individual functions on an instance by instance basis. Is this needed? Or just a seam for testing? If the latter, then there's no need for objects to carry around a pointer.
I also don't see what the additional indirection through CCSInterfaceTable* is for. The only use is ccsEmptyContextNew which assigns to object_interfaces, but where is it used? And what for?
I'm still struggling to identify the design goals here.
Indirecting calls via a CCSContextInterface member pointer gives the capability to change the implementation of individual functions on an instance by instance basis. Is this needed? Or just a seam for testing? If the latter, then there's no need for objects to carry around a pointer.
I also don't see what the additional indirection through CCSInterfaceTable* is for. The only use is ccsEmptyContextNew which assigns to object_interfaces, but where is it used? And what for?