[flext] Strange inherited behavior
Spencer Russell
spencer.f.russell at gmail.com
Fri Feb 11 06:09:13 CET 2011
Never mind.
Turns out my byteReverse function wasn't returning anything at all.
Strangely it worked fine in a separate test application I built on top
of the same library. Not sure if it's due to different optimization or
what.
Thanks anyways!
-spencer
On Thu, Feb 10, 2011 at 11:51 PM, Spencer Russell
<spencer.f.russell at gmail.com> wrote:
> I'm not sure if the problem I'm having stems from my lack of C++
> knowledge(I'm more of an embedded C developer), or something that
> Flext is doing specifically, so I thought I'd start here.
>
> I'm writing a C++ library to interface with the Snyderphonics Manta
> (www.snyderphonics.com), and writing a Flext object on top of that
> library.
>
> So my library provides a Manta class that has methods like SetPadLED,
> SetPadLEDRow, SetPadLEDColumn, etc. It also has pure virtual functions
> like PadEvent, which are called by the library when events happen, so
> the idea is that to use the library you subclass the Manta object and
> implement the event handling functions.
>
> So my flext object inherits both form Manta and from flext_base, and
> so far it's working pretty well.
>
> The issue I'm having is that there's a private static
> method(byteReverse()) of the Manta class that's called from a public
> method(SetPadLEDRow), and for some reason when I call
> Manta::SetPadLEDRow() from a method of my "manta" class (the flext
> object), SetPadLEDRow is being called, but byteReverse is always
> returning 0, for some reason. It's bizarre. I've tried making
> byteReverse non-static and also protected instead of private, and it
> doesn't seem to work.
>
> The code is at http://gitorious.org/libmanta/libmanta/commits/master,
> but I've reproduced the general structure below (minus all the flext
> callback stuff, and a bunch more methods):
>
> class Manta
> {
> public:
> void SetPadLEDRow(LEDState state, int id, uint8_t mask);
> private:
> static uint8_t byteReverse(uint8_t inByte);
> uint8_t LEDMask[6];
> }
>
> class manta : public Manta, public flext_base
> {
> protected:
> void SetPadLEDRow(t_symbol *state, int id, int mask);
> }
>
> // This function is set up to be called from incoming "row" messages
> void manta::SetPadLEDRow(t_symbol *state, int id, int mask)
> {
> LEDState parsedState = stateFromSymbol(state);
> Manta::SetPadLEDRow(parsedState, id, mask);
> }
>
> void Manta::SetPadLEDRow(LEDState state, int id, uint8_t mask)
> {
> LEDMask[id] = byteReverse(mask);
> // this function is definitely being called from manta::SetPadLEDRow,
> // but byteReverse returns zero
> }
>
> Thanks for any help!
>
> -spencer
>
More information about the flext
mailing list