This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a change to branch develop
in repository https://gitbox.apache.org/repos/asf/tsfile.git
omit c2eb00d5 Cpp tsfile-lib
This update removed existing revisions from the reference, leaving the
reference pointing at a previous point in the repository history.
* -- * -- N refs/heads/develop (b956d4ca)
\
O -- O -- O (c2eb00d5)
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
No new revisions were added by this update.
Summary of changes:
.github/workflows/unit-test.yml | 12 +-
.gitignore | 6 -
cpp/.clang-format | 226 --
cpp/.gitignore | 7 -
cpp/CMakeLists.txt | 129 +-
cpp/README.md | 79 -
cpp/bench_mark/CMakeLists.txt | 33 -
cpp/bench_mark/bench_mark_src/CMakeLists.txt | 57 -
cpp/bench_mark/bench_mark_src/bench_conf.h | 26 -
cpp/bench_mark/bench_mark_src/bench_mark.cc | 161 -
cpp/bench_mark/bench_mark_src/bench_mark.h | 18 -
cpp/bench_mark/build.sh | 50 -
cpp/build-utils/source-bundle-descriptor.xml | 36 +
cpp/build.sh | 142 -
cpp/cmake/build_function.cmake | 34 -
cpp/cmake/cmake_config.h | 19 -
cpp/cmake/config.h.in | 1 -
.../client/config.js => cpp/common/CMakeLists.txt | 40 +-
.../TypeEnum.java => cpp/common/include/common.hpp | 24 +-
.../TypeEnum.java => cpp/common/src/common.cpp | 23 +-
.../common/test/common_test.cpp | 9 +-
cpp/examples/CMakeLists.txt | 69 +-
cpp/examples/build.sh | 32 -
cpp/examples/c_examples/CMakeLists.txt | 22 -
cpp/examples/c_examples/c_examples.c | 134 -
cpp/examples/c_examples/c_examples.h | 32 -
cpp/examples/cpp_examples/CMakeLists.txt | 22 -
cpp/examples/cpp_examples/cpp_examples.h | 32 -
cpp/examples/cpp_examples/demo_read.cpp | 101 -
cpp/examples/cpp_examples/demo_write.cpp | 55 -
cpp/examples/examples.cc | 31 -
.../examples/include/example.hpp | 9 +-
.../examples/src/example.cpp | 18 +-
cpp/pom.xml | 94 +-
cpp/src/CMakeLists.txt | 55 -
cpp/src/common/CMakeLists.txt | 35 -
cpp/src/common/allocator/CMakeLists.txt | 26 -
cpp/src/common/allocator/alloc_base.h | 131 -
cpp/src/common/allocator/byte_stream.h | 1109 -------
cpp/src/common/allocator/mem_alloc.cc | 253 --
cpp/src/common/allocator/my_string.h | 144 -
cpp/src/common/allocator/object_pool.h | 110 -
cpp/src/common/allocator/page_arena.cc | 65 -
cpp/src/common/allocator/page_arena.h | 101 -
cpp/src/common/allocator/stl_allocator.h | 90 -
cpp/src/common/allocator/util_define.h | 152 -
cpp/src/common/config/CMakeLists.txt | 20 -
cpp/src/common/config/config.h | 70 -
cpp/src/common/container/CMakeLists.txt | 22 -
cpp/src/common/container/array.h | 305 --
cpp/src/common/container/bit_map.cc | 45 -
cpp/src/common/container/bit_map.h | 83 -
cpp/src/common/container/blocking_queue.cc | 57 -
cpp/src/common/container/blocking_queue.h | 44 -
cpp/src/common/container/byte_buffer.h | 127 -
cpp/src/common/container/hash_func.h | 106 -
cpp/src/common/container/hash_node.h | 73 -
cpp/src/common/container/hash_segm.h | 53 -
cpp/src/common/container/hash_table.h | 792 -----
cpp/src/common/container/list.h | 149 -
cpp/src/common/container/murmur_hash3.cc | 138 -
cpp/src/common/container/murmur_hash3.h | 75 -
cpp/src/common/container/simple_vector.h | 58 -
cpp/src/common/container/slice.h | 148 -
cpp/src/common/container/sorted_array.h | 329 --
cpp/src/common/datatype/CMakeLists.txt | 18 -
cpp/src/common/datatype/value.h | 223 --
cpp/src/common/db_common.h | 183 --
cpp/src/common/global.cc | 189 --
cpp/src/common/global.h | 48 -
cpp/src/common/logger/elog.h | 37 -
cpp/src/common/mutex/CMakeLists.txt | 20 -
cpp/src/common/mutex/mutex.h | 74 -
cpp/src/common/path.h | 50 -
cpp/src/common/record.h | 138 -
cpp/src/common/row_record.h | 193 --
cpp/src/common/schema.h | 73 -
cpp/src/common/seq_tvlist.h | 172 --
cpp/src/common/seq_tvlist.inc | 174 --
cpp/src/common/statistic.h | 839 ------
cpp/src/common/tablet.cc | 164 -
cpp/src/common/tablet.h | 100 -
cpp/src/common/tablet_iterator.h | 78 -
cpp/src/common/tsblock/CMakeLists.txt | 22 -
cpp/src/common/tsblock/tsblock.cc | 310 --
cpp/src/common/tsblock/tsblock.h | 272 --
cpp/src/common/tsblock/tuple_desc.cc | 88 -
cpp/src/common/tsblock/tuple_desc.h | 118 -
.../common/tsblock/vector/fixed_length_vector.h | 82 -
.../common/tsblock/vector/variable_length_vector.h | 87 -
cpp/src/common/tsblock/vector/vector.h | 94 -
cpp/src/common/tsfile_common.cc | 259 --
cpp/src/common/tsfile_common.h | 823 -----
cpp/src/common/tsfile_mgr.cc | 139 -
cpp/src/common/tsfile_mgr.h | 95 -
cpp/src/compress/CMakeLists.txt | 23 -
cpp/src/compress/compressor.c | 18 -
cpp/src/compress/compressor.h | 51 -
cpp/src/compress/compressor_factory.h | 71 -
cpp/src/compress/gzip_compressor.cc | 292 --
cpp/src/compress/gzip_compressor.h | 153 -
cpp/src/compress/lz4.c | 3162 --------------------
cpp/src/compress/lz4.h | 1000 -------
cpp/src/compress/lz4_compressor.cc | 141 -
cpp/src/compress/lz4_compressor.h | 66 -
cpp/src/compress/uncompressed_compressor.h | 54 -
cpp/src/encoding/CMakeLists.txt | 32 -
cpp/src/encoding/bitpack_decoder.h | 175 --
cpp/src/encoding/bitpack_encoder.h | 173 --
cpp/src/encoding/decoder.h | 41 -
cpp/src/encoding/decoder_factory.h | 97 -
cpp/src/encoding/dictionary_decoder.h | 78 -
cpp/src/encoding/dictionary_encoder.h | 101 -
cpp/src/encoding/encode_utils.h | 146 -
cpp/src/encoding/encoder.h | 44 -
cpp/src/encoding/encoder_factory.h | 113 -
cpp/src/encoding/gorilla_decoder.h | 411 ---
cpp/src/encoding/gorilla_encoder.h | 468 ---
cpp/src/encoding/intpacker.h | 155 -
cpp/src/encoding/plain_decoder.h | 52 -
cpp/src/encoding/plain_encoder.h | 63 -
cpp/src/encoding/ts2diff_decoder.h | 311 --
cpp/src/encoding/ts2diff_encoder.h | 335 ---
cpp/src/encoding/zigzag_decoder.h | 205 --
cpp/src/encoding/zigzag_encoder.h | 172 --
cpp/src/file/CMakeLists.txt | 24 -
cpp/src/file/open_file.cc | 110 -
cpp/src/file/open_file.h | 137 -
cpp/src/file/read_file.cc | 126 -
cpp/src/file/read_file.h | 66 -
cpp/src/file/tsfile_io_reader.cc | 535 ----
cpp/src/file/tsfile_io_reader.h | 169 --
cpp/src/file/tsfile_io_writer.cc | 757 -----
cpp/src/file/tsfile_io_writer.h | 191 --
cpp/src/file/write_file.cc | 128 -
cpp/src/file/write_file.h | 61 -
cpp/src/reader/CMakeLists.txt | 23 -
cpp/src/reader/bloom_filter.cc | 268 --
cpp/src/reader/bloom_filter.h | 128 -
cpp/src/reader/chunk_reader.cc | 454 ---
cpp/src/reader/chunk_reader.h | 137 -
cpp/src/reader/expression.cc | 207 --
cpp/src/reader/expression.h | 133 -
cpp/src/reader/filter/and_filter.h | 87 -
cpp/src/reader/filter/between.h | 135 -
cpp/src/reader/filter/binary_filter.h | 45 -
cpp/src/reader/filter/eq.h | 71 -
cpp/src/reader/filter/filter.h | 60 -
cpp/src/reader/filter/filter_type.h | 51 -
cpp/src/reader/filter/gt.h | 69 -
cpp/src/reader/filter/gt_eq.h | 70 -
cpp/src/reader/filter/in.h | 55 -
cpp/src/reader/filter/lt.h | 69 -
cpp/src/reader/filter/lt_eq.h | 70 -
cpp/src/reader/filter/not_eq.h | 71 -
cpp/src/reader/filter/object.h | 84 -
cpp/src/reader/filter/or_filter.h | 89 -
cpp/src/reader/filter/time_filter.cc | 46 -
cpp/src/reader/filter/time_filter.h | 53 -
cpp/src/reader/filter/time_operator.cc | 274 --
cpp/src/reader/filter/time_operator.h | 213 --
cpp/src/reader/filter/unary_filter.h | 66 -
cpp/src/reader/qds_with_timegenerator.cc | 384 ---
cpp/src/reader/qds_with_timegenerator.h | 136 -
cpp/src/reader/qds_without_timegenerator.cc | 159 -
cpp/src/reader/qds_without_timegenerator.h | 65 -
cpp/src/reader/query_data_set.h | 36 -
cpp/src/reader/query_executor.h | 63 -
cpp/src/reader/scan_iterator.cc | 257 --
cpp/src/reader/scan_iterator.h | 189 --
cpp/src/reader/tsfile_executor.cc | 114 -
cpp/src/reader/tsfile_executor.h | 57 -
cpp/src/reader/tsfile_reader.cc | 67 -
cpp/src/reader/tsfile_reader.h | 55 -
cpp/src/reader/tsfile_series_scan_iterator.cc | 111 -
cpp/src/reader/tsfile_series_scan_iterator.h | 98 -
cpp/src/utils/CMakeLists.txt | 19 -
cpp/src/utils/db_utils.h | 417 ---
cpp/src/utils/errno_define.h | 76 -
cpp/src/utils/injection.h | 68 -
cpp/src/utils/storage_utils.h | 86 -
cpp/src/utils/util_define.h | 145 -
cpp/src/writer/CMakeLists.txt | 24 -
cpp/src/writer/chunk_writer.cc | 154 -
cpp/src/writer/chunk_writer.h | 136 -
cpp/src/writer/page_writer.cc | 210 --
cpp/src/writer/page_writer.h | 178 --
cpp/src/writer/tsfile_writer.cc | 429 ---
cpp/src/writer/tsfile_writer.h | 121 -
cpp/test_all.sh | 18 -
.../client/config.js => cpp/tsfile/CMakeLists.txt | 41 +-
cpp/{ => tsfile}/README-zh.md | 0
cpp/{README-zh.md => tsfile/README.md} | 4 +-
.../tsfile/include/tsfile.hpp | 14 +-
.../tsfile/src/tsfile.cpp | 18 +-
.../tsfile/test/tsfile_test.cpp | 9 +-
pom.xml | 6 -
197 files changed, 351 insertions(+), 29058 deletions(-)
delete mode 100644 cpp/.clang-format
delete mode 100644 cpp/.gitignore
delete mode 100644 cpp/README.md
delete mode 100644 cpp/bench_mark/CMakeLists.txt
delete mode 100644 cpp/bench_mark/bench_mark_src/CMakeLists.txt
delete mode 100644 cpp/bench_mark/bench_mark_src/bench_conf.h
delete mode 100644 cpp/bench_mark/bench_mark_src/bench_mark.cc
delete mode 100644 cpp/bench_mark/bench_mark_src/bench_mark.h
delete mode 100644 cpp/bench_mark/build.sh
create mode 100644 cpp/build-utils/source-bundle-descriptor.xml
delete mode 100644 cpp/build.sh
delete mode 100644 cpp/cmake/build_function.cmake
delete mode 100644 cpp/cmake/cmake_config.h
delete mode 100644 cpp/cmake/config.h.in
copy docs/src/.vuepress/components/docsearch/client/config.js =>
cpp/common/CMakeLists.txt (56%)
copy
java/tsfile/src/main/java/org/apache/tsfile/read/common/type/TypeEnum.java =>
cpp/common/include/common.hpp (80%)
copy
java/tsfile/src/main/java/org/apache/tsfile/read/common/type/TypeEnum.java =>
cpp/common/src/common.cpp (79%)
copy java/tsfile/src/main/java/org/apache/tsfile/write/writer/IDataWriter.java
=> cpp/common/test/common_test.cpp (86%)
delete mode 100644 cpp/examples/build.sh
delete mode 100644 cpp/examples/c_examples/CMakeLists.txt
delete mode 100644 cpp/examples/c_examples/c_examples.c
delete mode 100644 cpp/examples/c_examples/c_examples.h
delete mode 100644 cpp/examples/cpp_examples/CMakeLists.txt
delete mode 100644 cpp/examples/cpp_examples/cpp_examples.h
delete mode 100644 cpp/examples/cpp_examples/demo_read.cpp
delete mode 100644 cpp/examples/cpp_examples/demo_write.cpp
delete mode 100644 cpp/examples/examples.cc
copy java/tsfile/src/main/java/org/apache/tsfile/write/writer/IDataWriter.java
=> cpp/examples/include/example.hpp (85%)
copy
java/tsfile/src/main/java/org/apache/tsfile/exception/filter/QueryFilterOptimizationException.java
=> cpp/examples/src/example.cpp (76%)
delete mode 100644 cpp/src/CMakeLists.txt
delete mode 100644 cpp/src/common/CMakeLists.txt
delete mode 100644 cpp/src/common/allocator/CMakeLists.txt
delete mode 100644 cpp/src/common/allocator/alloc_base.h
delete mode 100644 cpp/src/common/allocator/byte_stream.h
delete mode 100644 cpp/src/common/allocator/mem_alloc.cc
delete mode 100644 cpp/src/common/allocator/my_string.h
delete mode 100644 cpp/src/common/allocator/object_pool.h
delete mode 100644 cpp/src/common/allocator/page_arena.cc
delete mode 100644 cpp/src/common/allocator/page_arena.h
delete mode 100644 cpp/src/common/allocator/stl_allocator.h
delete mode 100644 cpp/src/common/allocator/util_define.h
delete mode 100644 cpp/src/common/config/CMakeLists.txt
delete mode 100644 cpp/src/common/config/config.h
delete mode 100644 cpp/src/common/container/CMakeLists.txt
delete mode 100644 cpp/src/common/container/array.h
delete mode 100644 cpp/src/common/container/bit_map.cc
delete mode 100644 cpp/src/common/container/bit_map.h
delete mode 100644 cpp/src/common/container/blocking_queue.cc
delete mode 100644 cpp/src/common/container/blocking_queue.h
delete mode 100644 cpp/src/common/container/byte_buffer.h
delete mode 100644 cpp/src/common/container/hash_func.h
delete mode 100644 cpp/src/common/container/hash_node.h
delete mode 100644 cpp/src/common/container/hash_segm.h
delete mode 100644 cpp/src/common/container/hash_table.h
delete mode 100644 cpp/src/common/container/list.h
delete mode 100644 cpp/src/common/container/murmur_hash3.cc
delete mode 100644 cpp/src/common/container/murmur_hash3.h
delete mode 100644 cpp/src/common/container/simple_vector.h
delete mode 100644 cpp/src/common/container/slice.h
delete mode 100644 cpp/src/common/container/sorted_array.h
delete mode 100644 cpp/src/common/datatype/CMakeLists.txt
delete mode 100644 cpp/src/common/datatype/value.h
delete mode 100644 cpp/src/common/db_common.h
delete mode 100644 cpp/src/common/global.cc
delete mode 100644 cpp/src/common/global.h
delete mode 100644 cpp/src/common/logger/elog.h
delete mode 100644 cpp/src/common/mutex/CMakeLists.txt
delete mode 100644 cpp/src/common/mutex/mutex.h
delete mode 100644 cpp/src/common/path.h
delete mode 100644 cpp/src/common/record.h
delete mode 100644 cpp/src/common/row_record.h
delete mode 100644 cpp/src/common/schema.h
delete mode 100644 cpp/src/common/seq_tvlist.h
delete mode 100644 cpp/src/common/seq_tvlist.inc
delete mode 100644 cpp/src/common/statistic.h
delete mode 100644 cpp/src/common/tablet.cc
delete mode 100644 cpp/src/common/tablet.h
delete mode 100644 cpp/src/common/tablet_iterator.h
delete mode 100644 cpp/src/common/tsblock/CMakeLists.txt
delete mode 100644 cpp/src/common/tsblock/tsblock.cc
delete mode 100644 cpp/src/common/tsblock/tsblock.h
delete mode 100644 cpp/src/common/tsblock/tuple_desc.cc
delete mode 100644 cpp/src/common/tsblock/tuple_desc.h
delete mode 100644 cpp/src/common/tsblock/vector/fixed_length_vector.h
delete mode 100644 cpp/src/common/tsblock/vector/variable_length_vector.h
delete mode 100644 cpp/src/common/tsblock/vector/vector.h
delete mode 100644 cpp/src/common/tsfile_common.cc
delete mode 100644 cpp/src/common/tsfile_common.h
delete mode 100644 cpp/src/common/tsfile_mgr.cc
delete mode 100644 cpp/src/common/tsfile_mgr.h
delete mode 100644 cpp/src/compress/CMakeLists.txt
delete mode 100644 cpp/src/compress/compressor.c
delete mode 100644 cpp/src/compress/compressor.h
delete mode 100644 cpp/src/compress/compressor_factory.h
delete mode 100644 cpp/src/compress/gzip_compressor.cc
delete mode 100644 cpp/src/compress/gzip_compressor.h
delete mode 100644 cpp/src/compress/lz4.c
delete mode 100644 cpp/src/compress/lz4.h
delete mode 100644 cpp/src/compress/lz4_compressor.cc
delete mode 100644 cpp/src/compress/lz4_compressor.h
delete mode 100644 cpp/src/compress/uncompressed_compressor.h
delete mode 100644 cpp/src/encoding/CMakeLists.txt
delete mode 100644 cpp/src/encoding/bitpack_decoder.h
delete mode 100644 cpp/src/encoding/bitpack_encoder.h
delete mode 100644 cpp/src/encoding/decoder.h
delete mode 100644 cpp/src/encoding/decoder_factory.h
delete mode 100644 cpp/src/encoding/dictionary_decoder.h
delete mode 100644 cpp/src/encoding/dictionary_encoder.h
delete mode 100644 cpp/src/encoding/encode_utils.h
delete mode 100644 cpp/src/encoding/encoder.h
delete mode 100644 cpp/src/encoding/encoder_factory.h
delete mode 100644 cpp/src/encoding/gorilla_decoder.h
delete mode 100644 cpp/src/encoding/gorilla_encoder.h
delete mode 100644 cpp/src/encoding/intpacker.h
delete mode 100644 cpp/src/encoding/plain_decoder.h
delete mode 100644 cpp/src/encoding/plain_encoder.h
delete mode 100644 cpp/src/encoding/ts2diff_decoder.h
delete mode 100644 cpp/src/encoding/ts2diff_encoder.h
delete mode 100644 cpp/src/encoding/zigzag_decoder.h
delete mode 100644 cpp/src/encoding/zigzag_encoder.h
delete mode 100644 cpp/src/file/CMakeLists.txt
delete mode 100644 cpp/src/file/open_file.cc
delete mode 100644 cpp/src/file/open_file.h
delete mode 100644 cpp/src/file/read_file.cc
delete mode 100644 cpp/src/file/read_file.h
delete mode 100644 cpp/src/file/tsfile_io_reader.cc
delete mode 100644 cpp/src/file/tsfile_io_reader.h
delete mode 100644 cpp/src/file/tsfile_io_writer.cc
delete mode 100644 cpp/src/file/tsfile_io_writer.h
delete mode 100644 cpp/src/file/write_file.cc
delete mode 100644 cpp/src/file/write_file.h
delete mode 100644 cpp/src/reader/CMakeLists.txt
delete mode 100644 cpp/src/reader/bloom_filter.cc
delete mode 100644 cpp/src/reader/bloom_filter.h
delete mode 100644 cpp/src/reader/chunk_reader.cc
delete mode 100644 cpp/src/reader/chunk_reader.h
delete mode 100644 cpp/src/reader/expression.cc
delete mode 100644 cpp/src/reader/expression.h
delete mode 100644 cpp/src/reader/filter/and_filter.h
delete mode 100644 cpp/src/reader/filter/between.h
delete mode 100644 cpp/src/reader/filter/binary_filter.h
delete mode 100644 cpp/src/reader/filter/eq.h
delete mode 100644 cpp/src/reader/filter/filter.h
delete mode 100644 cpp/src/reader/filter/filter_type.h
delete mode 100644 cpp/src/reader/filter/gt.h
delete mode 100644 cpp/src/reader/filter/gt_eq.h
delete mode 100644 cpp/src/reader/filter/in.h
delete mode 100644 cpp/src/reader/filter/lt.h
delete mode 100644 cpp/src/reader/filter/lt_eq.h
delete mode 100644 cpp/src/reader/filter/not_eq.h
delete mode 100644 cpp/src/reader/filter/object.h
delete mode 100644 cpp/src/reader/filter/or_filter.h
delete mode 100644 cpp/src/reader/filter/time_filter.cc
delete mode 100644 cpp/src/reader/filter/time_filter.h
delete mode 100644 cpp/src/reader/filter/time_operator.cc
delete mode 100644 cpp/src/reader/filter/time_operator.h
delete mode 100644 cpp/src/reader/filter/unary_filter.h
delete mode 100644 cpp/src/reader/qds_with_timegenerator.cc
delete mode 100644 cpp/src/reader/qds_with_timegenerator.h
delete mode 100644 cpp/src/reader/qds_without_timegenerator.cc
delete mode 100644 cpp/src/reader/qds_without_timegenerator.h
delete mode 100644 cpp/src/reader/query_data_set.h
delete mode 100644 cpp/src/reader/query_executor.h
delete mode 100644 cpp/src/reader/scan_iterator.cc
delete mode 100644 cpp/src/reader/scan_iterator.h
delete mode 100644 cpp/src/reader/tsfile_executor.cc
delete mode 100644 cpp/src/reader/tsfile_executor.h
delete mode 100644 cpp/src/reader/tsfile_reader.cc
delete mode 100644 cpp/src/reader/tsfile_reader.h
delete mode 100644 cpp/src/reader/tsfile_series_scan_iterator.cc
delete mode 100644 cpp/src/reader/tsfile_series_scan_iterator.h
delete mode 100644 cpp/src/utils/CMakeLists.txt
delete mode 100644 cpp/src/utils/db_utils.h
delete mode 100644 cpp/src/utils/errno_define.h
delete mode 100644 cpp/src/utils/injection.h
delete mode 100644 cpp/src/utils/storage_utils.h
delete mode 100644 cpp/src/utils/util_define.h
delete mode 100644 cpp/src/writer/CMakeLists.txt
delete mode 100644 cpp/src/writer/chunk_writer.cc
delete mode 100644 cpp/src/writer/chunk_writer.h
delete mode 100644 cpp/src/writer/page_writer.cc
delete mode 100644 cpp/src/writer/page_writer.h
delete mode 100644 cpp/src/writer/tsfile_writer.cc
delete mode 100644 cpp/src/writer/tsfile_writer.h
delete mode 100644 cpp/test_all.sh
copy docs/src/.vuepress/components/docsearch/client/config.js =>
cpp/tsfile/CMakeLists.txt (58%)
copy cpp/{ => tsfile}/README-zh.md (100%)
rename cpp/{README-zh.md => tsfile/README.md} (98%)
copy
java/tsfile/src/main/java/org/apache/tsfile/exception/StopReadTsFileByInterruptException.java
=> cpp/tsfile/include/tsfile.hpp (79%)
copy
java/tsfile/src/main/java/org/apache/tsfile/exception/NullFieldException.java
=> cpp/tsfile/src/tsfile.cpp (72%)
copy java/tsfile/src/main/java/org/apache/tsfile/write/writer/IDataWriter.java
=> cpp/tsfile/test/tsfile_test.cpp (86%)