idlutil.cc

来自「编译工具」· CC 代码 · 共 237 行

CC
237
字号
// -*- c++ -*-//                          Package   : omniidl// idlutil.cc               Created on: 1999/10/11//			    Author    : Duncan Grisby (dpg1)////    Copyright (C) 1999 AT&T Laboratories Cambridge////  This file is part of omniidl.////  omniidl is free software; you can redistribute it and/or modify it//  under the terms of the GNU General Public License as published by//  the Free Software Foundation; either version 2 of the License, or//  (at your option) any later version.////  This program is distributed in the hope that it will be useful,//  but WITHOUT ANY WARRANTY; without even the implied warranty of//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU//  General Public License for more details.////  You should have received a copy of the GNU General Public License//  along with this program; if not, write to the Free Software//  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA//  02111-1307, USA.//// Description://   //   Utility functions// $Id: idlutil.cc,v 1.5.2.7 2003/01/16 11:08:27 dgrisby Exp $// $Log: idlutil.cc,v $// Revision 1.5.2.7  2003/01/16 11:08:27  dgrisby// Patches to support Digital Mars C++. Thanks Christof Meerwald.//// Revision 1.5.2.6  2002/01/15 16:38:14  dpg1// On the road to autoconf. Dependencies refactored, configure.ac// written. No makefiles yet.//// Revision 1.5.2.5  2001/06/21 11:17:15  sll// Added darwin port.//// Revision 1.5.2.4  2001/06/08 17:12:24  dpg1// Merge all the bug fixes from omni3_develop.//// Revision 1.5.2.3  2000/10/27 16:31:10  dpg1// Clean up of omniidl dependencies and types, from omni3_develop.//// Revision 1.5.2.2  2000/10/10 10:18:51  dpg1// Update omniidl front-end from omni3_develop.//// Revision 1.3.2.2  2000/09/22 10:50:21  dpg1// Digital Unix uses strtoul, not strtoull//// Revision 1.3.2.1  2000/08/07 15:34:36  dpg1// Partial back-port of long long from omni3_1_develop.//// Revision 1.3  1999/11/04 17:16:54  dpg1// Changes for NT.//// Revision 1.2  1999/11/02 17:07:24  dpg1// Changes to compile on Solaris.//// Revision 1.1  1999/10/27 14:05:54  dpg1// *** empty log message ***//#include <string.h>#include <stdlib.h>#include <stdio.h>#include <idlutil.h>char* idl_strdup(const char* s){  if (s) {    char* ret = new char[strlen(s)+1];    strcpy(ret, s);    return ret;  }  else    return 0;}IDL_WChar* idl_wstrdup(const IDL_WChar* s){  if (s) {    int i, len;    for (len=0; s[len]; len++);    IDL_WChar* ret = new IDL_WChar[len+1];    for (i=0; i<len; i++)      ret[i] = s[i];    ret[i] = 0;    return ret;  }  else    return 0;}int idl_wstrlen(const IDL_WChar* s){  int l;  for (l=0; *s; ++s, ++l);  return l;}IDL_WChar* idl_wstrcpy(IDL_WChar* a, const IDL_WChar* b){  IDL_WChar* r = a;  for (; *b; ++a, ++b) *a = *b;  *a = 0;  return r;}IDL_WChar* idl_wstrcat(IDL_WChar* a, const IDL_WChar* b){  IDL_WChar* r = a;  for (; *a; ++a);  for (; *b; ++a, ++b) *a = *b;  *a = 0;  return r;}#ifndef HAVE_STRCASECMP#include <ctype.h>int strcasecmp(const char* s1, const char* s2){  for (; *s1 && *s2; ++s1, ++s2)    if (toupper(*s1) != toupper(*s2))      break;  if      (!*s1 && !*s2)                return 0;  else if (toupper(*s1) < toupper(*s2)) return -1;  else                                  return 1;}#endif#ifdef HAS_LongLong#  if defined(_MSC_VER)IdlIntLiteralidl_strtoul(const char* text, int base){  IdlIntLiteral ull;  switch (base) {  case 8:    sscanf(text, "%I64o", &ull);    break;  case 10:    sscanf(text, "%I64d", &ull);    break;  case 16:    sscanf(text, "%I64x", &ull);    break;  default:    abort();  }  return ull;}#  elif defined(__hpux__)IdlIntLiteralidl_strtoul(const char* text, int base){  IdlIntLiteral ull;  switch (base) {  case 8:    sscanf(text, "%llo", &ull);    break;  case 10:    sscanf(text, "%lld", &ull);    break;  case 16:    sscanf(text, "%llx", &ull);    break;  default:    abort();  }  return ull;}#  elif defined(HAVE_STRTOUL) && SIZEOF_LONG == 8IdlIntLiteralidl_strtoul(const char* text, int base){  return strtoul(text, 0, base);}#  elif defined(HAVE_STRTOUQ)IdlIntLiteralidl_strtoul(const char* text, int base){  return strtouq(text, 0, base);}#  elif defined(HAVE_STRTOULL)IdlIntLiteralidl_strtoul(const char* text, int base){  return strtoull(text, 0, base);}#  elseIdlIntLiteralidl_strtoul(const char* text, int base){  return strtoul(text, 0, base);}#  endif#else// No long long supportIdlIntLiteralidl_strtoul(const char* text, int base){  return strtoul(text, 0, base);}#endifIdlFloatLiteralidl_strtod(const char* text){  // *** Should cope with long double  return strtod(text,0);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?