Skip to main content
deleted 1 character in body
Source Link
Matthieu M.
  • 6.4k
  • 1
  • 21
  • 34

Why don't you make button.show() simply do an early exit if the visibility state being passed in is already the same? I'm surprised it doesn't already work this way.

void Button::show(bool visibilevisible) {
    if (visible == _currentVisibility) {
        return;
    }
    // complicated CPU intensive logic below
    _currentVisibility = visible;
}

Then you can skip all these variable checks and say:

void Update()
{
    handleInputEvents();
    button.show(bShow);
}

Can't change the Button control? Make a wrapper or use inheritance

class ButtonWrapper : public Button {
    std::optional<bool> _visibility;
    void ShowFast(bool visibility) {
        if (_visibility.hasValue() && *_visibility == visibility) {
            return
        }
        show(visibility);
        *_visibility = visibility;
    }
}

Or

class ButtonWrapper {
    std::optional<bool> _visibility;
    Button* _b;
public:
    ButtonWrapper(Button *b) : _b(b) {}
    void ShowFast(bool visibility) {
        if (_visibility.hasValue() && *_visibility == visibility) {
            return
        }
        _b->show(visibility);
        *_visibility = visibility;
    }
}

Why don't you make button.show() simply do an early exit if the visibility state being passed in is already the same? I'm surprised it doesn't already work this way.

void Button::show(bool visibile) {
    if (visible == _currentVisibility) {
        return;
    }
    // complicated CPU intensive logic below
    _currentVisibility = visible;
}

Then you can skip all these variable checks and say:

void Update()
{
    handleInputEvents();
    button.show(bShow);
}

Can't change the Button control? Make a wrapper or use inheritance

class ButtonWrapper : public Button {
    std::optional<bool> _visibility;
    void ShowFast(bool visibility) {
        if (_visibility.hasValue() && *_visibility == visibility) {
            return
        }
        show(visibility);
        *_visibility = visibility;
    }
}

Or

class ButtonWrapper {
    std::optional<bool> _visibility;
    Button* _b;
public:
    ButtonWrapper(Button *b) : _b(b) {}
    void ShowFast(bool visibility) {
        if (_visibility.hasValue() && *_visibility == visibility) {
            return
        }
        _b->show(visibility);
        *_visibility = visibility;
    }
}

Why don't you make button.show() simply do an early exit if the visibility state being passed in is already the same? I'm surprised it doesn't already work this way.

void Button::show(bool visible) {
    if (visible == _currentVisibility) {
        return;
    }
    // complicated CPU intensive logic below
    _currentVisibility = visible;
}

Then you can skip all these variable checks and say:

void Update()
{
    handleInputEvents();
    button.show(bShow);
}

Can't change the Button control? Make a wrapper or use inheritance

class ButtonWrapper : public Button {
    std::optional<bool> _visibility;
    void ShowFast(bool visibility) {
        if (_visibility.hasValue() && *_visibility == visibility) {
            return
        }
        show(visibility);
        *_visibility = visibility;
    }
}

Or

class ButtonWrapper {
    std::optional<bool> _visibility;
    Button* _b;
public:
    ButtonWrapper(Button *b) : _b(b) {}
    void ShowFast(bool visibility) {
        if (_visibility.hasValue() && *_visibility == visibility) {
            return
        }
        _b->show(visibility);
        *_visibility = visibility;
    }
}
Source Link
selbie
  • 195
  • 5

Why don't you make button.show() simply do an early exit if the visibility state being passed in is already the same? I'm surprised it doesn't already work this way.

void Button::show(bool visibile) {
    if (visible == _currentVisibility) {
        return;
    }
    // complicated CPU intensive logic below
    _currentVisibility = visible;
}

Then you can skip all these variable checks and say:

void Update()
{
    handleInputEvents();
    button.show(bShow);
}

Can't change the Button control? Make a wrapper or use inheritance

class ButtonWrapper : public Button {
    std::optional<bool> _visibility;
    void ShowFast(bool visibility) {
        if (_visibility.hasValue() && *_visibility == visibility) {
            return
        }
        show(visibility);
        *_visibility = visibility;
    }
}

Or

class ButtonWrapper {
    std::optional<bool> _visibility;
    Button* _b;
public:
    ButtonWrapper(Button *b) : _b(b) {}
    void ShowFast(bool visibility) {
        if (_visibility.hasValue() && *_visibility == visibility) {
            return
        }
        _b->show(visibility);
        *_visibility = visibility;
    }
}