Skip to content

Get Started

本文档通过计算一个文档中特定字符数量的 demo 程序来介绍如何使用 Lazy 进行编程。

创建空文件 CountChar.cpp, 并填入以下内容

cpp
#include <algorithm>
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include "async_simple/coro/Lazy.h"
#include "async_simple/coro/SyncAwait.h"

using namespace async_simple::coro;

using Texts = std::vector<std::string>;

Lazy<Texts> ReadFile(const std::string &filename) {
    Texts Result;
    std::ifstream infile(filename);
    std::string line;
    while (std::getline(infile, line))
        Result.push_back(line);
    co_return Result;
}

Lazy<int> CountLineChar(const std::string &line, char c) {
    co_return std::count(line.begin(), line.end(), c);
}

Lazy<int> CountTextChar(const Texts &Content, char c) {
    int Result = 0;
    for (const auto &line : Content)
        Result += co_await CountLineChar(line, c);
    co_return Result;
}

Lazy<int> CountFileCharNum(const std::string &filename, char c) {
    Texts Contents = co_await ReadFile(filename);
    co_return co_await CountTextChar(Contents, c);
}

int main() {
    int Num = syncAwait(CountFileCharNum("file.txt", 'x'));
    std::cout << "The number of 'x' in file.txt is " << Num << "\n";
    return 0;
}

同时执行命令:

base64 /dev/urandom | head -c 10000 > file.txt

这个命令会在 file.txt 中随机生成大小为 10000 字节的文本文件。

之后编译并执行:

clang++ -std=c++20 CountChar.cpp -o CountChar
./CountChar

之后 CountChar 会计算出 file.txtx 的数量。 至此,我们就完成了一个使用协程计算文本字符数量的程序了。

使用自带的 CountChar Example

CountChar Example 可在 async_simple/demo_example 中找到。在构建之后,在 build 目录中执行:

./demo_example/CountChar

即可运行该 example。

This website is released under the MIT License.