Listing 3: CArg constructor and function CApp::add

CApp::CArg::CArg(
                 char* a_fn, char* a_m, 
                 char* a_ev, flags a_f 
                ) : m_name(a_fn),
                    m_message(a_m),
                    m_flags(a_f),
                    m_env_variable(a_ev)
{
    CApp::add(this);
}

void CApp::add(CArg* arg)
{
    assert(m_args_index <= m_args_max_index);
    if (m_args_index == m_args_max_index) {
      // We run put of space, copy them
      if (m_args_index == 0) m_args_index = 1;
      CApp_CArg_ptr* tmp =
        new CApp_CArg_ptr[2 * m_args_index];
      for (int i = 0; i < m_args_index; i++) {
        tmp[i] = m_args[i];
      }
      delete m_args;
      m_args = tmp;
      m_args_max_index = 2 * m_args_max_index;
    }

    // We now have enough space
    assert(m_args_index < m_args_max_index);
    m_args[m_args_index] = arg;
    m_args_index++;  
}
//End of File