Home | History | Annotate | Download | only in lib
      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 
     30 static void out_of_memory() {
     31   fprintf(stderr, "%s: Memory allocation failed\n", prog_name.c_str());
     32   exit(1);
     33 }
     34 
     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 
     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 
    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 
    124 MD5::MD5() {}  // ?OP?
    125 
    126 void MD5::Reset() {}  // ?OP?
    127 
    128 void MD5::Update(void const *data, int size) {}  // ?OP?
    129 
    130 string MD5::Digest() { return ""; }  // every matches! ?OP?
    131 
    132 
    133 Mutex::Mutex() {}  // ?OP?
    134 
    135 MutexLock::MutexLock(Mutex *mutex) {}  // ?OP?
    136