Clean up env_var_table_t. Switch from storing var_uni_entry_t* to var_uni_entry_t. Various other cleanups.

This commit is contained in:
ridiculousfish
2013-02-11 23:16:50 -08:00
parent be23c0755e
commit 2a7fc9c3a5
9 changed files with 106 additions and 127 deletions

46
env.h
View File

@@ -108,20 +108,31 @@ class env_var_t : public wcstring
private:
bool is_missing;
public:
static env_var_t missing_var(void);
static env_var_t missing_var(void)
{
env_var_t result(L"");
result.is_missing = true;
return result;
}
env_var_t(const env_var_t &x) : wcstring(x), is_missing(x.is_missing) { }
env_var_t(const wcstring & x) : wcstring(x), is_missing(false) { }
env_var_t(const wchar_t *x) : wcstring(x), is_missing(false) { }
env_var_t() : wcstring(L""), is_missing(false) { }
bool missing(void) const
{
return is_missing;
}
bool missing_or_empty(void) const
{
return missing() || empty();
}
const wchar_t *c_str(void) const;
env_var_t &operator=(const env_var_t &s)
{
is_missing = s.is_missing;
@@ -131,14 +142,35 @@ class env_var_t : public wcstring
bool operator==(const env_var_t &s) const
{
if (is_missing && s.is_missing)
return true;
else if (s.is_missing || s.is_missing)
return false;
else
return *static_cast<const wcstring *>(this) == *static_cast<const wcstring *>(&s);
return is_missing == s.is_missing && static_cast<const wcstring &>(*this) == static_cast<const wcstring &>(s);
}
bool operator==(const wcstring &s) const
{
return ! is_missing && static_cast<const wcstring &>(*this) == s;
}
bool operator!=(const env_var_t &s) const
{
return !(*this == s);
}
bool operator!=(const wcstring &s) const
{
return !(*this == s);
}
bool operator==(const wchar_t *s) const
{
return ! is_missing && static_cast<const wcstring &>(*this) == s;
}
bool operator!=(const wchar_t *s) const
{
return !(*this == s);
}
};
/**
Gets the variable with the specified name, or an empty string if it does not exist.