예제 #1
0
csHandlerID csEventHandlerRegistry::GetGenericPostBoundID (csHandlerID id)
{
  CS::Threading::ScopedReadLock lock(mutex);
  if (IsInstance(id))
    return GetGenericPostBoundID(instantiation.Get(id, CS_HANDLER_INVALID));
  return handlerPosts.Get(id, CS_HANDLER_INVALID);
}
예제 #2
0
bool csEventHandlerRegistry::IsInstanceOf (csHandlerID instanceid,
	csHandlerID genericid)
{
  CS_ASSERT(IsInstance(instanceid));
  CS::Threading::ScopedReadLock lock(mutex);
  return (instantiation.Get (instanceid, CS_HANDLER_INVALID) == genericid);
}
예제 #3
0
iEventHandler *csEventHandlerRegistry::GetHandler (csHandlerID id)
{
  CS_ASSERT(IsInstance(id));
  mutex.ReadLock();
  const KnownEventHandler* knownHandler = idToHandler.GetElementPointer (id);
  mutex.ReadUnlock();
  return knownHandler ? (iEventHandler*)(knownHandler->handler) : 
    (iEventHandler*)0;
}
예제 #4
0
파일: if-env.c 프로젝트: urnest/urnest
   GMC_DCL(tp_FilHdr, FilHdr)
{
   size_t sz;
   tp_FilHdr OutFilHdr;
   tp_FTName FTName;

   OutFilHdr = Copy_FilHdr(FilHdr);
   if (IsInstance(OutFilHdr)) OutFilHdr = FilHdr_Father(OutFilHdr);
   FTName = FilTyp_ShortFTName(FilHdr_FilTyp(OutFilHdr));
   sz = snprintf(WorkFileName, MAX_FileName, "%s/%s", Job->JobDirName, FTName);
   if (sz >= MAX_FileName) {
      (void)fprintf(stderr, "File name too long (MAX_FileName=%d): %s/%s\n",
		  MAX_FileName, Job->JobDirName, FTName);
      exit(11); }/*if*/;
   Ret_FilHdr(OutFilHdr);
   }/*Get_WorkFileName*/
예제 #5
0
void csEventHandlerRegistry::ReleaseID (csHandlerID id)
{

  CS_ASSERT (IsInstance (id));
  mutex.UpgradeLock();
  KnownEventHandler* knownHandler = idToHandler.GetElementPointer (id);
  CS_ASSERT (knownHandler);
  mutex.UpgradeUnlockAndWriteLock();
  if ((--knownHandler->refcount) == 0)
  {
    handlerToID.DeleteAll (
      static_cast<iEventHandler*> (knownHandler->handler));
    idToHandler.DeleteAll (id);
    instantiation.DeleteAll (id);
  }
  mutex.WriteUnlock();
}
예제 #6
0
파일: if-candrv.c 프로젝트: LukeMeszar/CAS
   GMC_DCL(tp_Nod, OprNod)
{
   tp_Nod ElmNod;
   tp_NodTyp NodTyp;
   tp_FilTyp FilTyp;
   tp_LocHdr LocHdr;
   tp_LocPVal LocPVal;

   if (FilHdr == ERROR || FilPrm == ERROR) return ERROR;

   while (OprNod != NIL) {
      NodTyp = Nod_NodTyp(OprNod);
      switch (NodTyp) {
	 case PRMOPR: {
	    FilPrm = Append_PrmNod(FilPrm, OprNod);
	    if (FilPrm == ERROR) {
	       Ret_FilHdr(FilHdr);
	       return ERROR; }/*if*/;
	    break;}/*case*/;
	 case APLOPR: {
	    LocHdr = PrmValNod_LocHdr(Nod_Son(1, OprNod), ApplyPrmTyp);
	    if (LocHdr == ERROR) {
	       Ret_FilHdr(FilHdr);
	       return ERROR; }/*if*/;
	    LocPVal = NIL;
	    FilPrm = Append_PrmInf(FilPrm, ApplyPrmTyp, LocHdr, LocPVal);
	    FilHdr = Extend_FilHdr(FilHdr, FK_User, ApplyFilTyp, FilPrm,
				   DfltIdent);
	    FilPrm = RootFilPrm;
	    if (FilHdr == ERROR) {
	       return ERROR; }/*if*/;
	    break;}/*case*/;
	 case DRVOPR: {
	    FilTyp = Nod_FilTyp(Nod_Son(1, OprNod));
	    /*select*/{
	       if (FilTyp == ObjectFilTyp) {
	       }else if (FilTyp == FatherFilTyp) {
		  if (!IsInstance(FilHdr)) {
		     FilHdr_Error("Input to :abstract must be an instance: %s\n", FilHdr);
		     Ret_FilHdr(FilHdr);
		     return ERROR; }/*if*/;
		  FilHdr = FilHdr_Father(FilHdr);
	       }else{
		  FilHdr = Do_Deriv(FilHdr, RootFilPrm, FilPrm, FilTyp);
		  FilPrm = RootFilPrm;
		  if (FilHdr == ERROR) {
		     return ERROR; }/*if*/; };}/*select*/;
	    break;}/*case*/;
	 case HODOPR: {
	    FilTyp = Nod_FilTyp(OprNod);
	    FilHdr = Do_Deriv(FilHdr, RootFilPrm, FilPrm, FilTyp);
	    if (FilHdr == ERROR) {
	       return ERROR; }/*if*/;
	    FilPrm = RootFilPrm;
	    break;}/*case*/;
	 case ELMOPR: {
	    ElmNod = Nod_Son(1, OprNod);
	    FilPrm = RootFilPrm;
	    FilHdr = Do_Key(FilHdr, "");
	    FilHdr = Do_Keys(FilHdr, Sym_Str(Nod_Sym(ElmNod)));
	    if (FilHdr == ERROR) {
	       return ERROR; }/*if*/;
	    break;}/*case*/;
	 case DIROPR: {
	    FilHdr = Do_Key(FilHdr, "");
	    break;}/*case*/;
	 case SEGOPR: {
	    FilHdr = Do_VTgt(FilHdr, Sym_Str(Nod_Sym(Nod_Son(1, OprNod))));
	    FilPrm = RootFilPrm;
	    break;}/*case*/;
	 default: {
	    FATALERROR("bad operator node type"); };}/*switch*/;
      OprNod = Nod_Brother(OprNod); }/*while*/;

   return New_PrmFHdr(FilHdr, FilPrm);
   }/*Apply_OprNods*/
예제 #7
0
csHandlerID const csEventHandlerRegistry::GetGeneric (csHandlerID id)
{
  CS_ASSERT(IsInstance(id));
  CS::Threading::ScopedReadLock lock(mutex);
  return instantiation.Get (id, CS_HANDLER_INVALID);
}