File tree Expand file tree Collapse file tree 4 files changed +195
-0
lines changed
Expand file tree Collapse file tree 4 files changed +195
-0
lines changed Original file line number Diff line number Diff line change 1+ ; ;; Directory Local Variables
2+ ; ;; For more information see (info "(emacs) Directory Variables")
3+
4+ ((nil . ((flycheck-pylintrc . " pylintrc" )))
5+ (nil . ((flycheck-gcc-language-standard . " c++2a" )))
6+ (nil . ((flycheck-clang-language-standard . " c++2a" ))))
Original file line number Diff line number Diff line change 1+ MAKEFLAGS += --no-builtin-rules
2+ .SUFFIXES :
3+ .DEFAULT_GOAL := build/main
4+
5+ CXXFLAGS += -std=c++2a -fPIC -ggdb -g -fno-strict-aliasing
6+ CXXFLAGS += -fno-omit-frame-pointer # enables libasan to provide complete stack traces
7+ CXXFLAGS += -Wall -Werror -Wextra -Wpedantic -Wno-unused-parameter
8+ CXXFLAGS += -Og -fsanitize=address -fsanitize=undefined
9+
10+ CPP_FILES := $(shell find . -iname '* .cpp' -print)
11+ OBJECTS := $(CPP_FILES:%.cpp=build/%.o )
12+
13+ ifneq ($(MAKECMDGOALS ) ,clean)
14+ -include $(OBJECTS :% .o=% .d)
15+ -include $(PROFILE_OBJECTS :% .o=% .d)
16+ -include $(SMALL_OBJECTS :% .o=% .d)
17+ endif
18+
19+ .PHONY : ctags
20+ ctags :
21+ rm -rf TAGS
22+ ctags -e -R .
23+
24+ build/% .d : % .cpp
25+ @mkdir -p $(@D )
26+ $(CXX ) $(CXXFLAGS ) $< -MG -M -MF $@ -MT $(@:%.d=%.o )
27+
28+ build/% .o : % .cpp
29+ @mkdir -p $(@D )
30+ $(CXX ) $(CXXFLAGS ) -MD -MF $(@:%.o=%.d ) -MT $@ -c $< -o $@
31+
32+ build/% : build/% .o
33+ $(CXX ) $(CXXFLAGS ) $(LDFLAGS ) \
34+ -ldl \
35+ -o $@ \
36+ $(filter % .o,$^ )
37+
38+ .PHONY : clean
39+ clean :
40+ rm -rf build
41+
42+ .PHONY : test
43+ test :
44+ ./test.sh
Original file line number Diff line number Diff line change 1+ #include < iostream>
2+ #include < optional>
3+ #include < map>
4+ #include < string>
5+ #include < variant>
6+ #include < vector>
7+
8+ class LSM {
9+ std::map<int32_t , int32_t > m;
10+ public:
11+ void put (int32_t k, int32_t v) {
12+ // ???
13+ }
14+ std::optional<int32_t > get (int32_t k) {
15+ // ???
16+ }
17+ std::vector<std::pair<int32_t , int32_t >> range (int32_t l, int32_t r) {
18+ // ???
19+ }
20+ void del (int32_t k) {
21+ // ???
22+ }
23+ };
24+
25+ int main (int argc, const char ** argv) {
26+ if (argc != 1 ) {
27+ std::cerr << " USAGE: main" << std::endl;
28+ return 1 ;
29+ }
30+
31+ LSM lsm;
32+
33+ auto & in = std::cin;
34+ for (std::string line; std::getline (in, line);) {
35+ switch (line[0 ]) {
36+ case ' p' : {
37+ size_t next;
38+ int k = std::stoi (line.substr (2 ), &next);
39+ int v = std::stoi (line.substr (2 + next + 1 ));
40+ lsm.put (k, v);
41+ break ;
42+ }
43+ case ' g' : {
44+ int k = std::stoi (line.substr (2 ));
45+ auto x = lsm.get (k);
46+ if (x) {
47+ std::cout << x.value ();
48+ }
49+ std::cout << " \n " ;
50+ break ;
51+ }
52+ case ' r' : {
53+ size_t next;
54+ int l = std::stoi (line.substr (2 ), &next);
55+ int r = std::stoi (line.substr (2 + next + 1 ));
56+ auto x = lsm.range (l, r);
57+ auto begin = x.cbegin ();
58+ auto end = x.cend ();
59+ if (begin != end) {
60+ std::cout << begin->first << " :" << begin->second ;
61+ ++begin;
62+ for (; begin != end; ++begin) {
63+ std::cout << " " << begin->first << " :" << begin->second ;
64+ }
65+ }
66+ std::cout << " \n " ;
67+ break ;
68+ }
69+ case ' d' : {
70+ int k = std::stoi (line.substr (2 ));
71+ lsm.del (k);
72+ break ;
73+ }
74+ default :
75+ std::cout << " unrecognized command " << line << std::endl;
76+ exit (4 );
77+ }
78+ }
79+ }
Original file line number Diff line number Diff line change 1+ #! /bin/bash
2+ set -e
3+
4+ echo 1
5+ build/main > build/out 2> build/err << EOF
6+ p 10 7
7+ p 63 222
8+ p 10 5
9+ EOF
10+ rm -rf build/expected; touch build/expected
11+ diff build/out build/expected
12+ echo success
13+
14+ echo 2
15+ build/main > build/out 2> build/err << EOF
16+ p 10 7
17+ p 63 222
18+ g 10
19+ g 15
20+ p 15 5
21+ g 15
22+ EOF
23+ cat > build/expected << EOF
24+ 7
25+
26+ 5
27+ EOF
28+ diff build/out build/expected
29+ echo success
30+
31+ echo 3
32+ build/main > build/out 2> build/err << EOF
33+ p 10 7
34+ p 13 2
35+ p 17 99
36+ p 12 22
37+ r 10 12
38+ r 10 15
39+ r 14 17
40+ r 0 100
41+ EOF
42+ cat > build/expected << EOF
43+ 10:7
44+ 10:7 12:22 13:2
45+
46+ 10:7 12:22 13:2 17:99
47+ EOF
48+ diff build/out build/expected
49+ echo success
50+
51+ echo 4
52+ build/main > build/out 2> build/err << EOF
53+ p 10 7
54+ p 12 5
55+ g 10
56+ d 10
57+ g 10
58+ g 12
59+ EOF
60+ cat > build/expected << EOF
61+ 7
62+
63+ 5
64+ EOF
65+ diff build/out build/expected
66+ echo success
You can’t perform that action at this time.
0 commit comments