From 70cad1901a5cdf46498e9da21a48d1d7059c599f Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Sun, 21 Feb 2016 17:23:23 +0800 Subject: [PATCH 01/14] Add parse-by-parts example Fix #527 --- example/CMakeLists.txt | 1 + example/parsebyparts/parsebyparts.cpp | 164 ++++++++++++++++++++++++++ 2 files changed, 165 insertions(+) create mode 100644 example/parsebyparts/parsebyparts.cpp diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index c6b8449..58a292a 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -8,6 +8,7 @@ set(EXAMPLES condense jsonx messagereader + parsebyparts pretty prettyauto schemavalidator diff --git a/example/parsebyparts/parsebyparts.cpp b/example/parsebyparts/parsebyparts.cpp new file mode 100644 index 0000000..0094063 --- /dev/null +++ b/example/parsebyparts/parsebyparts.cpp @@ -0,0 +1,164 @@ +// Example of parsing JSON to document by parts. + +// Using C++11 threads +#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600) + +#include "rapidjson/document.h" +#include "rapidjson/error/en.h" +#include "rapidjson/writer.h" +#include "rapidjson/ostreamwrapper.h" +#include +#include +#include +#include + +using namespace rapidjson; + +template +class AsyncDocumentParser { +public: + AsyncDocumentParser(Document& d) : ass_(*this), d_(d), parseThread_(&AsyncDocumentParser::Parse, this), completed_() {} + + ~AsyncDocumentParser() { + if (!parseThread_.joinable()) + return; + + { + std::unique_lock lock(mutex_); + + // Wait until the buffer is read up (or parsing is completed) + while (!ass_.Empty() && !completed_) + finish_.wait(lock); + + // Automatically append '\0' as the terminator in the stream. + static const char terminator[] = ""; + ass_.src_ = terminator; + ass_.end_ = terminator + 1; + notEmpty_.notify_one(); // unblock the AsyncStringStream + } + + parseThread_.join(); + } + + void ParsePart(const char* buffer, size_t length) { + std::unique_lock lock(mutex_); + + // Wait until the buffer is read up (or parsing is completed) + while (!ass_.Empty() && !completed_) + finish_.wait(lock); + + // Stop further parsing if the parsing process is completed. + if (completed_) + return; + + // Set the buffer to stream and unblock the AsyncStringStream + ass_.src_ = buffer; + ass_.end_ = buffer + length; + notEmpty_.notify_one(); + } + +private: + void Parse() { + d_.ParseStream(ass_); + + // The stream may not be fully read, notify finish anyway to unblock ParsePart() + std::unique_lock lock(mutex_); + completed_ = true; // Parsing process is completed + finish_.notify_one(); // Unblock ParsePart() or destructor if they are waiting. + } + + struct AsyncStringStream { + typedef char Ch; + + AsyncStringStream(AsyncDocumentParser& parser) : parser_(parser), src_(), end_(), count_() {} + + char Peek() const { + std::unique_lock lock(parser_.mutex_); + + // If nothing in stream, block to wait. + while (Empty()) + parser_.notEmpty_.wait(lock); + + return *src_; + } + + char Take() { + std::unique_lock lock(parser_.mutex_); + + // If nothing in stream, block to wait. + while (Empty()) + parser_.notEmpty_.wait(lock); + + count_++; + char c = *src_++; + + // If all stream is read up, notify that the stream is finish. + if (Empty()) + parser_.finish_.notify_one(); + + return c; + } + + size_t Tell() const { return count_; } + + // Not implemented + char* PutBegin() { return 0; } + void Put(char) {} + void Flush() {} + size_t PutEnd(char*) { return 0; } + + bool Empty() const { return src_ == end_; } + + AsyncDocumentParser& parser_; + const char* src_; //!< Current read position. + const char* end_; //!< End of buffer + size_t count_; //!< Number of characters taken so far. + }; + + AsyncStringStream ass_; + Document& d_; + std::thread parseThread_; + std::mutex mutex_; + std::condition_variable notEmpty_; + std::condition_variable finish_; + bool completed_; +}; + +int main() { + Document d; + + { + AsyncDocumentParser<> parser(d); + + const char json1[] = " { \"hello\" : \"world\", \"t\" : tr"; + //const char json1[] = " { \"hello\" : \"world\", \"t\" : trX"; // Fot test parsing error + const char json2[] = "ue, \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.14"; + const char json3[] = "16, \"a\":[1, 2, 3, 4] } "; + + parser.ParsePart(json1, sizeof(json1) - 1); + parser.ParsePart(json2, sizeof(json2) - 1); + parser.ParsePart(json3, sizeof(json3) - 1); + } + + if (d.HasParseError()) { + std::cout << "Error at offset " << d.GetErrorOffset() << ": " << GetParseError_En(d.GetParseError()) << std::endl; + return EXIT_FAILURE; + } + + // Stringify the JSON to cout + OStreamWrapper os(std::cout); + Writer writer(os); + d.Accept(writer); + std::cout << std::endl; + + return EXIT_SUCCESS; +} + +#else // Not supporting C++11 + +#include +int main() { + std::cout << "This example requires C++11 compiler" << std::endl; +} + +#endif From 24d0ebd8fb03e08b42440786f5c0b65352b7b917 Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Mon, 22 Feb 2016 09:33:41 +0800 Subject: [PATCH 02/14] Fix compilation problem of parsebyparts --- example/CMakeLists.txt | 2 +- example/parsebyparts/parsebyparts.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 58a292a..48cbb60 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -25,7 +25,7 @@ add_definitions(-D__STDC_FORMAT_MACROS) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default") elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything -stdlib=libc++") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") add_definitions(-D_CRT_SECURE_NO_WARNINGS=1) endif() diff --git a/example/parsebyparts/parsebyparts.cpp b/example/parsebyparts/parsebyparts.cpp index 0094063..9f3d6ee 100644 --- a/example/parsebyparts/parsebyparts.cpp +++ b/example/parsebyparts/parsebyparts.cpp @@ -1,7 +1,7 @@ // Example of parsing JSON to document by parts. // Using C++11 threads -#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600) +#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1700) #include "rapidjson/document.h" #include "rapidjson/error/en.h" From dbe8d115b16f5274c038fa26fd1c0799f7f3d8db Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Mon, 22 Feb 2016 09:34:23 +0800 Subject: [PATCH 03/14] Rename variable in parsebyparts --- example/parsebyparts/parsebyparts.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/example/parsebyparts/parsebyparts.cpp b/example/parsebyparts/parsebyparts.cpp index 9f3d6ee..330ed68 100644 --- a/example/parsebyparts/parsebyparts.cpp +++ b/example/parsebyparts/parsebyparts.cpp @@ -17,7 +17,7 @@ using namespace rapidjson; template class AsyncDocumentParser { public: - AsyncDocumentParser(Document& d) : ass_(*this), d_(d), parseThread_(&AsyncDocumentParser::Parse, this), completed_() {} + AsyncDocumentParser(Document& d) : stream_(*this), d_(d), parseThread_(&AsyncDocumentParser::Parse, this), completed_() {} ~AsyncDocumentParser() { if (!parseThread_.joinable()) @@ -27,13 +27,13 @@ public: std::unique_lock lock(mutex_); // Wait until the buffer is read up (or parsing is completed) - while (!ass_.Empty() && !completed_) + while (!stream_.Empty() && !completed_) finish_.wait(lock); // Automatically append '\0' as the terminator in the stream. static const char terminator[] = ""; - ass_.src_ = terminator; - ass_.end_ = terminator + 1; + stream_.src_ = terminator; + stream_.end_ = terminator + 1; notEmpty_.notify_one(); // unblock the AsyncStringStream } @@ -44,7 +44,7 @@ public: std::unique_lock lock(mutex_); // Wait until the buffer is read up (or parsing is completed) - while (!ass_.Empty() && !completed_) + while (!stream_.Empty() && !completed_) finish_.wait(lock); // Stop further parsing if the parsing process is completed. @@ -52,14 +52,14 @@ public: return; // Set the buffer to stream and unblock the AsyncStringStream - ass_.src_ = buffer; - ass_.end_ = buffer + length; + stream_.src_ = buffer; + stream_.end_ = buffer + length; notEmpty_.notify_one(); } private: void Parse() { - d_.ParseStream(ass_); + d_.ParseStream(stream_); // The stream may not be fully read, notify finish anyway to unblock ParsePart() std::unique_lock lock(mutex_); @@ -115,7 +115,7 @@ private: size_t count_; //!< Number of characters taken so far. }; - AsyncStringStream ass_; + AsyncStringStream stream_; Document& d_; std::thread parseThread_; std::mutex mutex_; From f1387ef879171f22d638a2dd5cfd2faeb6b393c0 Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Mon, 22 Feb 2016 10:02:01 +0800 Subject: [PATCH 04/14] Rollback stdlib flag --- example/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 48cbb60..58a292a 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -25,7 +25,7 @@ add_definitions(-D__STDC_FORMAT_MACROS) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default") elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything -stdlib=libc++") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") add_definitions(-D_CRT_SECURE_NO_WARNINGS=1) endif() From cc2206d56cecc057e986a50ff6fdf35e9f1cc8fc Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Sat, 27 Feb 2016 16:07:42 +0800 Subject: [PATCH 05/14] Try using clang 3.7 --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 10b0bab..feaa286 100644 --- a/.travis.yml +++ b/.travis.yml @@ -52,6 +52,7 @@ matrix: - *default_packages - g++-multilib - libc6-dbg:i386 + - llvm-toolchain-precise-3.7 - env: CONF=debug ARCH=x86_64 CXX11=ON CCACHE_CPP2=yes compiler: clang - env: CONF=debug ARCH=x86 CXX11=OFF CCACHE_CPP2=yes @@ -123,6 +124,7 @@ before_script: script: - > + if [ "$CXX" = "clang++" ]; then export CXX="clang++-3.7" CC="clang-3.7"; fi eval "ARCH_FLAGS=\${ARCH_FLAGS_${ARCH}}" ; (cd build && cmake -DRAPIDJSON_HAS_STDSTRING=ON From 95c18905d7b4710e1abb8d9d75390aa37c4f957d Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Sat, 27 Feb 2016 16:10:03 +0800 Subject: [PATCH 06/14] Fix YAML --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index feaa286..774510b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -123,8 +123,8 @@ before_script: - mkdir build script: + - if [ "$CXX" = "clang++" ]; then export CXX="clang++-3.7" CC="clang-3.7"; fi - > - if [ "$CXX" = "clang++" ]; then export CXX="clang++-3.7" CC="clang-3.7"; fi eval "ARCH_FLAGS=\${ARCH_FLAGS_${ARCH}}" ; (cd build && cmake -DRAPIDJSON_HAS_STDSTRING=ON From c0b498176574054adfe82be63d4fffa7378203db Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Sat, 27 Feb 2016 16:29:41 +0800 Subject: [PATCH 07/14] Try clang-3.7 --- .travis.yml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 774510b..139c760 100644 --- a/.travis.yml +++ b/.travis.yml @@ -52,9 +52,13 @@ matrix: - *default_packages - g++-multilib - libc6-dbg:i386 - - llvm-toolchain-precise-3.7 + - clang-3.7 - env: CONF=debug ARCH=x86_64 CXX11=ON CCACHE_CPP2=yes compiler: clang + addons: + apt: + packages: + - clang-3.7 - env: CONF=debug ARCH=x86 CXX11=OFF CCACHE_CPP2=yes compiler: clang addons: @@ -63,8 +67,13 @@ matrix: - *default_packages - g++-multilib - libc6-dbg:i386 + - clang-3.7 - env: CONF=debug ARCH=x86_64 CXX11=OFF CCACHE_CPP2=yes compiler: clang + addons: + apt: + packages: + - clang-3.7 - env: CONF=release ARCH=x86 CXX11=ON CCACHE_CPP2=yes compiler: clang addons: @@ -73,8 +82,13 @@ matrix: - *default_packages - g++-multilib - libc6-dbg:i386 + - clang-3.7 - env: CONF=release ARCH=x86_64 CXX11=ON CCACHE_CPP2=yes compiler: clang + addons: + apt: + packages: + - clang-3.7 # coverage report - env: CONF=debug ARCH=x86 CXX11=ON GCOV_FLAGS='--coverage' compiler: gcc From 9e05693ca11a39363680d5494fb086144bd78662 Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Sat, 27 Feb 2016 21:20:52 +0800 Subject: [PATCH 08/14] Add sources for clang --- .travis.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.travis.yml b/.travis.yml index 139c760..a18de6a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,6 +48,8 @@ matrix: compiler: clang addons: apt: + sources: + - llvm-toolchain-precise-3.7 packages: - *default_packages - g++-multilib @@ -57,12 +59,16 @@ matrix: compiler: clang addons: apt: + sources: + - llvm-toolchain-precise-3.7 packages: - clang-3.7 - env: CONF=debug ARCH=x86 CXX11=OFF CCACHE_CPP2=yes compiler: clang addons: apt: + sources: + - llvm-toolchain-precise-3.7 packages: - *default_packages - g++-multilib @@ -72,12 +78,16 @@ matrix: compiler: clang addons: apt: + sources: + - llvm-toolchain-precise-3.7 packages: - clang-3.7 - env: CONF=release ARCH=x86 CXX11=ON CCACHE_CPP2=yes compiler: clang addons: apt: + sources: + - llvm-toolchain-precise-3.7 packages: - *default_packages - g++-multilib @@ -87,6 +97,8 @@ matrix: compiler: clang addons: apt: + sources: + - llvm-toolchain-precise-3.7 packages: - clang-3.7 # coverage report From d6575035a541bc3a491fcb0a1664c3472c077132 Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Sat, 27 Feb 2016 21:34:32 +0800 Subject: [PATCH 09/14] Add another source --- .travis.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.travis.yml b/.travis.yml index a18de6a..e18acef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -50,6 +50,7 @@ matrix: apt: sources: - llvm-toolchain-precise-3.7 + - ubuntu-toolchain-r-test packages: - *default_packages - g++-multilib @@ -61,6 +62,7 @@ matrix: apt: sources: - llvm-toolchain-precise-3.7 + - ubuntu-toolchain-r-test packages: - clang-3.7 - env: CONF=debug ARCH=x86 CXX11=OFF CCACHE_CPP2=yes @@ -69,6 +71,7 @@ matrix: apt: sources: - llvm-toolchain-precise-3.7 + - ubuntu-toolchain-r-test packages: - *default_packages - g++-multilib @@ -80,6 +83,7 @@ matrix: apt: sources: - llvm-toolchain-precise-3.7 + - ubuntu-toolchain-r-test packages: - clang-3.7 - env: CONF=release ARCH=x86 CXX11=ON CCACHE_CPP2=yes @@ -88,6 +92,7 @@ matrix: apt: sources: - llvm-toolchain-precise-3.7 + - ubuntu-toolchain-r-test packages: - *default_packages - g++-multilib @@ -99,6 +104,7 @@ matrix: apt: sources: - llvm-toolchain-precise-3.7 + - ubuntu-toolchain-r-test packages: - clang-3.7 # coverage report From de28919b41614957ad21bfa69094396c3a32fa78 Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Sat, 27 Feb 2016 22:42:55 +0800 Subject: [PATCH 10/14] Try libc++ --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e18acef..7a114a4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -155,7 +155,7 @@ before_script: - mkdir build script: - - if [ "$CXX" = "clang++" ]; then export CXX="clang++-3.7" CC="clang-3.7"; fi + - if [ "$CXX" = "clang++" ]; then export CXX="clang++-3.7" CXXFLAGS="-stdlib=libc++" CC="clang-3.7"; fi - > eval "ARCH_FLAGS=\${ARCH_FLAGS_${ARCH}}" ; (cd build && cmake From 52512b7c1252c59ff8d53f58de496a60bb7366ab Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Sat, 27 Feb 2016 22:56:23 +0800 Subject: [PATCH 11/14] Try to set libc++ in cmake --- .travis.yml | 2 +- example/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7a114a4..e18acef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -155,7 +155,7 @@ before_script: - mkdir build script: - - if [ "$CXX" = "clang++" ]; then export CXX="clang++-3.7" CXXFLAGS="-stdlib=libc++" CC="clang-3.7"; fi + - if [ "$CXX" = "clang++" ]; then export CXX="clang++-3.7" CC="clang-3.7"; fi - > eval "ARCH_FLAGS=\${ARCH_FLAGS_${ARCH}}" ; (cd build && cmake diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 58a292a..95b00b4 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -25,7 +25,7 @@ add_definitions(-D__STDC_FORMAT_MACROS) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default") elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") add_definitions(-D_CRT_SECURE_NO_WARNINGS=1) endif() From 5f138208998937c061265b275a1a5ceb9d5cc9e3 Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Sat, 27 Feb 2016 23:41:38 +0800 Subject: [PATCH 12/14] Another try --- example/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 95b00b4..b208bf8 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -25,7 +25,7 @@ add_definitions(-D__STDC_FORMAT_MACROS) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default") elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lpthread -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") add_definitions(-D_CRT_SECURE_NO_WARNINGS=1) endif() From bc40c8a6822def5048c00d77c07e494811257de3 Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Sun, 28 Feb 2016 00:53:15 +0800 Subject: [PATCH 13/14] Add missing valgrind --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index e18acef..9266277 100644 --- a/.travis.yml +++ b/.travis.yml @@ -64,6 +64,7 @@ matrix: - llvm-toolchain-precise-3.7 - ubuntu-toolchain-r-test packages: + - *default_packages - clang-3.7 - env: CONF=debug ARCH=x86 CXX11=OFF CCACHE_CPP2=yes compiler: clang @@ -85,6 +86,7 @@ matrix: - llvm-toolchain-precise-3.7 - ubuntu-toolchain-r-test packages: + - *default_packages - clang-3.7 - env: CONF=release ARCH=x86 CXX11=ON CCACHE_CPP2=yes compiler: clang @@ -106,6 +108,7 @@ matrix: - llvm-toolchain-precise-3.7 - ubuntu-toolchain-r-test packages: + - *default_packages - clang-3.7 # coverage report - env: CONF=debug ARCH=x86 CXX11=ON GCOV_FLAGS='--coverage' From c62a19cfbdbc5f49c5933226db91de5844590f6a Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Sun, 28 Feb 2016 01:22:15 +0800 Subject: [PATCH 14/14] Remove CMakeLists license info --- example/CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index b208bf8..164a9d7 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -1,6 +1,3 @@ -# Copyright (c) 2011 Milo Yip (miloyip@gmail.com) -# Copyright (c) 2013 Rafal Jeczalik (rjeczalik@gmail.com) -# Distributed under the MIT License (see license.txt file) cmake_minimum_required(VERSION 2.8) set(EXAMPLES