forest-net
an overlay networks for large-scale virtual worlds
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator
MiscX.h
1 
9 #ifndef MISC_H
10 #define MISC_H
11 
12 #include "stdinc.h"
13 
14 namespace forest {
15 
16 
17 class Misc {
18 public:
19  // basic io helper functions
20  static char cflush(istream&, char);
21  static char rflush(istream&, char);
22  static bool verify(istream&, char);
23  static bool skipBlank(istream&);
24  static bool readNum(istream&, int&);
25  static bool readNum(istream&, char&);
26  static bool readNum(istream&, uint16_t&);
27  static bool readNum(istream&, uint32_t&);
28  static bool readWord(istream&, string&);
29  static bool readName(istream&, string&);
30  static bool readString(istream&, string&);
31  static void addNum2string(string&, int);
32  static void addNum2string(string&, uint64_t);
33  static string num2string(int);
34  static string num2string(uint64_t);
35  static string nstime2string(uint64_t);
36 
37  // functions to facilitate use of single character
38  // node names in small data structures
39  static char nam(int);
40  static int num(char);
41  static bool readNode(istream&, int&, int);
42  static void writeNode(ostream&, int, int);
43  static bool readAlpha(istream&, int&);
44  static void writeAlpha(ostream&, int);
45  static void addNode2string(string&, int, int);
46  static string node2string(int, int);
47 
48  // other stuff
49  static bool prefix(string, string);
50  static void genPerm(int, int*);
51  static int strnlen(char*, int);
52  static time_t currentTime();
53  static uint32_t getTime();
54  static uint64_t getTimeNs();
55 };
56 
62 inline char Misc::nam(int u) { return char(u + ('a'-1)); }
63 
69 inline int Misc::num(char c) { return int(c - ('a'-1)); }
70 
75 inline void Misc::addNum2string(string& s, int i) {
76  stringstream ss; ss << i;
77  s += ss.str();
78 }
79 
80 inline void Misc::addNum2string(string& s, uint64_t i) {
81  stringstream ss; ss << i;
82  s += ss.str();;
83 }
84 
90 inline string Misc::num2string(int i) {
91  char buf[16]; sprintf(buf,"%d",i); s = buf;
92  return s;
93 }
94 inline string Misc::num2string(uint64_t i) {
95  stringstream ss; ss << i; s = ss.str();
96  return s;
97 }
98 
105 inline string Misc::nstime2string(uint64_t t) {
106  uint64_t sec = t/1000000000;
107  uint64_t frac = (t/1000)%1000000;
108 
109  stringstream ss;
110  ss << sec << "." << setfill('0') << setw(6) << frac;
111  s = ss.str();
112  return s;
113 }
114 
123 inline void Misc::addNode2string(string& s, int u, int n) {
124  if (1 <= n && n <= 26) s += nam(u);
125  else addNum2strings,u);
126 }
127 
136 inline string Misc::node2string(int u, int n) {
137  if (1 <= n && n <= 26) s = nam(u);
138  else num2stringu,s);
139  return s;
140 }
141 
142 } // ends namespace
143 
144 
145 #endif