StringUtils.cc
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:5k
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #include "hadoop/StringUtils.hh"
- #include "hadoop/SerialUtils.hh"
- #include <errno.h>
- #include <stdint.h>
- #include <stdio.h>
- #include <strings.h>
- #include <sys/time.h>
- using std::string;
- using std::vector;
- namespace HadoopUtils {
- string toString(int32_t x) {
- char str[100];
- sprintf(str, "%d", x);
- return str;
- }
- int toInt(const string& val) {
- int result;
- char trash;
- int num = sscanf(val.c_str(), "%d%c", &result, &trash);
- HADOOP_ASSERT(num == 1,
- "Problem converting " + val + " to integer.");
- return result;
- }
- float toFloat(const string& val) {
- float result;
- char trash;
- int num = sscanf(val.c_str(), "%f%c", &result, &trash);
- HADOOP_ASSERT(num == 1,
- "Problem converting " + val + " to float.");
- return result;
- }
- bool toBool(const string& val) {
- if (val == "true") {
- return true;
- } else if (val == "false") {
- return false;
- } else {
- HADOOP_ASSERT(false,
- "Problem converting " + val + " to boolean.");
- }
- }
- /**
- * Get the current time in the number of milliseconds since 1970.
- */
- uint64_t getCurrentMillis() {
- struct timeval tv;
- struct timezone tz;
- int sys = gettimeofday(&tv, &tz);
- HADOOP_ASSERT(sys != -1, strerror(errno));
- return tv.tv_sec * 1000 + tv.tv_usec / 1000;
- }
- vector<string> splitString(const std::string& str,
- const char* separator) {
- vector<string> result;
- string::size_type prev_pos=0;
- string::size_type pos=0;
- while ((pos = str.find_first_of(separator, prev_pos)) != string::npos) {
- if (prev_pos < pos) {
- result.push_back(str.substr(prev_pos, pos-prev_pos));
- }
- prev_pos = pos + 1;
- }
- if (prev_pos < str.size()) {
- result.push_back(str.substr(prev_pos));
- }
- return result;
- }
- string quoteString(const string& str,
- const char* deliminators) {
-
- string result(str);
- for(int i=result.length() -1; i >= 0; --i) {
- char ch = result[i];
- if (!isprint(ch) ||
- ch == '\' ||
- strchr(deliminators, ch)) {
- switch (ch) {
- case '\':
- result.replace(i, 1, "\\");
- break;
- case 't':
- result.replace(i, 1, "\t");
- break;
- case 'n':
- result.replace(i, 1, "\n");
- break;
- case ' ':
- result.replace(i, 1, "\s");
- break;
- default:
- char buff[4];
- sprintf(buff, "\%02x", static_cast<unsigned char>(result[i]));
- result.replace(i, 1, buff);
- }
- }
- }
- return result;
- }
- string unquoteString(const string& str) {
- string result(str);
- string::size_type current = result.find('\');
- while (current != string::npos) {
- if (current + 1 < result.size()) {
- char new_ch;
- int num_chars;
- if (isxdigit(result[current+1])) {
- num_chars = 2;
- HADOOP_ASSERT(current + num_chars < result.size(),
- "escape pattern \<hex><hex> is missing second digit in '"
- + str + "'");
- char sub_str[3];
- sub_str[0] = result[current+1];
- sub_str[1] = result[current+2];
- sub_str[2] = ' ';
- char* end_ptr = NULL;
- long int int_val = strtol(sub_str, &end_ptr, 16);
- HADOOP_ASSERT(*end_ptr == ' ' && int_val >= 0,
- "escape pattern \<hex><hex> is broken in '" + str + "'");
- new_ch = static_cast<char>(int_val);
- } else {
- num_chars = 1;
- switch(result[current+1]) {
- case '\':
- new_ch = '\';
- break;
- case 't':
- new_ch = 't';
- break;
- case 'n':
- new_ch = 'n';
- break;
- case 's':
- new_ch = ' ';
- break;
- default:
- string msg("unknow n escape character '");
- msg += result[current+1];
- HADOOP_ASSERT(false, msg + "' found in '" + str + "'");
- }
- }
- result.replace(current, 1 + num_chars, 1, new_ch);
- current = result.find('\', current+1);
- } else {
- HADOOP_ASSERT(false, "trailing \ in '" + str + "'");
- }
- }
- return result;
- }
- }