]> git.llucax.com Git - z.facultad/75.74/practicos.git/blob - practicas/pipi/src/ipaddr.cpp
Se generaliza el devque para seguir (ab)usándolo como cola y poder pedir de
[z.facultad/75.74/practicos.git] / practicas / pipi / src / ipaddr.cpp
1
2 #include "ipaddr.h"
3 #include <sstream>
4
5 /// Constructor
6 IPAddr::IPAddr()
7 {
8     atoms[0] = 0;
9     atoms[1] = 0;
10     atoms[2] = 0;
11     atoms[3] = 0;
12 }
13
14 /// Constructor
15 IPAddr::IPAddr(atom a1, atom a2, atom a3, atom a4)
16 {
17     atoms[0] = a1;
18     atoms[1] = a2;
19     atoms[2] = a3;
20     atoms[3] = a4;
21 }
22
23 /// Constructor
24 IPAddr::IPAddr(uint32_t ip)
25 {
26     atoms[0] = ip >> 24;
27     atoms[1] = ip >> 16;
28     atoms[2] = ip >> 8;
29     atoms[3] = ip;
30 }
31
32 #if 0
33 /// Constructor
34 IPAddr::IPAddr(const char* ip) throw (std::logic_error)
35 {
36     std::istringstream iss(ip);
37     std::string ips;
38     for (int i = 0; i < 4; ++i)
39     {
40         if (!std::getline(iss, ips, '.'))
41             throw std::logic_error("Dirección IP inválida");
42         atoms[i] = std::atoi(ips.c_str());
43     }
44 }
45 #endif
46
47 /// Constructor
48 IPAddr::IPAddr(const std::string& ip) throw (std::logic_error)
49 {
50     std::istringstream iss(ip);
51     std::string ips;
52     for (int i = 0; i < 4; ++i)
53     {
54         if (!std::getline(iss, ips, '.'))
55             throw std::logic_error("Dirección IP inválida");
56         atoms[i] = std::atoi(ips.c_str());
57     }
58 }
59
60 /// Operador de casteo a unsigned
61 IPAddr::operator uint32_t () const
62 {
63     return (atoms[0] << 24) + (atoms[1] << 16) + (atoms[2] << 8) + atoms[3];
64 }
65
66 /// Operador de casteo a std::string
67 IPAddr::operator std::string () const
68 {
69     std::ostringstream oss;
70     oss << unsigned(atoms[0]) << "." << unsigned(atoms[1]) << "."
71         << unsigned(atoms[2]) << "." << unsigned(atoms[3]);
72     return oss.str();
73 }
74
75 std::ostream& operator<< (std::ostream& os, const IPAddr& ip)
76 {
77     return os << std::string(ip);
78 }
79
80 // vim: set et sw=4 sts=4 :