Git Product home page Git Product logo

starry-night's Introduction

linux c++基础库

Build Status Release License

  • header only,易于接入,直接在你的代码中引入相应的头文件即可使用
  • 支持macos和linux两个平台
  • 部分c++11(具体见 chef_env.hpp)支持使用libboost替换,所以大部分模块兼容非c++11的低版本编译器

已完成模块

下表中依赖这一列:nope表示无任何依赖,chef_env表示需要使用c++11或libboost,c++11表示必须依赖c++11

模块名称 依赖 功能描述
chef_buffer.hpp nope FIFO的流式buffer,支持自动扩容、收缩,供生产和消费长度不固定的场景使用(例如tcp的读写buffer)
chef_filepath_op.hpp nope 文件、文件夹常用操作帮助函数集合
chef_strings_op.hpp nope std::string常用操作帮助函数集合
chef_lru.hpp nope 固定大小的LRU cache,支持插入,查询,以及获取全量列表
chef_os_exec_op.hpp nope 执行shell命令
chef_crypto_md5_op.hpp nope md5加密
chef_crypto_sha1_op.hpp nope sha1加密
chef_encoding_base64_op.hpp nope base64编码、解码
chef_noncopyable.hpp nope 禁用拷贝构造等函数
chef_stringify_stl.hpp nope 字符串化stl容器
chef_env.hpp chef_env c++11和libboost功能相同部分的wrapper。通过增加一层接入层,使上层代码仅需通过一个宏开关就可以自由切换使用c++11或libboost
chef_defer.hpp chef_env 类似golang defer,支持c goto清理等场景
chef_wait_event_counter.hpp chef_env 阻塞等待1~N个事件发生。也可选择设置超时时间,超时后不再阻塞。使用者不用关心条件变量、锁等线程同步实现的细节
chef_task_thread.hpp chef_env 开启一个线程,可以往里面持续添加异步任务,任务串行执行,且执行顺序与添加顺序一致。支持添加延时任务。任务可以是业务方的任意函数(通过bind/function实现)。
chef_thread_group.hpp chef_env 线程池,添加异步任务时支持 指定线程号 和 池内自动调度 两种方式。指定线程号方式将任务按业务方自身需求分类打到固定线程中执行。池内自动调度方式支持round-robin轮转循环,随机,当前最空闲(即未完成任务数最少)线程三种方式。
chef_thread_pool.hpp chef_env 线程池,池中的空闲线程抢占式执行加入的任务。适用于任务不要求强顺序性执行的场景。
chef_count_dump.hpp chef_env 在各种线程模型下高效的对多个tag进行计数(打点)。并支持定时将计数落盘
chef_hash.hpp c++11 利用变参模板和std::hash实现的万能哈希。可通过多种类型的多个变量组合生成哈希值

声明,内部实现拷贝自第三方工程的代码

src/base/chef_crypto_md5_op.hpp      https://github.com/zaphoyd/websocketpp/blob/master/websocketpp/common/md5.hpp
src/base/chef_crypto_sha1_op.h       https://github.com/antirez/redis/releases/tag/3.2.9 中src/sha1.h和src/sha1.c
src/base/chef_encoding_base64_op.hpp https://github.com/zaphoyd/websocketpp/blob/master/websocketpp/base64/base64.hpp

项目文件树

src/                          ......代码根目录
  base/                       ......基础库代码
    [chef_xxx.hpp ...]        ......header only的接口文件,业务方直接包含头文件即可使用,每个头文件头部都有简单的功能说明。
    .unfinished/              ......等待被整理的代码
    .wrapper/                 ......一些对第三方代码的封装,由于目前starry-night定位于header only且不依赖第三方,所以暂时隐藏这部分内容,不直接提供给业务方使用
      chef_http_op.hpp[_impl] ......对libcurl的封装,同步阻塞式完成http get/post
      chef_log.hpp[_impl]     ......对libboost log的封装,近乎零配置,快速使用
      compress_zlib_op.h[.cc] ......对zlib压缩、解压缩操作的封装
  base_test/                  ......基础库测试代码
third_party/                  ......第三方依赖库
.gitignore                    ......
.travis.yml                   ......
LINCENSE                      ......
README.md                     ......
SConstruct                    ......scons编译脚本
ut.sh                         ......执行测试代码脚本

我的环境

gcc version 4.9.2 20150212 (Red Hat 4.9.2-6) (GCC)
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)

OS X EI Capitan 10.11.6 Apple LLVM version 8.0.0 (clang-800.0.42.1)

编译

# linux和macos,需要先安装scons编译工具,然后运行scons即可
$scons

starry-night's People

Contributors

q191201771 avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.