@Override
 public T remove(T entry) {
   // 将oldEntry的属性entry设置为空。这样,当remove()没有找到删除元素时将返回null
   ReturnObject oldEntry = new ReturnObject(null);
   BinaryNodeInterface<T> newRoot = removeEntry(getRootNode(), entry, oldEntry);
   setRootNode(newRoot);
   return oldEntry.get();
 }
示例#2
0
文件: Gateway.java 项目: gdw2/py4j
 @SuppressWarnings("rawtypes")
 public ReturnObject getReturnObject(Object object) {
   ReturnObject returnObject;
   if (object != null) {
     if (isPrimitiveObject(object)) {
       returnObject = ReturnObject.getPrimitiveReturnObject(object);
     } else if (object == ReflectionEngine.RETURN_VOID) {
       returnObject = ReturnObject.getVoidReturnObject();
     } else if (isList(object)) {
       String objectId = putNewObject(object);
       returnObject = ReturnObject.getListReturnObject(objectId, ((List) object).size());
     } else if (isMap(object)) {
       String objectId = putNewObject(object);
       returnObject = ReturnObject.getMapReturnObject(objectId, ((Map) object).size());
     } else if (isArray(object)) {
       String objectId = putNewObject(object);
       returnObject = ReturnObject.getArrayReturnObject(objectId, Array.getLength(object));
     } else if (isSet(object)) {
       String objectId = putNewObject(object);
       returnObject = ReturnObject.getSetReturnObject(objectId, ((Set) object).size());
     } else if (isIterator(object)) {
       String objectId = putNewObject(object);
       returnObject = ReturnObject.getIteratorReturnObject(objectId);
     } else {
       String objectId = putNewObject(object);
       returnObject = ReturnObject.getReferenceReturnObject(objectId);
     }
   } else {
     returnObject = ReturnObject.getNullReturnObject();
   }
   return returnObject;
 }
示例#3
0
文件: Gateway.java 项目: gdw2/py4j
  /**
   * Invokes a method.
   *
   * @param methodName
   * @param targetObjectId
   * @param args
   * @return
   */
  public ReturnObject invoke(String methodName, String targetObjectId, List<Object> args) {
    if (args == null) {
      args = new ArrayList<Object>();
    }
    ReturnObject returnObject = null;
    try {
      Object targetObject = getObjectFromId(targetObjectId);
      logger.finer("Calling: " + methodName);
      Object[] parameters = args.toArray();

      MethodInvoker method = null;
      if (targetObject != null) {
        method = rEngine.getMethod(targetObject, methodName, parameters);
      } else {
        method =
            rEngine.getMethod(
                targetObjectId.substring(Protocol.STATIC_PREFIX.length()), methodName, parameters);
      }

      Object object = rEngine.invoke(targetObject, method, parameters);
      returnObject = getReturnObject(object);
    } catch (Py4JJavaException je) {
      String id = putNewObject(je.getCause());
      returnObject = ReturnObject.getErrorReferenceReturnObject(id);
    } catch (Py4JException pe) {
      throw pe;
    } catch (Exception e) {
      throw new Py4JException(e);
    }

    return returnObject;
  }
示例#4
0
  // vartika says - to change this tomorrow
  public void paintRegionOfLevel(
      Graphics2D g, int dx, int dy, int sx, int sy, int w, int h, int level) throws IOException {

    // vartika says on 3 august
    // paintRegion(g, dx, dy, sx, sy, w, h, levelDownsamples[level]);
    ReturnObject returnObject = paintRegion(sx, sy, w, h, levelDownsamples[level]);

    // vartika doubt on 3 august - shouldn't this be at client?? -who calls it?
    g.drawImage(returnObject.getImg(), dx, dy, w, h, null);

    if (debug) {
      System.out.println(returnObject.getImg());

      if (debugThingy == 0) {
        g.setColor(new Color(1.0f, 0.0f, 0.0f, 0.4f));
        debugThingy = 1;
      } else {
        g.setColor(new Color(0.0f, 1.0f, 0.0f, 0.4f));
        debugThingy = 0;
      }
      g.fillRect(dx, dy, returnObject.getW(), returnObject.getH());
    }
  }
