diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 7a54fa35a31fb..cf81646c6570e 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -12,7 +12,6 @@ control/shift_decider/** takamasa.horibe@tier4.jp
control/pure_pursuit/** takamasa.horibe@tier4.jp
control/operation_mode_transition_manager/** takamasa.horibe@tier4.jp
control/control_performance_analysis/** ali.boyali@tier4.jp berkay@leodrive.ai
-common/autoware_ad_api_msgs/** isamu.takagi@tier4.jp
common/motion_common/** christopherj.ho@gmail.com
common/component_interface_specs/** isamu.takagi@tier4.jp
common/motion_testing/** christopherj.ho@gmail.com
diff --git a/common/autoware_ad_api_msgs/CMakeLists.txt b/common/autoware_ad_api_msgs/CMakeLists.txt
deleted file mode 100644
index 2cb112502f676..0000000000000
--- a/common/autoware_ad_api_msgs/CMakeLists.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-cmake_minimum_required(VERSION 3.14)
-project(autoware_ad_api_msgs)
-
-find_package(autoware_cmake REQUIRED)
-autoware_package()
-
-rosidl_generate_interfaces(${PROJECT_NAME}
- common/msg/ResponseStatus.msg
- interface/srv/InterfaceVersion.srv
- localization/msg/LocalizationInitializationState.msg
- localization/srv/InitializeLocalization.srv
- routing/msg/RouteState.msg
- routing/msg/Route.msg
- routing/msg/RouteData.msg
- routing/msg/RoutePrimitive.msg
- routing/msg/RouteSegment.msg
- routing/srv/ClearRoute.srv
- routing/srv/SetRoute.srv
- routing/srv/SetRoutePoints.srv
- DEPENDENCIES
- builtin_interfaces
- std_msgs
- geometry_msgs
-)
-
-ament_auto_package()
diff --git a/common/autoware_ad_api_msgs/README.md b/common/autoware_ad_api_msgs/README.md
deleted file mode 100644
index a596e8c5ba8b4..0000000000000
--- a/common/autoware_ad_api_msgs/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# autoware_ad_api_msgs
-
-## ResponseStatus
-
-This message is a response status commonly used in the service type API. Each API can define its own status codes.
-The status codes are primarily used to indicate the error cause, such as invalid parameter and timeout.
-If the API succeeds, set success to true, code to zero, and message to the empty string.
-Alternatively, codes and messages can be used for warnings or additional information.
-If the API fails, set success to false, code to the related status code, and message to the information.
-The status code zero is reserved for success. The status code 50000 or over are also reserved for typical cases.
-
-| Name | Code | Description |
-| ---------- | ----: | ------------------------------------ |
-| SUCCESS | 0 | This API has completed successfully. |
-| DEPRECATED | 50000 | This API is deprecated. |
-
-## InterfaceVersion
-
-Considering the product life cycle, there may be multiple vehicles using different versions of the AD API due to changes in requirements or functional improvements. For example, one vehicle uses `v1` for stability and another vehicle uses `v2` to enable more advanced functionality.
-
-In that situation, the AD API users such as developers of a web service have to switch the application behavior based on the version that each vehicle uses.
-The version of AD API follows [Semantic Versioning][semver] in order to provide an intuitive understanding of the changes between versions.
-
-## Routing
-
-The routing service support two formats. One uses pose and the other uses map dependent data directly.
-The body part of the route message is optional, since the route does not exist when it is cleared by the service.
-[See also routing API][api-routing].
-
-## Localization
-
-The initialization state does not reflect localization errors. Use diagnostics for that purpose.
-[See also localization API][api-localization].
-
-
-
-[semver]: https://semver.org/
-[api-localization]: https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/ad-api/list/api/localization/
-[api-routing]: https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/ad-api/list/api/routing/
diff --git a/common/autoware_ad_api_msgs/common/msg/ResponseStatus.msg b/common/autoware_ad_api_msgs/common/msg/ResponseStatus.msg
deleted file mode 100644
index 4fe0e5d4208e3..0000000000000
--- a/common/autoware_ad_api_msgs/common/msg/ResponseStatus.msg
+++ /dev/null
@@ -1,10 +0,0 @@
-# constants for code
-uint16 DEPRECATED = 50000
-uint16 SERVICE_UNREADY = 50001
-uint16 SERVICE_TIMEOUT = 50002
-uint16 TRANSFORM_ERROR = 50003
-
-# variables
-bool success
-uint16 code
-string message
diff --git a/common/autoware_ad_api_msgs/interface/srv/InterfaceVersion.srv b/common/autoware_ad_api_msgs/interface/srv/InterfaceVersion.srv
deleted file mode 100644
index 93ba2680f1859..0000000000000
--- a/common/autoware_ad_api_msgs/interface/srv/InterfaceVersion.srv
+++ /dev/null
@@ -1,4 +0,0 @@
----
-uint16 major
-uint16 minor
-uint16 patch
diff --git a/common/autoware_ad_api_msgs/localization/msg/LocalizationInitializationState.msg b/common/autoware_ad_api_msgs/localization/msg/LocalizationInitializationState.msg
deleted file mode 100644
index 8a4d790dbc321..0000000000000
--- a/common/autoware_ad_api_msgs/localization/msg/LocalizationInitializationState.msg
+++ /dev/null
@@ -1,7 +0,0 @@
-uint16 UNKNOWN = 0
-uint16 UNINITIALIZED = 1
-uint16 INITIALIZING = 2
-uint16 INITIALIZED = 3
-
-builtin_interfaces/Time stamp
-uint16 state
diff --git a/common/autoware_ad_api_msgs/localization/srv/InitializeLocalization.srv b/common/autoware_ad_api_msgs/localization/srv/InitializeLocalization.srv
deleted file mode 100644
index d3ffaece7789a..0000000000000
--- a/common/autoware_ad_api_msgs/localization/srv/InitializeLocalization.srv
+++ /dev/null
@@ -1,7 +0,0 @@
-geometry_msgs/PoseWithCovarianceStamped[<=1] pose
----
-uint16 ERROR_UNSAFE = 1
-uint16 ERROR_GNSS_SUPPORT = 2
-uint16 ERROR_GNSS = 3
-uint16 ERROR_ESTIMATION = 4
-autoware_ad_api_msgs/ResponseStatus status
diff --git a/common/autoware_ad_api_msgs/package.xml b/common/autoware_ad_api_msgs/package.xml
deleted file mode 100644
index db10bd2cdb877..0000000000000
--- a/common/autoware_ad_api_msgs/package.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
- autoware_ad_api_msgs
- 0.0.0
- The autoware_ad_api_msgs package
- Takagi, Isamu
- Apache License 2.0
-
- ament_cmake_auto
-
- autoware_cmake
- builtin_interfaces
- rosidl_default_generators
-
- geometry_msgs
- std_msgs
-
- builtin_interfaces
- rosidl_default_runtime
-
- ament_lint_auto
- autoware_lint_common
-
- rosidl_interface_packages
-
-
- ament_cmake
-
-
diff --git a/common/autoware_ad_api_msgs/routing/msg/Route.msg b/common/autoware_ad_api_msgs/routing/msg/Route.msg
deleted file mode 100644
index 3e6ff3a06e18b..0000000000000
--- a/common/autoware_ad_api_msgs/routing/msg/Route.msg
+++ /dev/null
@@ -1,2 +0,0 @@
-std_msgs/Header header
-autoware_ad_api_msgs/RouteData[<=1] data
diff --git a/common/autoware_ad_api_msgs/routing/msg/RouteData.msg b/common/autoware_ad_api_msgs/routing/msg/RouteData.msg
deleted file mode 100644
index e5d03efb14008..0000000000000
--- a/common/autoware_ad_api_msgs/routing/msg/RouteData.msg
+++ /dev/null
@@ -1,3 +0,0 @@
-geometry_msgs/Pose start
-geometry_msgs/Pose goal
-autoware_ad_api_msgs/RouteSegment[] segments
diff --git a/common/autoware_ad_api_msgs/routing/msg/RoutePrimitive.msg b/common/autoware_ad_api_msgs/routing/msg/RoutePrimitive.msg
deleted file mode 100644
index f7d9312611e51..0000000000000
--- a/common/autoware_ad_api_msgs/routing/msg/RoutePrimitive.msg
+++ /dev/null
@@ -1,2 +0,0 @@
-int64 id
-string type # The same id may be used for each type.
diff --git a/common/autoware_ad_api_msgs/routing/msg/RouteSegment.msg b/common/autoware_ad_api_msgs/routing/msg/RouteSegment.msg
deleted file mode 100644
index a3f3d12d3872d..0000000000000
--- a/common/autoware_ad_api_msgs/routing/msg/RouteSegment.msg
+++ /dev/null
@@ -1,2 +0,0 @@
-autoware_ad_api_msgs/RoutePrimitive preferred
-autoware_ad_api_msgs/RoutePrimitive[] alternatives # Does not include the preferred primitive.
diff --git a/common/autoware_ad_api_msgs/routing/msg/RouteState.msg b/common/autoware_ad_api_msgs/routing/msg/RouteState.msg
deleted file mode 100644
index 9dfe77ddee175..0000000000000
--- a/common/autoware_ad_api_msgs/routing/msg/RouteState.msg
+++ /dev/null
@@ -1,8 +0,0 @@
-uint16 UNKNOWN = 0
-uint16 UNSET = 1
-uint16 SET = 2
-uint16 ARRIVED = 3
-uint16 CHANGING = 4
-
-builtin_interfaces/Time stamp
-uint16 state
diff --git a/common/autoware_ad_api_msgs/routing/srv/ClearRoute.srv b/common/autoware_ad_api_msgs/routing/srv/ClearRoute.srv
deleted file mode 100644
index 38a3199e9d091..0000000000000
--- a/common/autoware_ad_api_msgs/routing/srv/ClearRoute.srv
+++ /dev/null
@@ -1,2 +0,0 @@
----
-autoware_ad_api_msgs/ResponseStatus status
diff --git a/common/autoware_ad_api_msgs/routing/srv/SetRoute.srv b/common/autoware_ad_api_msgs/routing/srv/SetRoute.srv
deleted file mode 100644
index 7299b12fe8141..0000000000000
--- a/common/autoware_ad_api_msgs/routing/srv/SetRoute.srv
+++ /dev/null
@@ -1,6 +0,0 @@
-std_msgs/Header header
-geometry_msgs/Pose goal
-autoware_ad_api_msgs/RouteSegment[] segments
----
-uint16 ERROR_ROUTE_EXISTS = 1
-autoware_ad_api_msgs/ResponseStatus status
diff --git a/common/autoware_ad_api_msgs/routing/srv/SetRoutePoints.srv b/common/autoware_ad_api_msgs/routing/srv/SetRoutePoints.srv
deleted file mode 100644
index c05a211fae4fb..0000000000000
--- a/common/autoware_ad_api_msgs/routing/srv/SetRoutePoints.srv
+++ /dev/null
@@ -1,8 +0,0 @@
-std_msgs/Header header
-geometry_msgs/Pose goal
-geometry_msgs/Pose[] waypoints
----
-uint16 ERROR_ROUTE_EXISTS = 1
-uint16 ERROR_PLANNER_UNREADY = 2
-uint16 ERROR_PLANNER_FAILED = 3
-autoware_ad_api_msgs/ResponseStatus status
diff --git a/common/autoware_ad_api_specs/include/autoware_ad_api_specs/interface.hpp b/common/autoware_ad_api_specs/include/autoware_ad_api_specs/interface.hpp
index a304bc32da20c..95dca9671e768 100644
--- a/common/autoware_ad_api_specs/include/autoware_ad_api_specs/interface.hpp
+++ b/common/autoware_ad_api_specs/include/autoware_ad_api_specs/interface.hpp
@@ -15,14 +15,14 @@
#ifndef AUTOWARE_AD_API_SPECS__INTERFACE_HPP_
#define AUTOWARE_AD_API_SPECS__INTERFACE_HPP_
-#include
+#include
namespace autoware_ad_api::interface
{
struct Version
{
- using Service = autoware_ad_api_msgs::srv::InterfaceVersion;
+ using Service = autoware_adapi_version_msgs::srv::InterfaceVersion;
static constexpr char name[] = "/api/interface/version";
};
diff --git a/common/autoware_ad_api_specs/include/autoware_ad_api_specs/localization.hpp b/common/autoware_ad_api_specs/include/autoware_ad_api_specs/localization.hpp
index 112a8882d2873..a2db70fb8cb7a 100644
--- a/common/autoware_ad_api_specs/include/autoware_ad_api_specs/localization.hpp
+++ b/common/autoware_ad_api_specs/include/autoware_ad_api_specs/localization.hpp
@@ -17,21 +17,21 @@
#include
-#include
-#include
+#include
+#include
namespace autoware_ad_api::localization
{
struct Initialize
{
- using Service = autoware_ad_api_msgs::srv::InitializeLocalization;
+ using Service = autoware_adapi_v1_msgs::srv::InitializeLocalization;
static constexpr char name[] = "/api/localization/initialize";
};
struct InitializationState
{
- using Message = autoware_ad_api_msgs::msg::LocalizationInitializationState;
+ using Message = autoware_adapi_v1_msgs::msg::LocalizationInitializationState;
static constexpr char name[] = "/api/localization/initialization_state";
static constexpr size_t depth = 3;
static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_RELIABLE;
diff --git a/common/autoware_ad_api_specs/include/autoware_ad_api_specs/routing.hpp b/common/autoware_ad_api_specs/include/autoware_ad_api_specs/routing.hpp
index 336ea670c0c8b..76fac74f667f9 100644
--- a/common/autoware_ad_api_specs/include/autoware_ad_api_specs/routing.hpp
+++ b/common/autoware_ad_api_specs/include/autoware_ad_api_specs/routing.hpp
@@ -17,36 +17,36 @@
#include
-#include
-#include
-#include
-#include
-#include
+#include
+#include
+#include
+#include
+#include
namespace autoware_ad_api::routing
{
struct SetRoutePoints
{
- using Service = autoware_ad_api_msgs::srv::SetRoutePoints;
+ using Service = autoware_adapi_v1_msgs::srv::SetRoutePoints;
static constexpr char name[] = "/api/routing/set_route_points";
};
struct SetRoute
{
- using Service = autoware_ad_api_msgs::srv::SetRoute;
+ using Service = autoware_adapi_v1_msgs::srv::SetRoute;
static constexpr char name[] = "/api/routing/set_route";
};
struct ClearRoute
{
- using Service = autoware_ad_api_msgs::srv::ClearRoute;
+ using Service = autoware_adapi_v1_msgs::srv::ClearRoute;
static constexpr char name[] = "/api/routing/clear_route";
};
struct RouteState
{
- using Message = autoware_ad_api_msgs::msg::RouteState;
+ using Message = autoware_adapi_v1_msgs::msg::RouteState;
static constexpr char name[] = "/api/routing/state";
static constexpr size_t depth = 3;
static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_RELIABLE;
@@ -55,7 +55,7 @@ struct RouteState
struct Route
{
- using Message = autoware_ad_api_msgs::msg::Route;
+ using Message = autoware_adapi_v1_msgs::msg::Route;
static constexpr char name[] = "/api/routing/route";
static constexpr size_t depth = 1;
static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_RELIABLE;
diff --git a/common/component_interface_specs/include/component_interface_specs/localization.hpp b/common/component_interface_specs/include/component_interface_specs/localization.hpp
index 050400bc2d625..a1a39f5cd57af 100644
--- a/common/component_interface_specs/include/component_interface_specs/localization.hpp
+++ b/common/component_interface_specs/include/component_interface_specs/localization.hpp
@@ -17,21 +17,21 @@
#include
-#include
-#include
+#include
+#include
namespace localization_interface
{
struct Initialize
{
- using Service = autoware_ad_api_msgs::srv::InitializeLocalization;
+ using Service = autoware_adapi_v1_msgs::srv::InitializeLocalization;
static constexpr char name[] = "/localization/initialize";
};
struct InitializationState
{
- using Message = autoware_ad_api_msgs::msg::LocalizationInitializationState;
+ using Message = autoware_adapi_v1_msgs::msg::LocalizationInitializationState;
static constexpr char name[] = "/localization/initialization_state";
static constexpr size_t depth = 3;
static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_RELIABLE;
diff --git a/common/component_interface_specs/include/component_interface_specs/planning.hpp b/common/component_interface_specs/include/component_interface_specs/planning.hpp
index 08ba456976804..641f36ffa0504 100644
--- a/common/component_interface_specs/include/component_interface_specs/planning.hpp
+++ b/common/component_interface_specs/include/component_interface_specs/planning.hpp
@@ -17,36 +17,36 @@
#include
-#include
-#include
-#include
-#include
-#include
+#include
+#include
+#include
+#include
+#include
namespace planning_interface
{
struct SetRoutePoints
{
- using Service = autoware_ad_api_msgs::srv::SetRoutePoints;
+ using Service = autoware_adapi_v1_msgs::srv::SetRoutePoints;
static constexpr char name[] = "/planning/mission_planning/set_route_points";
};
struct SetRoute
{
- using Service = autoware_ad_api_msgs::srv::SetRoute;
+ using Service = autoware_adapi_v1_msgs::srv::SetRoute;
static constexpr char name[] = "/planning/mission_planning/set_route";
};
struct ClearRoute
{
- using Service = autoware_ad_api_msgs::srv::ClearRoute;
+ using Service = autoware_adapi_v1_msgs::srv::ClearRoute;
static constexpr char name[] = "/planning/mission_planning/clear_route";
};
struct RouteState
{
- using Message = autoware_ad_api_msgs::msg::RouteState;
+ using Message = autoware_adapi_v1_msgs::msg::RouteState;
static constexpr char name[] = "/planning/mission_planning/route_state";
static constexpr size_t depth = 3;
static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_RELIABLE;
@@ -55,7 +55,7 @@ struct RouteState
struct Route
{
- using Message = autoware_ad_api_msgs::msg::Route;
+ using Message = autoware_adapi_v1_msgs::msg::Route;
static constexpr char name[] = "/planning/mission_planning/route";
static constexpr size_t depth = 1;
static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_RELIABLE;
diff --git a/common/component_interface_utils/include/component_interface_utils/rclcpp/exceptions.hpp b/common/component_interface_utils/include/component_interface_utils/rclcpp/exceptions.hpp
index a243ba60c1954..972d2a6bdf721 100644
--- a/common/component_interface_utils/include/component_interface_utils/rclcpp/exceptions.hpp
+++ b/common/component_interface_utils/include/component_interface_utils/rclcpp/exceptions.hpp
@@ -15,7 +15,7 @@
#ifndef COMPONENT_INTERFACE_UTILS__RCLCPP__EXCEPTIONS_HPP_
#define COMPONENT_INTERFACE_UTILS__RCLCPP__EXCEPTIONS_HPP_
-#include
+#include
#include
#include
@@ -26,7 +26,7 @@ namespace component_interface_utils
class ServiceException : public std::runtime_error
{
public:
- using ResponseStatus = autoware_ad_api_msgs::msg::ResponseStatus;
+ using ResponseStatus = autoware_adapi_v1_msgs::msg::ResponseStatus;
using ResponseStatusCode = ResponseStatus::_code_type;
ServiceException(ResponseStatusCode code, const std::string & message)
diff --git a/common/component_interface_utils/package.xml b/common/component_interface_utils/package.xml
index 6a67111bc2c99..94e925b7b4b7a 100644
--- a/common/component_interface_utils/package.xml
+++ b/common/component_interface_utils/package.xml
@@ -11,7 +11,7 @@
autoware_cmake
- autoware_ad_api_msgs
+ autoware_adapi_v1_msgs
rclcpp
rclcpp_components
diff --git a/localization/pose_initializer/docs/pose_initializer.md b/localization/pose_initializer/docs/pose_initializer.md
index 08d27ae83b51d..c1b2cc3d8b353 100644
--- a/localization/pose_initializer/docs/pose_initializer.md
+++ b/localization/pose_initializer/docs/pose_initializer.md
@@ -21,9 +21,9 @@ Finally, it publishes the initial pose to `ekf_localizer`.
### Services
-| Name | Type | Description |
-| -------------------------- | ------------------------------------------------- | --------------------- |
-| `/localization/initialize` | autoware_ad_api_msgs::srv::InitializeLocalization | initial pose from api |
+| Name | Type | Description |
+| -------------------------- | --------------------------------------------------- | --------------------- |
+| `/localization/initialize` | autoware_adapi_v1_msgs::srv::InitializeLocalization | initial pose from api |
### Clients
@@ -40,7 +40,7 @@ Finally, it publishes the initial pose to `ekf_localizer`.
### Publications
-| Name | Type | Description |
-| ------------------------------------ | ---------------------------------------------------------- | --------------------------- |
-| `/localization/initialization_state` | autoware_ad_api_msgs::msg::LocalizationInitializationState | pose initialization state |
-| `/initialpose3d` | geometry_msgs::msg::PoseWithCovarianceStamped | calculated initial ego pose |
+| Name | Type | Description |
+| ------------------------------------ | ------------------------------------------------------------ | --------------------------- |
+| `/localization/initialization_state` | autoware_adapi_v1_msgs::msg::LocalizationInitializationState | pose initialization state |
+| `/initialpose3d` | geometry_msgs::msg::PoseWithCovarianceStamped | calculated initial ego pose |
diff --git a/system/default_ad_api/package.xml b/system/default_ad_api/package.xml
index 9826f5af66f1c..1cee944589391 100644
--- a/system/default_ad_api/package.xml
+++ b/system/default_ad_api/package.xml
@@ -11,8 +11,9 @@
autoware_cmake
- autoware_ad_api_msgs
autoware_ad_api_specs
+ autoware_adapi_v1_msgs
+ autoware_adapi_version_msgs
component_interface_specs
component_interface_utils
rclcpp
diff --git a/system/default_ad_api/script/web_server.py b/system/default_ad_api/script/web_server.py
index ac2e4762cd80b..80a801c8fafa6 100755
--- a/system/default_ad_api/script/web_server.py
+++ b/system/default_ad_api/script/web_server.py
@@ -17,7 +17,7 @@
import sys
from threading import Thread
-from autoware_ad_api_msgs.srv import InterfaceVersion
+from autoware_adapi_version_msgs.srv import InterfaceVersion
import flask
import rclpy
from rclpy.node import Node
diff --git a/system/default_ad_api/test/node/interface_version.py b/system/default_ad_api/test/node/interface_version.py
index d5abd2924e24e..12c3918ef902a 100644
--- a/system/default_ad_api/test/node/interface_version.py
+++ b/system/default_ad_api/test/node/interface_version.py
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from autoware_ad_api_msgs.srv import InterfaceVersion
+from autoware_adapi_version_msgs.srv import InterfaceVersion
import rclpy
import rclpy.node
diff --git a/system/default_ad_api_helpers/ad_api_adaptors/package.xml b/system/default_ad_api_helpers/ad_api_adaptors/package.xml
index 442a076a9c544..84b02be0799d1 100644
--- a/system/default_ad_api_helpers/ad_api_adaptors/package.xml
+++ b/system/default_ad_api_helpers/ad_api_adaptors/package.xml
@@ -11,8 +11,8 @@
autoware_cmake
- autoware_ad_api_msgs
autoware_ad_api_specs
+ autoware_adapi_v1_msgs
component_interface_utils
rclcpp
tier4_localization_msgs
diff --git a/system/default_ad_api_helpers/automatic_pose_initializer/package.xml b/system/default_ad_api_helpers/automatic_pose_initializer/package.xml
index e6a351b392680..cff20de603f7f 100644
--- a/system/default_ad_api_helpers/automatic_pose_initializer/package.xml
+++ b/system/default_ad_api_helpers/automatic_pose_initializer/package.xml
@@ -11,8 +11,8 @@
autoware_cmake
- autoware_ad_api_msgs
autoware_ad_api_specs
+ autoware_adapi_v1_msgs
component_interface_utils
rclcpp