Skip to content

Commit ec174c6

Browse files
committed
Improve the time complexity to O(n) and use cpj_string_t as the parameter passing for APIs
1 parent aea8a19 commit ec174c6

File tree

15 files changed

+1235
-2399
lines changed

15 files changed

+1235
-2399
lines changed

.markdownlint.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"MD013": false,
3+
"MD024": false
4+
}

CMakeLists.txt

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.9.2)
1+
cmake_minimum_required(VERSION 3.10)
22

33
# set project name
44
project(cpj
@@ -175,6 +175,7 @@ if(ENABLE_TESTS)
175175
create_test(DEFAULT normalize mixed)
176176
create_test(DEFAULT normalize overlap)
177177
create_test(DEFAULT normalize empty)
178+
create_test(DEFAULT normalize zero_length)
178179
create_test(DEFAULT normalize only_separators)
179180
create_test(DEFAULT normalize back_after_root)
180181
create_test(DEFAULT normalize forward_slashes)
@@ -213,25 +214,6 @@ if(ENABLE_TESTS)
213214
create_test(DEFAULT root change_separators)
214215
create_test(DEFAULT root change_overlapping)
215216
create_test(DEFAULT root change_without_root)
216-
create_test(DEFAULT segment first)
217-
create_test(DEFAULT segment last)
218-
create_test(DEFAULT segment next)
219-
create_test(DEFAULT segment next_too_far)
220-
create_test(DEFAULT segment previous_absolute)
221-
create_test(DEFAULT segment previous_relative)
222-
create_test(DEFAULT segment previous_absolute_one_char_first)
223-
create_test(DEFAULT segment previous_relative_one_char_first)
224-
create_test(DEFAULT segment previous_too_far)
225-
create_test(DEFAULT segment previous_too_far_root)
226-
create_test(DEFAULT segment type)
227-
create_test(DEFAULT segment back_with_root)
228-
create_test(DEFAULT segment change_simple)
229-
create_test(DEFAULT segment change_first)
230-
create_test(DEFAULT segment change_last)
231-
create_test(DEFAULT segment change_trim)
232-
create_test(DEFAULT segment change_empty)
233-
create_test(DEFAULT segment change_with_separator)
234-
create_test(DEFAULT segment change_overlap)
235217
create_test(DEFAULT windows get_root)
236218
create_test(DEFAULT windows get_unc_root)
237219
create_test(DEFAULT windows get_root_separator)
@@ -255,7 +237,6 @@ if(ENABLE_TESTS)
255237
"${TEST_DIRECTORY}/normalize_test.c"
256238
"${TEST_DIRECTORY}/relative_test.c"
257239
"${TEST_DIRECTORY}/root_test.c"
258-
"${TEST_DIRECTORY}/segment_test.c"
259240
"${TEST_DIRECTORY}/windows_test.c")
260241
enable_warnings(cpjtest)
261242

docs/reference/cwk_path_has_extension.md

Lines changed: 0 additions & 62 deletions
This file was deleted.

docs/reference/index.md

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,96 +4,103 @@ description: A complete reference of the cpj path library for C/C++.
44
---
55

66
## Basics
7+
78
These are some basic, helpful functions available in the library. The basename is the last portion of the path which determines the name of the file or folder which is being pointed to. For instance, the path ``/var/log/test.txt`` would have the basename ``test.txt``. The dirname is the opposite - the path up to the basename. In that example the dirname would be ``/var/log``.
89

910
### Functions
10-
* **[cpj_path_get_basename_test]({{ site.baseurl }}{% link reference/cpj_path_get_basename_test.md %})**
11+
12+
* **[cpj_path_get_basename_test]({{ site.baseurl }}{% link reference/cpj_path_get_basename_test.md %})**
1113
Gets the basename of a file path.
1214

13-
* **[cpj_path_change_basename_test]({{ site.baseurl }}{% link reference/cpj_path_change_basename_test.md %})**
15+
* **[cpj_path_change_basename_test]({{ site.baseurl }}{% link reference/cpj_path_change_basename_test.md %})**
1416
Changes the basename of a file path.
1517

