Skip to content

Commit f98ae9d

Browse files
committed
init
0 parents  commit f98ae9d

File tree

5 files changed

+166
-0
lines changed

5 files changed

+166
-0
lines changed

.gitignore

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#git rm --cached `git ls-files -i --exclude-from=.gitignore`
2+
*.d
3+
4+
*.slo
5+
*.lo
6+
*.o
7+
*.obj
8+
9+
*.gch
10+
*.pch
11+
12+
*.so
13+
*.dylib
14+
*.dll
15+
16+
*.mod
17+
*.smod
18+
19+
*.lai
20+
*.la
21+
*.a
22+
*.lib
23+
24+
*.exe
25+
*.out
26+
*.app
27+
28+
*.cmake
29+
30+
print_ip
31+
LICENSE
32+
main
33+
makefile
34+
test_version
35+
version.h

.travis.yml

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
language: generic
2+
3+
before_script:
4+
- sudo apt-get install doxygen
5+
6+
script:
7+
- cmake .
8+
- cmake --build .
9+
- cmake --build . --target package
10+
- doxygen $TRAVIS_BUILD_DIR/doc/Doxyfile
11+
12+
deploy:
13+
- provider: script
14+
skip_cleanup: true
15+
script:
16+
- curl -T print_ip-0.0.$TRAVIS_BUILD_NUMBER-Linux.deb -uromalxr:$BINTRAY_API_KEY "https://api.bintray.com/content/romalxr/otus/lesson4/$TRAVIS_BUILD_NUMBER/print_ip-0.0.$TRAVIS_BUILD_NUMBER-Linux.deb;deb_distribution=trusty;deb_component=main;deb_architecture=amd64;publish=1"
17+
- provider: pages
18+
skip_cleanup: true
19+
github_token: $GITHUB_TOKEN
20+
keep_history: true
21+
local-dir: doc
22+
on:
23+
branch: master

CMakeLists.txt

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
cmake_minimum_required(VERSION 3.2.2)
2+
3+
if (NOT "$ENV{TRAVIS_BUILD_NUMBER}" STREQUAL "")
4+
project(print_ip VERSION 0.0.$ENV{TRAVIS_BUILD_NUMBER})
5+
else()
6+
project(print_ip VERSION 0.0.1)
7+
endif()
8+
9+
set(CMAKE_CXX_STANDARD 14)
10+
11+
configure_file(version.h.in version.h)
12+
13+
add_executable(print_ip print_ip.cpp)
14+

print_ip.cpp

+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
#include<iostream>
2+
#include<list>
3+
#include<vector>
4+
#include<string>
5+
#include<tuple>
6+
#include<type_traits>
7+
8+
template<typename Tuple, std::size_t N>
9+
struct TuplePrinter {
10+
static void print(const Tuple& t)
11+
{
12+
TuplePrinter<Tuple, N-1>::print(t);
13+
std::cout << "." << std::get<N-1>(t);
14+
}
15+
};
16+
17+
template<typename Tuple>
18+
struct TuplePrinter<Tuple, 1> {
19+
static void print(const Tuple& t)
20+
{
21+
std::cout << std::get<0>(t);
22+
}
23+
};
24+
25+
//! Функция печати адреса для контейнеров
26+
template <
27+
typename T,
28+
typename std::enable_if<
29+
!(std::is_integral<T>::value
30+
|| std::is_same<T, std::string>::value),
31+
T*
32+
>::type = nullptr
33+
>
34+
void print(const T& val)
35+
{
36+
for(auto i=val.begin();i!=val.end();++i)std::cout<<*i<<(i==--val.end() ?'\n':'.');
37+
}
38+
39+
//! Функция печати адреса для строки
40+
template <
41+
typename T,
42+
typename std::enable_if<
43+
std::is_same<T,std::string>::value,
44+
T*
45+
>::type = nullptr
46+
>
47+
void print(const T& val)
48+
{
49+
std::cout<<val<<std::endl;
50+
}
51+
52+
//! Функция печати адреса для целочисленных типов
53+
template <
54+
typename T,
55+
typename std::enable_if<
56+
std::is_integral<T>::value,
57+
T*
58+
>::type = nullptr
59+
>
60+
void print(T val)
61+
{
62+
size_t bytes = sizeof(val);
63+
for (size_t i = 1; i <= bytes; i++)
64+
{
65+
std::cout << ((i > 1) ? "." : "") << (unsigned int)(reinterpret_cast<unsigned char*>(&val))[bytes - i];
66+
}
67+
68+
std::cout << std::endl;
69+
}
70+
71+
//! Функция печати адреса для кортежей
72+
template<class... Args>
73+
void print(std::tuple<Args...> t)
74+
{
75+
TuplePrinter<decltype(t), sizeof...(Args)>::print(t);
76+
std::cout<<std::endl;
77+
};
78+
79+
int main()
80+
{
81+
print( char(-1));
82+
print( short(0));
83+
print( int(2130706433));
84+
print( long(8875824491850138409));
85+
print( std::string("255.255.255.255"));
86+
print( std::vector<int>{1,2,3,4});
87+
print( std::list<short>{12,34,56,78});
88+
print( std::make_tuple(100,200,300,400));
89+
90+
return 0;
91+
}

version.h.in

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#pragma once
2+
3+
#cmakedefine PROJECT_VERSION_PATCH @PROJECT_VERSION_PATCH@

0 commit comments

Comments
 (0)