ActionHomogeneous.m
上传用户:shenzhenrh
上传日期:2013-05-12
资源大小:2904k
文件大小:3k
源码类别:

信息检索与抽取

开发平台:

Unix_Linux

  1. PHASE(Creating)
  2. + createBegin: aZone
  3. {
  4.   ACTION_HOMOGENEOUS_TYPE *obj = [super createBegin: aZone];
  5.   obj->targetCount = 0;
  6. #ifdef UPDATEJAVACALL
  7.   obj->javaTargets = NULL;
  8. #endif
  9.   obj->objcTargets = NULL;
  10.   return obj;
  11. }
  12. - (void)setTarget: theTarget
  13. {
  14.   target = theTarget;
  15. }
  16. - createEnd
  17. {
  18.   BOOL allSameFlag = [target allSameClass];
  19.   [super createEnd];
  20.   
  21.   if (allSameFlag)
  22.     {
  23.       id <Index> index = [target begin: getZone (self)];
  24.       
  25.       targetCount = [target getCount];
  26. #ifdef UPDATEJAVATARGET
  27.       if (SD_JAVA_FIND_OBJECT_JAVA ([target getFirst]))
  28.         {
  29.           size_t i;
  30.           id obj;
  31.           
  32.           javaTargets =
  33.             [scratchZone alloc: sizeof (jobject) * targetCount];
  34.           for (i = 0, obj = [index next];
  35.                [index getLoc] == Member;
  36.                obj = [index next], i++)
  37.             javaTargets[i] = SD_JAVA_FIND_OBJECT_JAVA (obj);
  38.         }
  39.       else
  40. #endif
  41.         {
  42.           size_t i;
  43.           id obj;
  44.           
  45.           objcTargets =
  46.             [scratchZone alloc: sizeof (id) * targetCount];
  47.           for (i = 0, obj = [index next];
  48.                [index getLoc] == Member;
  49.                obj = [index next], i++)
  50.             objcTargets[i] = obj;
  51. #ifdef SETUPCALL
  52.           SETUPCALL;
  53. #endif
  54.         }
  55.       
  56.     }
  57.   else
  58.     raiseEvent (InvalidArgument, "Collection not homogeneous");
  59.   return self;
  60. }
  61. PHASE(Setting)
  62. #ifdef SETUPCALL
  63. - (void)setMessageSelector: (SEL)aSel
  64. {
  65.   selector = aSel;
  66.   if (imp)
  67.     SETUPCALL;
  68. }
  69. #endif
  70. - setDefaultOrder: (id <Symbol>)aSymbol
  71. {
  72.   setDefaultOrder (&bits, aSymbol);
  73.   return self;
  74. }
  75. PHASE(Using)
  76. - (void)_performAction_: (id <Activity>)anActivity
  77. {
  78. #ifdef UPDATEJAVATARGET
  79.   if (javaTargets)
  80.     {
  81.       if (getDefaultOrder (bits) == Randomized)
  82.         {
  83.           size_t j = targetCount, k;
  84.           while (j > 1)
  85.             {
  86.               jobject kobj;
  87.               j--;
  88.               k = [uniformUnsRand getUnsignedWithMin: 0 withMax: j];
  89.               kobj = javaTargets[k];
  90.               javaTargets[k] = javaTargets[j];
  91.               javaTargets[j] = kobj;
  92.             }
  93.         }
  94.       {
  95.         size_t i;
  96.         
  97.         for (i = 0; i < targetCount; i++)
  98.           {
  99.             UPDATEJAVATARGET (javaTargets[i]);
  100.             PERFORMJAVACALL (javaTargets[i]);
  101.           }
  102.       }
  103.     }
  104.   else
  105. #endif
  106.   if (objcTargets)
  107.     {
  108.       if (getDefaultOrder (bits) == Randomized)
  109.         {
  110.           size_t j = targetCount, k;
  111.           while (j > 1)
  112.             {
  113.               id kobj;
  114.               j--;
  115.               k = [uniformUnsRand getUnsignedWithMin: 0 withMax: j];
  116.               kobj = objcTargets[k];
  117.               objcTargets[k] = objcTargets[j];
  118.               objcTargets[j] = kobj;
  119.             }
  120.         }
  121.       {
  122.         size_t i;
  123.         
  124.         for (i = 0; i < targetCount; i++)
  125.           {
  126.             UPDATEOBJCTARGET (objcTargets[i]);
  127.             PERFORMOBJCCALL (objcTargets[i]);
  128.           }
  129.       }
  130.     }
  131.   else
  132.     abort ();
  133. }
  134. - (id <Symbol>)getDefaultOrder
  135. {
  136.   return getDefaultOrder (bits);
  137. }
  138. - getTarget
  139. {
  140.   return target;
  141. }
  142. #ifdef SETUPCALL
  143. - (SEL)getMessageSelector
  144. {
  145.   return selector;
  146. }
  147. #endif
  148. - (void)describe: stream
  149. {
  150.   char buffer[100];
  151.   [stream catC: "[[foreach fixed: "];
  152.   _obj_formatIDString (buffer, target);
  153.   [stream catC: buffer];
  154.   [stream catC: "]"];
  155. }
  156. - (void)drop
  157. {
  158. #ifdef UPDATEJAVATARGET
  159.   if (javaTargets)
  160.     [scratchZone free: (void *) javaTargets];
  161.   else
  162. #endif
  163.    if (objcTargets)
  164.     [scratchZone free: (void *) objcTargets];
  165.   [super drop];
  166. }