示例#5
0
  public BufferedImage createThumbnailImage(
      int x, int y, long w, long h, int maxSize, int bufferedImageType) throws IOException {
    double ds;

    if (w > h) {
      ds = (double) w / maxSize;
    } else {
      ds = (double) h / maxSize;
    }

    if (ds < 1.0) {
      ds = 1.0;
    }

    int sw = (int) (w / ds);
    int sh = (int) (h / ds);
    int sx = (int) (x / ds);
    int sy = (int) (y / ds);

    BufferedImage result = new BufferedImage(sw, sh, bufferedImageType);

    Graphics2D g = result.createGraphics();

    // vartika says on 3 august
    // vartika doubt on 3 august - where is this draw being called from? need to move it to client

    ReturnObject returnObject = paintRegion(sx, sy, sw, sh, ds);
    g.drawImage(returnObject.getImg(), 0, 0, returnObject.getW(), returnObject.getH(), null);

    if (debug) {
      System.out.println(returnObject.getImg());

      if (debugThingy == 0) {
        g.setColor(new Color(1.0f, 0.0f, 0.0f, 0.4f));
        debugThingy = 1;
      } else {
        g.setColor(new Color(0.0f, 1.0f, 0.0f, 0.4f));
        debugThingy = 0;
      }
      g.fillRect(0, 0, returnObject.getW(), returnObject.getH());
    }

    g.dispose();
    return result;
  }
示例#6
0
文件: Gateway.java 项目: gdw2/py4j
  /**
   * Invokes a constructor and returned the constructed object.
   *
   * @param fqn The fully qualified name of the class.
   * @param args
   * @return
   */
  public ReturnObject invoke(String fqn, List<Object> args) {
    if (args == null) {
      args = new ArrayList<Object>();
    }
    ReturnObject returnObject = null;
    try {
      logger.finer("Calling constructor: " + fqn);
      Object[] parameters = args.toArray();

      MethodInvoker method = rEngine.getConstructor(fqn, parameters);
      Object object = rEngine.invoke(null, method, parameters);
      returnObject = getReturnObject(object);
    } catch (Py4JJavaException je) {
      String id = putNewObject(je.getCause());
      returnObject = ReturnObject.getErrorReferenceReturnObject(id);
    } catch (Py4JException pe) {
      throw pe;
    } catch (Exception e) {
      throw new Py4JException(e);
    }

    return returnObject;
  }
 /*由于remove()方法可以删除根结点,因此须保留一个指向树的根的引用
  * 因而让removeEntry()返回删除结点后的树的根结点,该树根就可以用remove()来保存了
  * 但是,remove()方法删除结点时,它需要返回待删除的结点的值,而具体执行删除操作的removeEntry()返回的是新的树根
  * 因此,需要一个内部类ReturnObject来获取被删除结点的值
  */
 private BinaryNodeInterface<T> removeEntry(
     BinaryNodeInterface<T> rootNode, T entry, ReturnObject oldEntry) {
   if (rootNode != null) {
     T rootData = rootNode.getData();
     int comparison = entry.compareTo(rootData);
     if (comparison == 0) { // 找到了待删除的结点,它相当于"根结点"
       // 将其对应的数据域放到oldEntry的entry属性中,而在remove方法中调用oldEntry的get方法会得到它
       oldEntry.set(rootData);
       rootNode = removeFromRoot(rootNode);
     } // end if
     else if (comparison < 0) { // 待删结点在当前结点的左子树中
       BinaryNodeInterface<T> leftChild = rootNode.getLeftChild();
       // 递归调用说明:真正删除结点的操作是从树根开始直至找到该结点(相当于找到了以待删结点为根的子树)然后调用removeFromRoot方法进行删除
       BinaryNodeInterface<T> subtreeRoot = removeEntry(leftChild, entry, oldEntry);
       rootNode.setLeftChild(subtreeRoot); // ???
     } else { // 待删结点在当前结点的右子树中
       BinaryNodeInterface<T> rightChild = rootNode.getRightChild();
       BinaryNodeInterface<T> subtreeRoot = removeEntry(rightChild, entry, oldEntry);
       rootNode.setRightChild(subtreeRoot); // ???
     }
   } // end if
   return rootNode;
 }