16-
* **[cpj_path_get_dirname_test]({{ site.baseurl }}{% link reference/cpj_path_get_dirname_test.md %})**
18+
* **[cpj_path_get_dirname_test]({{ site.baseurl }}{% link reference/cpj_path_get_dirname_test.md %})**
1719
Gets the dirname of a file path.
1820

19-
* **[cpj_path_get_root]({{ site.baseurl }}{% link reference/cpj_path_get_root.md %})**
21+
* **[cpj_path_get_root]({{ site.baseurl }}{% link reference/cpj_path_get_root.md %})**
2022
Determines the root of a path.
2123

22-
* **[cpj_path_change_root_test]({{ site.baseurl }}{% link reference/cpj_path_change_root_test.md %})**
24+
* **[cpj_path_change_root_test]({{ site.baseurl }}{% link reference/cpj_path_change_root_test.md %})**
2325
Changes the root of a path.
2426

25-
* **[cpj_path_is_absolute]({{ site.baseurl }}{% link reference/cpj_path_is_absolute.md %})**
27+
* **[cpj_path_is_absolute]({{ site.baseurl }}{% link reference/cpj_path_is_absolute.md %})**
2628
Determine whether the path is absolute or not.
2729

28-
* **[cpj_path_is_relative]({{ site.baseurl }}{% link reference/cpj_path_is_relative.md %})**
30+
* **[cpj_path_is_relative]({{ site.baseurl }}{% link reference/cpj_path_is_relative.md %})**
2931
Determine whether the path is relative or not.
3032

31-
* **[cpj_path_join_test]({{ site.baseurl }}{% link reference/cpj_path_join_test.md %})**
33+
* **[cpj_path_join_test]({{ site.baseurl }}{% link reference/cpj_path_join_test.md %})**
3234
Joins two paths together.
3335

34-
* **[cpj_path_join_multiple_test]({{ site.baseurl }}{% link reference/cpj_path_join_multiple_test.md %})**
36+
* **[cpj_path_join_multiple_test]({{ site.baseurl }}{% link reference/cpj_path_join_multiple_test.md %})**
3537
Joins multiple paths together.
3638

37-
* **[cpj_path_normalize_test]({{ site.baseurl }}{% link reference/cpj_path_normalize_test.md %})**
39+
* **[cpj_path_normalize_test]({{ site.baseurl }}{% link reference/cpj_path_normalize_test.md %})**
3840
Creates a normalized version of the path.
3941

40-
* **[cpj_path_intersection]({{ site.baseurl }}{% link reference/cpj_path_intersection.md %})**
42+
* **[cpj_path_intersection]({{ site.baseurl }}{% link reference/cpj_path_intersection.md %})**
4143
Finds common portions in two paths.
4244

4345
## Navigation
46+
4447
One might specify paths containing relative components ``../``. These functions help to resolve or create relative paths based on a base path.
4548

4649
### Functions
47-
* **[cpj_path_get_absolute_test]({{ site.baseurl }}{% link reference/cpj_path_get_absolute_test.md %})**
50+
51+
* **[cpj_path_get_absolute_test]({{ site.baseurl }}{% link reference/cpj_path_get_absolute_test.md %})**
4852
Generates an absolute path based on a base.
4953

50-
* **[cpj_path_get_relative_test]({{ site.baseurl }}{% link reference/cpj_path_get_relative_test.md %})**
54+
* **[cpj_path_get_relative_test]({{ site.baseurl }}{% link reference/cpj_path_get_relative_test.md %})**
5155
Generates a relative path based on a base.
5256

5357
## Extensions
58+
5459
Extensions are the portion of a path which come after a `.`. For instance, the file extension of the ``/var/log/test.txt`` would be ``.txt`` - which indicates that the content is text.
5560

5661
### Functions
57-
* **[cpj_path_get_extension_test]({{ site.baseurl }}{% link reference/cpj_path_get_extension_test.md %})**
58-
Gets the extension of a file path.
5962

