The probably simplest method is splitting the asset in two, one for the options and one for the futures.

Sorting and reducing the contracts list should work, although I haven't tested it - just try. For resetting PUT and CALL, simply set C->Type=0. Expiry=0 will probably also work. Class and timestamp are a union of the same struct element. In live trading it's the class, in the backtest it's the timestamp.