From 9d8a449f76dabbbc50ae2668fa187386cd0cca43 Mon Sep 17 00:00:00 2001
From: wangyingjun02 <2959448004@qq.com>
Date: Mon, 3 Apr 2023 03:54:31 +0000
Subject: [PATCH 1/3] add LICENSE.
Signed-off-by: wangyingjun02 <2959448004@qq.com>
---
LICENSE | 201 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 201 insertions(+)
create mode 100644 LICENSE
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 00000000..29f81d81
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
--
Gitee
From 7b7d0ab0a660fcd2b6be44abf7c7ca3397ce1703 Mon Sep 17 00:00:00 2001
From: wangyingjun02 <2959448004@qq.com>
Date: Mon, 3 Apr 2023 03:54:49 +0000
Subject: [PATCH 2/3] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20LICE?=
=?UTF-8?q?NSE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
LICENSE | 201 --------------------------------------------------------
1 file changed, 201 deletions(-)
delete mode 100644 LICENSE
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 29f81d81..00000000
--- a/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--
Gitee
From faa9c72914d0272e70e816587933c7defb1df0af Mon Sep 17 00:00:00 2001
From: wangyingjun02 <2959448004@qq.com>
Date: Mon, 3 Apr 2023 11:58:32 +0800
Subject: [PATCH 3/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=89=E6=96=B9?=
=?UTF-8?q?=E5=BA=93concurrentqueue=E7=9A=84=E9=80=82=E9=85=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: wangyingjun02 <2959448004@qq.com>
---
concurrentqueue/.idea/.gitignore | 3 +
concurrentqueue/.idea/concurrentqueue.iml | 9 ++
concurrentqueue/.idea/misc.xml | 6 ++
concurrentqueue/.idea/modules.xml | 8 ++
concurrentqueue/.idea/vcs.xml | 6 ++
concurrentqueue/BUILD.gn | 83 +++++++++++++++++
concurrentqueue/CHANGELOG.md | 3 +
concurrentqueue/CMakeLists.txt | 22 +++++
concurrentqueue/README.OpenSource | 11 +++
concurrentqueue/README_zh.md | 17 ++++
concurrentqueue/bundle.json | 35 +++++++
concurrentqueue/docs/hap_integrate.md | 46 ++++++++++
concurrentqueue/docs/pic/hap.jpeg | Bin 0 -> 44076 bytes
concurrentqueue/docs/pic/result.PNG | Bin 0 -> 32896 bytes
concurrentqueue/docs/rom_integrate.md | 106 ++++++++++++++++++++++
15 files changed, 355 insertions(+)
create mode 100644 concurrentqueue/.idea/.gitignore
create mode 100644 concurrentqueue/.idea/concurrentqueue.iml
create mode 100644 concurrentqueue/.idea/misc.xml
create mode 100644 concurrentqueue/.idea/modules.xml
create mode 100644 concurrentqueue/.idea/vcs.xml
create mode 100644 concurrentqueue/BUILD.gn
create mode 100644 concurrentqueue/CHANGELOG.md
create mode 100644 concurrentqueue/CMakeLists.txt
create mode 100644 concurrentqueue/README.OpenSource
create mode 100644 concurrentqueue/README_zh.md
create mode 100644 concurrentqueue/bundle.json
create mode 100644 concurrentqueue/docs/hap_integrate.md
create mode 100644 concurrentqueue/docs/pic/hap.jpeg
create mode 100644 concurrentqueue/docs/pic/result.PNG
create mode 100644 concurrentqueue/docs/rom_integrate.md
diff --git a/concurrentqueue/.idea/.gitignore b/concurrentqueue/.idea/.gitignore
new file mode 100644
index 00000000..26d33521
--- /dev/null
+++ b/concurrentqueue/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/concurrentqueue/.idea/concurrentqueue.iml b/concurrentqueue/.idea/concurrentqueue.iml
new file mode 100644
index 00000000..d6ebd480
--- /dev/null
+++ b/concurrentqueue/.idea/concurrentqueue.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/concurrentqueue/.idea/misc.xml b/concurrentqueue/.idea/misc.xml
new file mode 100644
index 00000000..639900d1
--- /dev/null
+++ b/concurrentqueue/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/concurrentqueue/.idea/modules.xml b/concurrentqueue/.idea/modules.xml
new file mode 100644
index 00000000..f4324f20
--- /dev/null
+++ b/concurrentqueue/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/concurrentqueue/.idea/vcs.xml b/concurrentqueue/.idea/vcs.xml
new file mode 100644
index 00000000..6c0b8635
--- /dev/null
+++ b/concurrentqueue/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/concurrentqueue/BUILD.gn b/concurrentqueue/BUILD.gn
new file mode 100644
index 00000000..7d588b44
--- /dev/null
+++ b/concurrentqueue/BUILD.gn
@@ -0,0 +1,83 @@
+import("//build/ohos.gni")
+
+declare_args() {
+ enable_queue_test = false
+}
+
+config("config") {
+ cflags = [
+ "-fPIC",
+ "-Wall",
+ "-frtti",
+ "-fexceptions",
+ "-Wno-error=unused-variable",
+ "-Wno-error=self-move",
+ ]
+
+ cflags_cc = cflags
+}
+
+##生成可执行文件
+ohos_executable("unittests") {
+ sources = [
+ "//third_party/concurrentqueue/tests/common/simplethread.cpp",
+ "//third_party/concurrentqueue/tests/common/systemtime.cpp",
+ "//third_party/concurrentqueue/tests/unittests/unittests.cpp",
+ ]
+ include_dirs = [
+ "//third_party/concurrentqueue",
+ "//third_party/concurrentqueue/c_api",
+ "//third_party/concurrentqueue/tests/common",
+ "//third_party/concurrentqueue/tests/unittests",
+ ]
+
+ configs = [ ":config" ]
+
+ deps = [ "//third_party/concurrentqueue:concurrentqueue" ]
+ subsystem_name = "thirdparty"
+ part_name = "concurrentqueue"
+}
+
+##生成可执行文件
+ohos_executable("fuzztests") {
+ sources = [
+ "//third_party/concurrentqueue/tests/common/simplethread.cpp",
+ "//third_party/concurrentqueue/tests/common/systemtime.cpp",
+ "//third_party/concurrentqueue/tests/fuzztests/fuzztests.cpp",
+ ]
+ include_dirs = [
+ "//third_party/concurrentqueue",
+ "//third_party/concurrentqueue/c_api",
+ "//third_party/concurrentqueue/tests/common",
+ "//third_party/concurrentqueue/tests/fuzztests",
+ ]
+
+ configs = [ ":config" ]
+ deps = [ "//third_party/concurrentqueue:concurrentqueue" ]
+ subsystem_name = "thirdparty"
+ part_name = "concurrentqueue"
+}
+
+ohos_shared_library("concurrentqueue") {
+ sources = [
+ "//third_party/concurrentqueue/c_api/blockingconcurrentqueue.cpp",
+ "//third_party/concurrentqueue/c_api/concurrentqueue.cpp",
+ ]
+
+ include_dirs = [
+ "//third_party/concurrentqueue",
+ "//third_party/concurrentqueue/c_api",
+ ]
+ subsystem_name = "thirdparty"
+ part_name = "concurrentqueue"
+}
+
+group("concurrentqueues") {
+ deps = [ ":concurrentqueue" ]
+ if (enable_queue_test) {
+ deps += [
+ ":fuzztests",
+ ":unittests",
+ ]
+ }
+}
diff --git a/concurrentqueue/CHANGELOG.md b/concurrentqueue/CHANGELOG.md
new file mode 100644
index 00000000..4963dc75
--- /dev/null
+++ b/concurrentqueue/CHANGELOG.md
@@ -0,0 +1,3 @@
+# 1.0.0
+
+添加BUILD.gn和cmake,适配在ohos上的编译
diff --git a/concurrentqueue/CMakeLists.txt b/concurrentqueue/CMakeLists.txt
new file mode 100644
index 00000000..9fa2bdaa
--- /dev/null
+++ b/concurrentqueue/CMakeLists.txt
@@ -0,0 +1,22 @@
+# the minimum version of CMake.
+cmake_minimum_required(VERSION 3.4.1)
+project(ConcurrentQueue)
+
+set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
+
+include_directories(${NATIVERENDER_ROOT_PATH}
+ ${NATIVERENDER_ROOT_PATH}/concurrentqueue)
+
+
+add_library(concurrentqueue SHARED concurrentqueue/c_api/concurrentqueue.cpp concurrentqueue/c_api/concurrentqueue.cpp)
+
+add_executable(unittests concurrentqueue/tests/unittests/unittests.cpp concurrentqueue/tests/common/simplethread.cpp concurrentqueue/tests/common/systemtime.cpp)
+add_executable(fuzztests concurrentqueue/tests/fuzztests/fuzztests.cpp concurrentqueue/tests/common/simplethread.cpp concurrentqueue/tests/common/systemtime.cpp)
+
+target_include_directories(concurrentqueue PRIVATE ${NATIVERENDER_ROOT_PATH}
+ ${NATIVERENDER_ROOT_PATH}/concurrentqueue/tests/common
+ ${NATIVERENDER_ROOT_PATH}/concurrentqueue/tests/unittests
+ ${NATIVERENDER_ROOT_PATH}/concurrentqueue/tests/fuzztests
+ ${NATIVERENDER_ROOT_PATH}/concurrentqueue/tests/c_api)
+
+target_link_libraries(unittests PUBLIC concurrentqueue)
\ No newline at end of file
diff --git a/concurrentqueue/README.OpenSource b/concurrentqueue/README.OpenSource
new file mode 100644
index 00000000..d8736fb5
--- /dev/null
+++ b/concurrentqueue/README.OpenSource
@@ -0,0 +1,11 @@
+[
+ {
+ "Name": "concurrentqueue",
+ "License": "BSD License",
+ "License File": "LICENSE",
+ "Version Number": "v1.0.3",
+ "Owner" : "wangyingjun5@huawei.com",
+ "Upstream URL": "https://github.com/cameron314/concurrentqueue",
+ "Description": "A fast multi-producer, multi-consumer lock-free concurrent queue for C++11"
+ }
+]
diff --git a/concurrentqueue/README_zh.md b/concurrentqueue/README_zh.md
new file mode 100644
index 00000000..53847d73
--- /dev/null
+++ b/concurrentqueue/README_zh.md
@@ -0,0 +1,17 @@
+# concurrentqueue 三方库说明
+
+## 功能简介
+
+concurrentqueue是一个高效的线程安全的队列的库。
+
+## 使用约束
+
+- Rom版本:OpenHarmony3.2 beta2以上
+- 三方库版本:v1.0.3
+- 当前适配的功能:入队与出队
+- License:[BSD License](https://github.com/cameron314/concurrentqueue/blob/master/LICENSE.md)
+
+## 集成方式
+
+- [系统Rom包集成](./docs/rom_integrate.md)
++ [应用hap包集成](docs/hap_integrate.md)
diff --git a/concurrentqueue/bundle.json b/concurrentqueue/bundle.json
new file mode 100644
index 00000000..431fcde7
--- /dev/null
+++ b/concurrentqueue/bundle.json
@@ -0,0 +1,35 @@
+{
+ "name": "@ohos/concurrentqueue",
+ "description": "A fast multi-producer, multi-consumer lock-free concurrent queue for C++11",
+ "version": "v1.0.3",
+ "license": "BSD License",
+ "publishAs": "",
+ "segment": {
+ "destPath": "third_party/concurrentqueue"
+ },
+ "dirs": {},
+ "scripts": {},
+ "readmePath": {
+ "en": "README"
+ },
+ "component": {
+ "name": "concurrentqueue",
+ "subsystem": "thirdparty",
+ "syscap": [],
+ "features": [],
+ "adapted_system_type": ["standard"],
+ "rom": "",
+ "ram": "",
+ "deps": {
+ "components": [],
+ "third_party": []
+ },
+ "build": {
+ "sub_component": [
+ "//third_party/concurrentqueue:concurrentqueues"
+ ],
+ "inner_kits": [],
+ "test": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/concurrentqueue/docs/hap_integrate.md b/concurrentqueue/docs/hap_integrate.md
new file mode 100644
index 00000000..6cf2db88
--- /dev/null
+++ b/concurrentqueue/docs/hap_integrate.md
@@ -0,0 +1,46 @@
+# concurrentqueue如何集成到应用hap
+## 准备应用工程
+本库是基于DevEco Studio 3.1 Beta1版本,在RK3568开发板上验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)
+### 准备应用开发环境
+开发环境的准备参考:[开发环境准备](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/napi_study/docs/hello_napi.md)
+### 增加构建脚本及配置文件
+- 下载本仓库,并解压
+- 三方库目录结构
+ ```
+ tpc_c_cplusplus/concurrentqueue #三方库concurrentqueue的目录结构如下
+ ├── docs #存放三方库相关文档的文件夹
+ ├── CmakeLists.txt #构建脚本,支持hap包集成
+ ├── bundle.json #三方库组件定义文件
+ ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息
+ ├── README_zh.md
+ ```
+- 将concurrentqueue拷贝至工程xxxx/entry/src/main/cpp/thirdparty目录下
+### 准备三方库源码
+- 三方库下载地址:[concurrentqueue](https://github.com/cameron314/concurrentqueue), 版本:v1.0.3
+ 解压后修改库文件名为concurrentqueue,拷贝至工程xxxx/entry/src/main/cpp/thirdparty/concurrentqueue目录下
+## 应用中使用三方库
+- 将三方库加入工程中,目录结构如下
+ ```
+ demo/entry/src/main/cpp
+ ├── thirdparty #三方库存放目录
+ │ ├──concurrentqueue #三方库concurrentqueue
+ ├── CMakeLists.txt #工程目录的构建脚本
+ ├── ..... #工程目录的其他文件
+ ```
+- 在工程顶级CMakeLists.txt中引入三方库,增加如下代码
+ ```
+ include_directories(thirdparty/concurrentqueue/include)
+ add_subdirectory(thirdparty/concurrentqueue) #引入子目录下的CMakeLists.txt
+ target_link_libraries(工程库名 PUBLIC concurrentqueue) #工程依赖三方库concurrentqueue
+ ```
+## 编译工程
+编译工程,安装应用可以参考 [应用的安装和运行](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/napi_study/docs/hello_napi.md#%E5%AE%89%E8%A3%85%E8%B0%83%E8%AF%95)
+## 运行效果
+- 在 [concurrentqueue](https://gitee.com/openharmony-tpc/openharmony_tpc_samples/tree/master/concurrentqueue)中,运行效果如下图
+ 
+## 参考资料
+- [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)
+- [OpenHarmony三方库地址](https://gitee.com/openharmony-tpc)
+- [OpenHarmony知识体系](https://gitee.com/openharmony-sig/knowledge)
+- [通过DevEco Studio开发一个NAPI工程](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/napi_study/docs/hello_napi.md#https://gitee.com/openharmony-sig/knowledge/tree/master)
+
diff --git a/concurrentqueue/docs/pic/hap.jpeg b/concurrentqueue/docs/pic/hap.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..32fcbddc60505c1241df6114cf6ac12a985906ff
GIT binary patch
literal 44076
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
literal 0
HcmV?d00001
diff --git a/concurrentqueue/docs/pic/result.PNG b/concurrentqueue/docs/pic/result.PNG
new file mode 100644
index 0000000000000000000000000000000000000000..bfef8c6146cba53c51cf85da984b5a1b0af75916
GIT binary patch
literal 32896
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