utl_global.cpp
来自「这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用」· C++ 代码 · 共 1,322 行 · 第 1/3 页
CPP
1,322 行
AST_PredefinedType::PredefinedType pt
)
{
switch (pt) {
case AST_PredefinedType::PT_long:
return AST_Expression::EV_long;
case AST_PredefinedType::PT_ulong:
return AST_Expression::EV_ulong;
case AST_PredefinedType::PT_short:
return AST_Expression::EV_short;
case AST_PredefinedType::PT_ushort:
return AST_Expression::EV_ushort;
case AST_PredefinedType::PT_longlong:
return AST_Expression::EV_longlong;
case AST_PredefinedType::PT_ulonglong:
return AST_Expression::EV_ulonglong;
case AST_PredefinedType::PT_float:
return AST_Expression::EV_float;
case AST_PredefinedType::PT_double:
return AST_Expression::EV_double;
case AST_PredefinedType::PT_longdouble:
return AST_Expression::EV_longdouble;
case AST_PredefinedType::PT_char:
return AST_Expression::EV_char;
case AST_PredefinedType::PT_wchar:
return AST_Expression::EV_wchar;
case AST_PredefinedType::PT_octet:
return AST_Expression::EV_octet;
case AST_PredefinedType::PT_boolean:
return AST_Expression::EV_bool;
case AST_PredefinedType::PT_void:
return AST_Expression::EV_void;
default:
return AST_Expression::EV_enum;
}
}
// returns the IDL source file being copiled
UTL_String* IDL_GlobalData::idl_src_file (void)
{
return this->pd_idl_src_file;
}
// set the source IDL file that is being parsed
void IDL_GlobalData::idl_src_file (UTL_String *s)
{
this->pd_idl_src_file = s;
}
void
IDL_GlobalData::temp_dir (const char *s)
{
// Delete the old pointer.
delete [] this->temp_dir_;
// Allocate memory, 1 for the end of string.
ACE_NEW (this->temp_dir_,
char [ACE_OS::strlen (s) +
ACE_OS::strlen (ACE_DIRECTORY_SEPARATOR_STR) +
1]);
// Copy the strings.
ACE_OS::sprintf (this->temp_dir_,
"%s%s",
s,
ACE_DIRECTORY_SEPARATOR_STR);
}
const char *
IDL_GlobalData::temp_dir (void) const
{
return this->temp_dir_;
}
void
IDL_GlobalData::gperf_path (const char *s)
{
delete [] this->gperf_path_;
this->gperf_path_ = ACE::strnew (s);
}
const char *
IDL_GlobalData::gperf_path (void) const
{
return this->gperf_path_;
}
void
IDL_GlobalData::ident_string (const char *s)
{
delete [] this->ident_string_;
this->ident_string_ = ACE::strnew (s);
}
const char *
IDL_GlobalData::ident_string (void) const
{
return this->ident_string_;
}
void
IDL_GlobalData::obv_support (idl_bool val)
{
this->obv_support_ = val;
}
idl_bool
IDL_GlobalData::obv_support (void)
{
return this->obv_support_;
}
void
IDL_GlobalData::case_diff_error (idl_bool val)
{
this->case_diff_error_ = val;
}
idl_bool
IDL_GlobalData::case_diff_error (void)
{
return this->case_diff_error_;
}
void
IDL_GlobalData::nest_orb (idl_bool val)
{
this->nest_orb_ = val;
}
idl_bool
IDL_GlobalData::nest_orb (void)
{
return this->nest_orb_;
}
void
IDL_GlobalData::destroy (void)
{
if (this->pd_filename != 0)
{
this->pd_filename->destroy ();
delete this->pd_filename;
this->pd_filename = 0;
}
if (this->pd_main_filename != 0)
{
this->pd_main_filename->destroy ();
delete this->pd_main_filename;
this->pd_main_filename = 0;
}
if (this->pd_real_filename != 0)
{
this->pd_real_filename->destroy ();
delete this->pd_real_filename;
this->pd_real_filename = 0;
}
if (this->pd_stripped_filename != 0)
{
this->pd_stripped_filename->destroy ();
delete this->pd_stripped_filename;
this->pd_stripped_filename = 0;
}
if (this->pd_idl_src_file != 0)
{
this->pd_idl_src_file->destroy ();
delete this->pd_idl_src_file;
this->pd_idl_src_file = 0;
}
size_t size = this->pragma_prefixes ().size ();
char *trash = 0;
for (size_t i = 0; i < size; ++i)
{
this->pragma_prefixes ().pop (trash);
delete [] trash;
trash = 0;
}
this->pd_root->destroy ();
delete this->pd_root;
this->pd_root = 0;
delete this->pd_err;
this->pd_err = 0;
delete this->pd_gen;
this->pd_gen = 0;
delete this->pd_indent;
this->pd_indent = 0;
delete [] this->pd_local_escapes;
this->pd_local_escapes = 0;
delete [] this->gperf_path_;
this->gperf_path_ = 0;
delete [] this->temp_dir_;
this->temp_dir_ = 0;
delete [] this->ident_string_;
this->ident_string_ = 0;
}
void
IDL_GlobalData::append_idl_flag (const char *s)
{
idl_flags_ += " " + ACE_CString (s);
}
const char *
IDL_GlobalData::idl_flags (void) const
{
return idl_flags_.c_str ();
}
ACE_Hash_Map_Manager<ACE_CString, int, ACE_Null_Mutex> &
IDL_GlobalData::idl_keywords (void)
{
return this->idl_keywords_;
}
ACE_Unbounded_Stack<char *> &
IDL_GlobalData::pragma_prefixes (void)
{
return this->pragma_prefixes_;
}
void
IDL_GlobalData::update_prefix (char *filename)
{
// If we are just starting up and processing the temporary filename,
// there are no prefix issues to deal with yet.
if (this->pd_main_filename == 0 || this->pd_filename == 0)
{
return;
}
char *fstring = this->pd_filename->get_string ();
char *tail = fstring + ACE_OS::strlen (fstring) - 3;
// We have to do this check because some preprocessors (gcc 3.2
// on RedHat Linux 7.1, for one) output the same filename
// multiple times for no apparent reason, and we don't want it
// to clear the prefix.
if (ACE_OS::strcmp (fstring, filename) == 0
|| ACE_OS::strcmp (tail, ".cc") == 0)
{
return;
}
ACE_CString tmp ("", 0, 0);
char *main_filename = this->pd_main_filename->get_string ();
ACE_CString ext_id (filename);
char *prefix = 0;
int status = this->file_prefixes_.find (ext_id, prefix);
if (status == 0)
{
this->pd_root->prefix (prefix);
}
else
{
prefix = ACE::strnew ("");
(void) this->file_prefixes_.bind (ext_id, prefix);
char *tmp = ACE_const_cast (char *, "");
this->pd_root->prefix (tmp);
}
// The first branch is executed if we are finishing an
// included IDL file (but the current filename has not yet
// been changed). So we check for (1) the current filename is
// not the same as the main filename (2) the prefix stack size
// is greater than 1 (to skip the case where we are passed the
// temporary filename) and (3) we have either seen the filename
// passed in before as an included file or we are passed the
// main filename. Otherwise we know we are beginning an included
// file, so we push a blank prefix on the stack, which may
// possibly be changed later.
if (this->seen_include_file_before (filename) != 0
|| ACE_OS::strcmp (filename, main_filename) == 0
|| ACE_OS::strcmp (filename, this->pd_filename->get_string ()) != 0)
{
if (!this->pd_in_main_file)
{
char *trash = 0;
this->pragma_prefixes_.pop (trash);
delete [] trash;
}
}
else
{
this->pragma_prefixes_.push (tmp.rep ());
}
}
UTL_ScopedName *
IDL_GlobalData::string_to_scoped_name (char *s)
{
char *start = s;
int len = 0;
UTL_ScopedName *retval = 0;
char *end = ACE_OS::strstr (start, "::");
while (end != 0)
{
len = end - start;
if (len != 0)
{
char tmp[256];
ACE_OS::strncpy (tmp,
start,
len);
tmp[len] = '\0';
Identifier *id = 0;
ACE_NEW_RETURN (id,
Identifier (tmp),
0);
if (retval == 0)
{
ACE_NEW_RETURN (retval,
UTL_ScopedName (id,
0),
0);
}
else
{
UTL_ScopedName *conc_name = 0;
ACE_NEW_RETURN (conc_name,
UTL_ScopedName (id,
0),
0);
retval->nconc (conc_name);
}
}
start = end + 2;
end = ACE_OS::strstr (start, "::");
}
end = ACE_OS::strchr (start, ' ');
len = end - start;
char tmp[256];
ACE_OS::strncpy (tmp,
start,
len);
tmp[len] = '\0';
Identifier *id = 0;
ACE_NEW_RETURN (id,
Identifier (tmp),
0);
if (retval == 0)
{
ACE_NEW_RETURN (retval,
UTL_ScopedName (id,
0),
0);
}
else
{
UTL_ScopedName *conc_name = 0;
ACE_NEW_RETURN (conc_name,
UTL_ScopedName (id,
0),
0);
retval->nconc (conc_name);
}
return retval;
}
const char *
IDL_GlobalData::stripped_preproc_include (const char *name)
{
// Some preprocessors prepend "./" to filenames in the
// working directory, some others prepend ".\". If either
// of these are here, we want to strip them.
if (name[0] == '.')
{
if (name[1] == '\\' || name[1] == '/')
{
return name + 2;
}
}
return name;
}
/**
Whether we should not mung idl element names that are
C++ keywords e.g. delete, operator etc. with _cxx_ prefix.
Should be true when being used by the IFR Service
*/
idl_bool
IDL_GlobalData::preserve_cpp_keywords (void)
{
return preserve_cpp_keywords_;
}
/**
Set whether we should not mung idl element names that are C++
keywords e.g. delete, operator etc. with _cxx_ prefix.
Is unset by the tao_idl compiler.
*/
void
IDL_GlobalData::preserve_cpp_keywords (idl_bool val)
{
preserve_cpp_keywords_ = val;
}
void
IDL_GlobalData::add_include_path (const char *s)
{
this->include_paths_.enqueue_tail (ACE::strnew (s));
}
ACE_Hash_Map_Manager<ACE_CString, char *, ACE_Null_Mutex> &
IDL_GlobalData::file_prefixes (void)
{
return this->file_prefixes_;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?