For posterity, here’s how to initialize a StringStream subclass. It’s a hack, 
but it works, and I don’t believe it’s possible to do any better without API 
changes in the `streams` package.
    
    
    type
        MyStreamClass* = object of StringStreamObj
            myData: int
        MyStream* = ref MyStreamClass
    
    proc newMyStream* (input: sink string ="", myData: int) : MyStream =
        result = MyStream(myData: myData)
        
        # HACK: Initialize MyStream's StringStream base by copying over an 
initialized
        # StringStream. Necessary bc there is no `initStringStream(var 
StringStream)` function.
        var ss = newStringStream(input)
        result.data = ss.data
        result.closeImpl = ss.closeImpl
        result.atEndImpl = ss.atEndImpl
        result.setPositionImpl = ss.setPositionImpl
        result.getPositionImpl = ss.getPositionImpl
        result.readDataStrImpl = ss.readDataStrImpl
        result.readDataImpl = ss.readDataImpl
        result.peekDataImpl = ss.peekDataImpl
        result.writeDataImpl = ss.writeDataImpl
    
    
    Run

Reply via email to