1 // compat.cc
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 //
15 //
16 // \file
17 // Google compatibility definitions.
18
19 #include <cstring>
20
21 #include "fst/lib/compat.h"
22
23 DEFINE_int32(v, 0, "verbose level");
24 DEFINE_bool(help, false, "verbose level");
25 DEFINE_string(tmpdir, "/tmp/", "temporary directory");
26
27 static string prog_name;
28 static string flag_usage;
29
out_of_memory()30 static void out_of_memory() {
31 fprintf(stderr, "%s: Memory allocation failed\n", prog_name.c_str());
32 exit(1);
33 }
34
InitFst(const char * usage,int * argc,char *** argv,bool remove_flags)35 void InitFst(const char *usage, int *argc, char ***argv, bool remove_flags) {
36 prog_name = (*argv)[0];
37 set_new_handler(out_of_memory);
38
39 flag_usage = usage;
40 int index = 1;
41 for (; index < *argc; ++index) {
42 string argval = (*argv)[index];
43
44 if (argval[0] != '-' || argval == "-")
45 break;
46 while (argval[0] == '-')
47 argval = argval.substr(1); // remove initial '-'s
48
49 string arg = argval;
50 string val = "";
51
52 // split argval (arg=val) into arg and val
53 size_t pos = argval.find("=");
54 if (pos != string::npos) {
55 arg = argval.substr(0, pos);
56 val = argval.substr(pos + 1);
57 }
58
59 FlagRegister<bool> *bool_register =
60 FlagRegister<bool>::GetRegister();
61 if (bool_register->InitFlag(arg, val))
62 continue;
63 FlagRegister<string> *string_register =
64 FlagRegister<string>::GetRegister();
65 if (string_register->InitFlag(arg, val))
66 continue;
67 FlagRegister<int32> *int32_register =
68 FlagRegister<int32>::GetRegister();
69 if (int32_register->InitFlag(arg, val))
70 continue;
71 FlagRegister<int64> *int64_register =
72 FlagRegister<int64>::GetRegister();
73 if (int64_register->InitFlag(arg, val))
74 continue;
75 FlagRegister<double> *double_register =
76 FlagRegister<double>::GetRegister();
77 if (double_register->InitFlag(arg, val))
78 continue;
79
80 LOG(FATAL) << "FlagInit: Bad option: " << (*argv)[index];
81 }
82
83 if (remove_flags) {
84 for (int i = 0; i < *argc - index; ++i)
85 (*argv)[i + 1] = (*argv)[i + index];
86 *argc -= index - 1;
87 }
88
89 if (FLAGS_help) {
90 ShowUsage();
91 exit(1);
92 }
93 }
94
ShowUsage()95 void ShowUsage() {
96 std::cout << flag_usage << "\n";
97 std::cout << " Flags Description:\n";
98 FlagRegister<bool> *bool_register = FlagRegister<bool>::GetRegister();
99 bool_register->ShowUsage();
100 FlagRegister<string> *string_register = FlagRegister<string>::GetRegister();
101 string_register->ShowUsage();
102 FlagRegister<int32> *int32_register = FlagRegister<int32>::GetRegister();
103 int32_register->ShowUsage();
104 FlagRegister<int64> *int64_register = FlagRegister<int64>::GetRegister();
105 int64_register->ShowUsage();
106 FlagRegister<double> *double_register = FlagRegister<double>::GetRegister();
107 double_register->ShowUsage();
108 }
109
SplitToVector(char * full,const char * delim,vector<char * > * vec,bool omit_empty_strings)110 void SplitToVector(char* full, const char* delim, vector<char*>* vec,
111 bool omit_empty_strings) {
112 char* next = full;
113 while((next = strsep(&full, delim)) != NULL) {
114 if (omit_empty_strings && next[0] == '\0') continue;
115 vec->push_back(next);
116 }
117 // Add last element (or full string if no delimeter found):
118 if (full != NULL) {
119 vec->push_back(full);
120 }
121 }
122
123
MD5()124 MD5::MD5() {} // ?OP?
125
Reset()126 void MD5::Reset() {} // ?OP?
127
Update(void const * data,int size)128 void MD5::Update(void const *data, int size) {} // ?OP?
129
Digest()130 string MD5::Digest() { return ""; } // every matches! ?OP?
131
132
Mutex()133 Mutex::Mutex() {} // ?OP?
134
MutexLock(Mutex * mutex)135 MutexLock::MutexLock(Mutex *mutex) {} // ?OP?
136