60-
* **[cpj_path_has_extension_test]({{ site.baseurl }}{% link reference/cpj_path_has_extension_test.md %})**
61-
Determines whether the file path has an extension.
63+
* **[cpj_path_get_extension]({{ site.baseurl }}{% link reference/cpj_path_get_extension.md %})**
64+
Gets the extension of a file path.
6265

63-
* **[cpj_path_change_extension_test]({{ site.baseurl }}{% link reference/cpj_path_change_extension_test.md %})**
66+
* **[cpj_path_change_extension_test]({{ site.baseurl }}{% link reference/cpj_path_change_extension_test.md %})**
6467
Changes the extension of a file path.
6568

6669
## Segments
70+
6771
A segment represents a single component of a path. For instance, on linux a path might look like this ``/var/log/``, which consists of two segments ``var`` and ``log``.
6872

6973
### Functions
70-
* **[cpj_path_get_first_segment]({{ site.baseurl }}{% link reference/cpj_path_get_first_segment.md %})**
74+
75+
* **[cpj_path_get_first_segment]({{ site.baseurl }}{% link reference/cpj_path_get_first_segment.md %})**
7176
Gets the first segment of a path.
7277

73-
* **[cpj_path_get_last_segment]({{ site.baseurl }}{% link reference/cpj_path_get_last_segment.md %})**
78+
* **[cpj_path_get_last_segment]({{ site.baseurl }}{% link reference/cpj_path_get_last_segment.md %})**
7479
Gets the last segment of the path.
7580

76-
* **[cpj_path_get_next_segment]({{ site.baseurl }}{% link reference/cpj_path_get_next_segment.md %})**
81+
* **[cpj_path_get_next_segment]({{ site.baseurl }}{% link reference/cpj_path_get_next_segment.md %})**
7782
Advances to the next segment.
7883

79-
* **[cpj_path_get_previous_segment]({{ site.baseurl }}{% link reference/cpj_path_get_previous_segment.md %})**
84+
* **[cpj_path_get_previous_segment]({{ site.baseurl }}{% link reference/cpj_path_get_previous_segment.md %})**
8085
Moves to the previous segment.
8186

82-
* **[cpj_path_get_segment_type]({{ site.baseurl }}{% link reference/cpj_path_get_segment_type.md %})**
87+
* **[cpj_path_get_segment_type]({{ site.baseurl }}{% link reference/cpj_path_get_segment_type.md %})**
8388
Gets the type of the submitted path segment.
8489

85-
* **[cpj_path_change_segment]({{ site.baseurl }}{% link reference/cpj_path_change_segment.md %})**
90+
* **[cpj_path_change_segment]({{ site.baseurl }}{% link reference/cpj_path_change_segment.md %})**
8691
Changes the content of a segment.
8792

8893
## Style
94+
8995
The path style describes how paths are generated and parsed. **cpj** currently supports two path styles, ``CPJ_STYLE_WINDOWS`` and ``CPJ_STYLE_UNIX``.
9096

9197
### Functions
92-
* **[cpj_path_guess_style_test]({{ site.baseurl }}{% link reference/cpj_path_guess_style_test.md %})**
98+
99+
* **[cpj_path_guess_style]({{ site.baseurl }}{% link reference/cpj_path_guess_style.md %})**
93100
Guesses the path style.
94101

95-
* **[cpj_path_set_style]({{ site.baseurl }}{% link reference/cpj_path_set_style.md %})**
102+
* **[cpj_path_set_style]({{ site.baseurl }}{% link reference/cpj_path_set_style.md %})**
96103
Configures which path style is used.
97104

98-
* **[cpj_path_get_style]({{ site.baseurl }}{% link reference/cpj_path_get_style.md %})**
99-
Gets the path style configuration.
105+
* **[cpj_path_get_style]({{ site.baseurl }}{% link reference/cpj_path_get_style.md %})**
106+
Gets the path style configuration.

0 commit comments

Comments
 (0)