Skip to content

Commit 02acf2c

Browse files
committed
simplify project
remove empty object file reorder imports & remove unneeded simplify main
1 parent b853755 commit 02acf2c

File tree

7 files changed

+26
-33
lines changed

7 files changed

+26
-33
lines changed

Makefile

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CXX=clang++
22
CPPFLAGS += -MMD -MP
33
CXXFLAGS += --std=c++20 -pedantic-errors -Weverything -Wno-c++98-compat -Wno-pre-c++20-compat-pedantic
4-
LDFLAGS += -Llib -fvisibility=default
4+
LDFLAGS += -Llib -fvisibility=default
55
LDLIBS += -lgetargv
66

77
.PHONY := run db clean
@@ -10,7 +10,7 @@ LDLIBS += -lgetargv
1010
run: bin/main
1111
bin/main
1212

13-
lib/libgetargv++.dylib: obj/libgetargv++.o obj/argv.o obj/argvargc.o | lib
13+
lib/libgetargv++.dylib: obj/argv.o obj/argvargc.o | lib
1414
$(CXX) -dynamiclib $(CXXFLAGS) $(LDFLAGS) $(LDLIBS) $^ -o $@
1515

1616
bin/main: lib/libgetargv++.dylib obj/main.o | bin
@@ -24,7 +24,7 @@ bin lib obj:
2424

2525
db: compile_commands.json
2626

27-
compile_commands.json:
27+
compile_commands.json: Makefile
2828
bear -- make -B bin/main
2929

3030
clean:

src/argv.cpp

-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#include <cerrno>
2-
#include <cstdint>
32
#include <stdexcept>
4-
#include <string>
53
#include <system_error>
64

75
#include "libgetargv++.hpp"

src/argvargc.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include <cerrno>
22
#include <stdexcept>
3-
#include <string>
43
#include <system_error>
54

65
#include "libgetargv++.hpp"

src/iter.hpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22
#define ITERGEN
33

44
#include <iterator>
5+
namespace IterGen {
56

67
template <typename T> struct Iterator {
78
using iterator_concept [[maybe_unused]] = std::contiguous_iterator_tag;
89
using difference_type = std::ptrdiff_t;
910
using element_type = T;
10-
//using value_type = element_type; // ← compiler doesn't seem to need this, but everyone online says it's needed…
11+
// using value_type = element_type; // ← compiler doesn't seem to need this,
12+
// but everyone online says it's needed…
1113
using pointer = element_type *;
1214
using reference = element_type &;
1315

@@ -65,4 +67,5 @@ template <typename T> struct Iterator {
6567
private:
6668
pointer _ptr;
6769
};
70+
} // namespace IterGen
6871
#endif

src/libgetargv++.cpp

Whitespace-only changes.

src/libgetargv++.hpp

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
#include "iter.hpp"
2-
#include <cstddef>
3-
41
#ifndef LIBGETARGVPLUSPLUS_H
52
#define LIBGETARGVPLUSPLUS_H
63

4+
#include "iter.hpp"
5+
#include <cstddef>
6+
#include <string>
7+
#include <vector>
8+
79
namespace ffi {
810
#include <libgetargv.h>
911
}
1012

11-
/* TODO:
12-
- tests
13-
*/
13+
// TODO: tests
1414

1515
namespace Getargv {
1616

1717
struct Argv : protected ffi::ArgvResult {
18-
using Iterator = Iterator<char>;
18+
using Iterator = IterGen::Iterator<char>;
1919

2020
static Argv as_bytes(pid_t pid, unsigned int skip = 0,
2121
bool nuls = false) noexcept(false);
@@ -35,15 +35,15 @@ struct Argv : protected ffi::ArgvResult {
3535
};
3636

3737
struct ArgvArgc : protected ffi::ArgvArgcResult {
38-
using Iterator = Iterator<char *>;
38+
using Iterator = IterGen::Iterator<char *>;
3939

4040
static ArgvArgc as_array(pid_t pid) noexcept(false);
4141
static std::vector<std::string> as_string_array(pid_t pid) noexcept(false);
4242
ArgvArgc(ArgvArgc &r) = delete;
4343
ArgvArgc(ffi::ArgvArgcResult &r);
4444
~ArgvArgc();
4545

46-
char *&operator[](const ptrdiff_t index) const;
46+
char *&operator[](const ptrdiff_t index) const;//auto converts to std::string
4747
ptrdiff_t size() const;
4848
bool empty() const;
4949
Iterator begin() const;

src/main.cpp

+10-17
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,26 @@
11
#include <algorithm>
2+
#include <iostream>
23
#include <type_traits>
34
#include <unistd.h>
45

56
#include "libgetargv++.hpp"
67
using Getargv::Argv;
78
using Getargv::ArgvArgc;
89

9-
#include <iostream>
10+
int main(int argc, char *argv[]) {
11+
char **end = argv + argc;
12+
bool nuls =
13+
(argc > 1) && std::find_if(argv, end, [](auto c) { return c == "-0"; });
1014

11-
int main() {
12-
pid_t pid = getpid();
15+
char **itr = std::find(argv, end, "-s");
16+
unsigned int skip = (itr != end && ++itr != end) ? static_cast<unsigned int>(std::stoul(*itr)) : 0;
17+
18+
pid_t pid = (argc > 1) ? std::stoi(argv[argc - 1]) : getpid();
1319

1420
static_assert(std::contiguous_iterator<Argv::Iterator>);
1521
static_assert(std::contiguous_iterator<ArgvArgc::Iterator>);
1622

17-
ArgvArgc array = ArgvArgc::as_array(pid);
18-
for (auto s : array) {
19-
std::cout << std::string(s) << "\n";
20-
}
21-
std::cout << "length: " << array.size() << "\n";
22-
std::cout << "length: " << std::distance(array.begin(), array.end()) << "\n";
23-
24-
Argv bytes = Argv::as_bytes(pid);
25-
for (auto c : bytes) {
26-
std::cout << c << "\n";
27-
}
28-
29-
std::cout << "length: " << bytes.size() << "\n";
30-
std::cout << "length: " << std::distance(bytes.begin(), bytes.end()) << "\n";
23+
Argv bytes = Argv::as_bytes(pid, skip, nuls);
3124

3225
if (!bytes.print()) {
3326
std::cerr << "printing fucked up\n";

0 commit comments

Comments
 (0)