public static IEnumerable <RosPackageFolder> ConcatFolder(this IEnumerable <RosPackageFolder> packageFolders,
                                                                  string folder,
                                                                  RosPackageFolder.BuildType type = RosPackageFolder.BuildType.Optional)
        {
            if (string.IsNullOrEmpty(folder))
            {
                return(packageFolders);
            }

            var newItems = CreateRosPackageFolders(folder, type);

            return(packageFolders.Concat(newItems));
        }
        public static IEnumerable <RosPackageFolder> ConcatFolders(this IEnumerable <RosPackageFolder> packageFolders,
                                                                   IEnumerable <string> folders,
                                                                   RosPackageFolder.BuildType type = RosPackageFolder.BuildType.Optional)
        {
            if (folders == null)
            {
                return(packageFolders);
            }

            var newItems = folders
                           .SelectMany(f => CreateRosPackageFolders(f, type));

            return(packageFolders.Concat(newItems));
        }
        private static IEnumerable <RosPackageFolder> CreateRosPackageFolders(string folder, RosPackageFolder.BuildType type)
        {
            if (folder == null)
            {
                return(Enumerable.Empty <RosPackageFolder>());
            }

            var result = folder
                         .Split(':')
                         .SelectMany(x => RosPackageFolder.Find(x, type))
                         .ToList();

            return(result);
        }
        /// <summary>
        /// Add paths defined in $ROS_PACKAGE_PATH if condition is true.
        /// </summary>
        /// <param name="packagefolders"></param>
        /// <param name="condition">Folders in $ROS_PACKAGE_PATH are only add if this parameter is true</param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static IEnumerable <RosPackageFolder> ConcatRosPackagePathFolders(this IEnumerable <RosPackageFolder> packagefolders, bool condition, RosPackageFolder.BuildType type = RosPackageFolder.BuildType.Optional)
        {
            if (!condition)
            {
                return(packagefolders);
            }

            return(ConcatRosPackagePathFolders(packagefolders, type));
        }
        /// <summary>
        /// Add paths defined in $ROS_PACKAGE_PATH.
        /// </summary>
        /// <param name="packageFolders"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static IEnumerable <RosPackageFolder> ConcatRosPackagePathFolders(this IEnumerable <RosPackageFolder> packageFolders, RosPackageFolder.BuildType type = RosPackageFolder.BuildType.Optional)
        {
            var rosPackagePath = Environment.GetEnvironmentVariable("ROS_PACKAGE_PATH");

            return(ConcatFolder(packageFolders, rosPackagePath, type));
        }