示例#1
0
Edge * v_connect (Vertex *src, Vertex *dst, int cost)
{
  Edge *ee = e_new (dst, cost);
  ee->next = src->out;
  src->out = ee;
  return ee;
}
示例#2
0
 void perform_test(const TestParameter& P = TestParameter()) {
   // throws only TestException
   try {
     perform_test_trivial();
     if (not P.empty())
       perform_test_nontrivial(P);
   }
   catch(const TestException&) {
     throw;
   }
   catch(const std::exception& e) {
     TestException e_new(std::string("std::exception: what = ") + e.what() + "\ntype = " + typeid(e).name());
     e_new.add(OKLIB_TESTDESCRIPTION);
     throw e_new;
   }
   catch(...) {
     TestException e("exception ...\n ");
     e.add(OKLIB_TESTDESCRIPTION);
     throw e;
   }
 }
bool SnapGadgets::AcceptMessage(const Message &message)
{
	if(EditorUtils::activeEditBtn != EditorUtils::SnapGadgetAdd)
	{
		return false;
	}
	if(message.is("KeyPress"))
	{
		int key = utils::lexical_cast<int>(message.getData());
		if(key == 'n')
		{
			if(_currentEditorGadget)
			{
				SnapGadgetReleaseBorderElement::SHARED_PTR e_new(new SnapGadgetReleaseBorderElement());
				e_new->SetIndex(GameSettings::underMouseIndex);
				_dragElementId = _currentEditorGadget->AddElement(e_new);
			}
		}else if(key == ' ')
		{
			if(_dragGadget && _dragElementId > -1)
			{
				SnapGadgetBaseElement::SHARED_PTR e = _dragGadget->GetElement(_dragElementId);
				if(SnapGadgetCaptureElement::Is(e.get()))
				{
					SnapGadgetCaptureElement::SHARED_PTR e_new = SnapGadgetCaptureElement::SHARED_PTR(new SnapGadgetCaptureElement());
					e_new->SetIndex(e->GetIndex());
					e_new->activateType = e->activateType;

					_dragGadget->RemoveElement(_dragElementId);
					_dragGadget->AddElement(e_new);
					e.reset();
				}else if(SnapGadgetReleaseElement::Is(e.get()))
				{
					SnapGadgetReleaseElement::SHARED_PTR e_new = SnapGadgetReleaseElement::SHARED_PTR(new SnapGadgetReleaseElement());
					e_new->SetIndex(e->GetIndex());
					e_new->activateType = e->activateType;

					_dragGadget->RemoveElement(_dragElementId);
					_dragGadget->AddElement(e_new);
					e.reset();
				}
			}else{
				_currentEditorGadget = NULL;
				size_t count = _gadgets.size();
				for(size_t i = 0; i < count;i++)
				{
					if(_gadgets[i]->Editor_CaptureGadget(Core::mainInput.GetMousePos()) != -1)
					{
						_currentEditorGadget = _gadgets[i];
						break;
					}
				}
				if(_currentEditorGadget){
					SnapGadgetReleaseElement::SHARED_PTR e_new = SnapGadgetReleaseElement::SHARED_PTR(new SnapGadgetReleaseElement());
					e_new->SetIndex(GameSettings::GetMouseAddress(Core::mainInput.GetMousePos()).ToPoint());
					size_t captured = _currentEditorGadget -> AddElement(e_new);
					_dragGadget = _currentEditorGadget;
					_dragElementId = captured;
				}
			}
			return true;
		}
	}
	return false;
}
示例#4
0
文件: main.c 项目: DidierSpaier/spkg
int main(const int ac, const char* av[])
{
  poptContext optCon=0;
  gint rc;
  gint status = 0;
  const gchar* arg;
  struct error* err;

#ifdef __DEBUG  
  g_mem_set_vtable(glib_mem_profiler_table);
#endif

  err = e_new();
  /* check if we have enough privileges */
#ifndef __WIN32__
  unsetenv("LD_LIBRARY_PATH");
#else
  putenv("LD_LIBRARY_PATH");
  putenv("LD_LIBRARY_PATH=");
#endif  

  /* load blacklists from SPKG_CONFDIR */
  gchar** bl_symopts = load_blacklist(SPKG_CONFDIR "/symopts_blacklist");
  if (bl_symopts)
    cmd_opts.bl_symopts = bl_symopts;

  /* preset ROOT */
  cmd_opts.root = getenv("ROOT");

  /* initialize popt context */
  optCon = poptGetContext("spkg", ac, av, opts, 0);
  poptSetOtherOptionHelp(optCon, "<command> [options] [packages...]");

  /* parse options */
  while ((rc = poptGetNextOpt(optCon)) != -1)
  {
    if (rc == 1)
      verbose++;
    else if (rc == 2)
      quiet++;
    if (rc < -1)
    {
      fprintf(stderr, "ERROR: Invalid argument: %s (%s)\n",
        poptStrerror(rc),
        poptBadOption(optCon, POPT_BADOPTION_NOALIAS));
      goto err_1;
    }
  }

  /* these are help handlers */
  if (help)
  {
    printf(
      PACKAGE_STRING "\n"
      "\n"
      "Written by Ondrej Jirman, 2005-2006.\n"
      "\n"
      "This is free software. Not like a beer or like in a \"freedom\",\n"
      "but like in \"I don't care what you are going to do with it.\"\n"
      "\n"
    );
    poptPrintHelp(optCon, stdout, 0);
    printf(
      "\n"
      "Examples:\n"
      "  spkg -i <packages>     [--install]\n"
      "  spkg -u <packages>     [--upgrade]\n"
      "  spkg -vd <packages>    [--verbose --remove]\n"
      "  spkg -l kde*           [--list]\n"
      "  spkg -vnu <packages>   [--upgrade --verbose --dry-run]\n"
      "\n"
      "Official website: http://spkg.megous.com\n"
      "Bug reports can be sent to <*****@*****.**>.\n"
    );
    goto out;
  }
  if (usage)
  {
    printf("Usage: spkg [-i|-u|-d|-l] [--root=ROOT] [-n] [-s] [-q] [-v] [packages...]\n");
    goto out;
  }
  if (version)
  {
    printf("%s\n", PACKAGE_STRING);
    goto out;
  }

  /* check verbosity options */
  if (verbose && quiet)
  {
    fprintf(stderr, "ERROR: Verbose or quiet?\n");
    goto err_1;
  }
  cmd_opts.verbosity += verbose;
  cmd_opts.verbosity -= quiet;

  /* check command options */
  switch (command)
  {
    case CMD_INSTALL:
      if (!cmd_opts.dryrun && !is_root())
        goto err_noroot;
      if (poptPeekArg(optCon) == 0)
        goto err_nopackages;
    break;
    case CMD_UPGRADE:
      if (!cmd_opts.dryrun && !is_root())
        goto err_noroot;
      if (poptPeekArg(optCon) == 0)
        goto err_nopackages;
    break;
    case CMD_REMOVE:
      if (!cmd_opts.dryrun && !is_root())
        goto err_noroot;
      if (poptPeekArg(optCon) == 0)
        goto err_nopackages;
    break;
    case CMD_LIST:
    break;
    case 0:
      if (poptPeekArg(optCon) == 0)
      {
        printf("Usage: spkg [-i|-u|-d|-l] [--root=ROOT] [-n] [-s] [-q] [-v] [packages...]\n");
        goto out;
      }
      if (!cmd_opts.dryrun && !is_root())
        goto err_noroot;
      command = CMD_UPGRADE;
      install_new = TRUE;
    break;
    default:
      fprintf(stderr, "ERROR: Schizofrenic command usage.\n");
      goto err_1;
  }

  /* init signal trap */
  if (sig_trap(err))
    goto err_2;

  /* open db */
  gboolean readonly = cmd_opts.dryrun || !is_root();
  if (db_open(cmd_opts.root, readonly, err))
    goto err_2;

  switch (command)
  {
    case CMD_INSTALL:
    {
      while ((arg = poptGetArg(optCon)) != 0 && !sig_break)
      {
        if (cmd_install(arg, &cmd_opts, err))
        {
          if (e_errno(err) & CMD_EXIST)
          {
            gchar* pkgname = parse_pkgname(arg, 5);
            _inform("Skipping package %s (package with same base name is already installed)...", pkgname ? pkgname : arg);
            g_free(pkgname);
            e_clean(err);
          }
          else
          {
            e_print(err);
            e_clean(err);
            status = 2;
          }
        }
      }
    }
    break;
    case CMD_UPGRADE:
    {
      while ((arg = poptGetArg(optCon)) != 0 && !sig_break)
      {
        if (cmd_upgrade(arg, &cmd_opts, err))
        {
          if (install_new && (e_errno(err) & CMD_NOTEX))
          {
            e_clean(err);
            if (cmd_install(arg, &cmd_opts, err))
            {
              e_print(err);
              e_clean(err);
              status = 2;
            }
          }
          else if (e_errno(err) & CMD_NOTEX)
          {
            gchar* pkgname = parse_pkgname(arg, 5);
            _inform("Skipping package %s (package with same base name is NOT installed)...", pkgname ? pkgname : arg);
            g_free(pkgname);
            e_clean(err);
          }
          else if (e_errno(err) & CMD_EXIST)
          {
            gchar* pkgname = parse_pkgname(arg, 5);
            _inform("Skipping package %s (already uptodate)...", pkgname ? pkgname : arg);
            g_free(pkgname);
            e_clean(err);
          }
          else
          {
            e_print(err);
            e_clean(err);
            status = 2;
          }
        }
      }
    }
    break;
    case CMD_REMOVE:
    {
      while ((arg = poptGetArg(optCon)) != 0 && !sig_break)
      {
        if (cmd_remove(arg, &cmd_opts, err))
        {
          e_print(err);
          e_clean(err);
          status = 2;
        }
      }
    }
    break;
    case CMD_LIST:
    {
      GSList* arglist = NULL;
      while ((arg = poptGetArg(optCon)) != 0)
        arglist = g_slist_append(arglist, g_strdup(arg));
      if (cmd_list(arglist, &cmd_opts, err))
      {
        e_print(err);
        e_clean(err);
        status = 2;
      }
      g_slist_foreach(arglist, (GFunc)g_free, 0);
      g_slist_free(arglist);
    }
    break;
  }

  db_close();

 out:
  poptFreeContext(optCon);
  e_free(err);

#ifdef __DEBUG  
  g_mem_profile();
#endif

  /* 0 = all ok
   * 1 = command line error
   * 2 = package manager error
   */
  return status;
 err_1:
  status = 1;
  goto out;
 err_2:
  status = 2;
  e_print(err);
  goto out;
 err_nopackages:
  fprintf(stderr, "ERROR: No packages specified.\n");
  goto err_1;
 err_noroot:
  fprintf(stderr, "ERROR: You need root privileges to run this command. Try using --dry-run.\n");
  goto err_1;
}