修改一个SQL控制台的心得

1. 把屏幕看作矩阵

        现在已经基本做完了,所以没法改动了。如果一开始能想到这点,会方便很多。

        为输入的每个字符生成坐标,目前最难做的上下左右功能也会变得简单。

        某函数ioctl()可以获取屏幕能容纳的行数和列数。

2.把命令历史视作滚轮

        用两个头对头(入口对入口,也即出口对出口)的栈实现(并不唯一)


class wheel {
public:
    std::string scroll_up() {
        if (up_.empty())
            return std::string();
        down_.push(up_.top());
        up_.pop();
        return up_.empty() ? std::string() : up_.top();
    }
    
    std::string scroll_down() {
        if (down_.empty())
            return std::string();
        up_.push(down_.top());
        down_.pop();
        return up_.top();
    }

    void reset() {
        while (!down_.empty()) {
            up_.push(down_.top());
            down_.pop();
        }
    }

    std::string& top() {
        reset();
        // if up_.empty() raise;
        return up_.top();
    }

    void push(const std::string& page) {
        reset();
        up_.push(page);
    }

    void pop() {
        reset();
        if (!up_.empty()) {
            up_.pop();
        }
    }

private:
    std::stack<std::string> up_;
    std::stack<std::string> down_;
    
};

3.使用无阻塞输入

        做这个东西要么输入时不用缓冲区,要么用键盘监控。

        但是不知道在用终端ssh连接centos时能不能监听键盘事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值