Android Open Source - nadia Signal Slot Map






From Project

Back to project page nadia.

License

The source code is released under:

GNU Lesser General Public License

If you think the Android project nadia listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * SignalSlotMap.java/*from www.ja va2 s .  c o  m*/
 * 
 * Copyright (c) 2013, Emmanuel Arana Corzo. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301  USA
 */

package com.redarctic.nadia.ext.simplesignalslot;

import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;


/**
 * Simple connection between a pair of signal and slot. Note that signal and
 * slot names never uniquely identify any connection.
 * 
 * This is simple and easy to use, and more resemble to Qt's signal and slot
 * model. Enjoy! Take a look at how to make use of the concept by those creative
 * guys: http://doc.trolltech.com/3.1/signalsandslots.html
 * 
 * @author Emmanuel Arana Corzo <emmanuel.arana@gmail.com>
 */
public class SignalSlotMap {
  private static ConcurrentHashMap<ISignalProvider, ArrayList<SignalSlotPair>> connList = new ConcurrentHashMap<ISignalProvider, ArrayList<SignalSlotPair>>();

  
  /**
   * fastConnect
   * connect Establish a connection. No checking for duplication. Use this if
   * you want typesafe checking. This internally is faster than connect.
   * An special consideration is that you cannot mix emit with fastConnect,
   * is strongly bound with just the fast methods 
   * @param signalProvider
   * @param signalName
   *            usually a constant of signalProvider class
   * @param slotProviderMethodPair
   *            create using SlotProviderMethodPair.create
   * @author Emmanuel Arana Corzo <emmanuel.arana@gmail.com>
   */
  public static synchronized void fastConnect(ISignalProvider signalProvider,
      String signalName, SlotProviderMethodPair slotProviderMethodPair)
      throws NullPointerException {
    if (slotProviderMethodPair != null && signalProvider != null
        && signalName.length() > 0) {
      // We need to first look for the existence of the key
      if (connList.containsKey(signalProvider)) {
        ArrayList<SignalSlotPair> sspList = connList
            .get(signalProvider);

        // TODO: put a search engine to look if that was already
        // inserted
        SignalSlotPair ssp = new SignalSlotPair(signalProvider,
            signalName, slotProviderMethodPair);
        sspList.add(ssp);
        connList.put(signalProvider, sspList);
      } else {
        ArrayList<SignalSlotPair> sspList = new ArrayList<SignalSlotPair>();

        SignalSlotPair ssp = new SignalSlotPair(signalProvider,
            signalName, slotProviderMethodPair);
        sspList.add(ssp);
        connList.put(signalProvider, sspList);
      }
    } else {
      throw new NullPointerException();
    }
  }

  public static synchronized void fastEmit(ISignalProvider signalProvider,
      String signalName, Object signalData[]) {
    if (connList.containsKey(signalProvider)) {
      ArrayList<SignalSlotPair> sspList = connList.get(signalProvider);

      for (SignalSlotPair ssp : sspList) {
        if (ssp.matches(signalProvider, signalName)) {
          ssp.invoke(signalData);
        }
      }
    }
  }

  
  public static synchronized void fastEmit(ISignalProvider signalProvider,
      String signalName, Object signalData) {
    fastEmit(signalProvider, signalName, new Object[] { signalData });
  }

  
  public static synchronized void fastEmit(ISignalProvider signalProvider,
      String signalName) {
    fastEmit(signalProvider, signalName, null);
  }

  
  public static synchronized void fastDisconnect(
      ISignalProvider signalProvider, String signalName,
      SlotProviderMethodPair slotProviderMethodPair) {
    if (connList.containsKey(signalProvider)) {
      ArrayList<SignalSlotPair> toBeRemovedList = new ArrayList<SignalSlotPair>();

      for (SignalSlotPair ssp : connList.get(signalProvider)) {
        if (ssp.matches(signalProvider, signalName,
            slotProviderMethodPair)) {
          toBeRemovedList.add(ssp);
        }
      }

      fastRemoveConnections(signalProvider, toBeRemovedList);
    }
  }

  
  public static synchronized void fastDisconnect(
      ISignalProvider signalProvider, String signalName) {
    ArrayList<SignalSlotPair> toBeRemovedList = new ArrayList<SignalSlotPair>();

    for (SignalSlotPair ssp : connList.get(signalProvider)) {
      if (ssp.matches(signalProvider, signalName)) {
        toBeRemovedList.add(ssp);
      }
    }

    fastRemoveConnections(signalProvider, toBeRemovedList);
  }

  
  public static synchronized void fastDisconnect(
      ISignalProvider signalProvider, ISlotProvider slotProvider) {
    if (connList.containsKey(signalProvider)) {
      ArrayList<SignalSlotPair> toBeRemovedList = new ArrayList<SignalSlotPair>();

      for (SignalSlotPair ssp : connList.get(signalProvider)) {
        if (ssp.matches(signalProvider, slotProvider)) {
          toBeRemovedList.add(ssp);
        }
      }

      fastRemoveConnections(signalProvider, toBeRemovedList);
    }
  }

  
  public static synchronized void fastDisconnect(
      ISignalProvider signalProvider,
      SlotProviderMethodPair slotProviderMethodPair) {
    if (connList.containsKey(signalProvider)) {
      ArrayList<SignalSlotPair> toBeRemovedList = new ArrayList<SignalSlotPair>();

      for (SignalSlotPair ssp : connList.get(signalProvider)) {
        if (ssp.matches(signalProvider, slotProviderMethodPair)) {
          toBeRemovedList.add(ssp);
        }
      }

      fastRemoveConnections(signalProvider, toBeRemovedList);
    }
  }
  

  public static synchronized void fastDisconnect(
      ISignalProvider signalProvider) {
    fastRemoveConnections(signalProvider);
  }
  

  public static synchronized void fastDisconnect(ISlotProvider slotProvider) {
    for (ISignalProvider signalProvider : connList.keySet()) {
      ArrayList<SignalSlotPair> toBeRemovedList = new ArrayList<SignalSlotPair>();

      for (SignalSlotPair ssp : connList.get(signalProvider)) {
        if (ssp.matches(slotProvider)) {
          toBeRemovedList.add(ssp);
        }
      }

      fastRemoveConnections(signalProvider, toBeRemovedList);
    }
  }

  private static void fastRemoveConnections(ISignalProvider signalProvider) {
    if (connList.containsKey(signalProvider)) {
      connList.get(signalProvider).clear();
      connList.remove(signalProvider);
      System.gc();
    }
  }

  private static void fastRemoveConnections(ISignalProvider signalProvider,
      ArrayList<SignalSlotPair> toBeRemovedList) {
    if (connList.containsKey(signalProvider)) {
      ArrayList<SignalSlotPair> sspList = connList.get(signalProvider);
      for (SignalSlotPair ssp : toBeRemovedList) {
        sspList.remove(ssp);
      }
      toBeRemovedList.clear();
      toBeRemovedList = null;
      if (!sspList.isEmpty())
        connList.put(signalProvider, sspList);
      else {
        connList.remove(signalProvider);
      }
      System.gc();
    }
  }
}




Java Source Code List

com.ashokgelal.samaya.DateTimeFormatter.java
com.ashokgelal.samaya.DateTimeInterval.java
com.ashokgelal.samaya.DateTimeParser.java
com.ashokgelal.samaya.DateTime.java
com.ashokgelal.samaya.ModelUtil.java
com.ashokgelal.samaya.Samaya.java
com.ashokgelal.samaya.TimeSpan.java
com.ashokgelal.samaya.ToStringUtil.java
com.ashokgelal.samaya.Util.java
com.redarctic.nadia.baseengine.BaseGameState.java
com.redarctic.nadia.baseengine.ColorPallete.java
com.redarctic.nadia.baseengine.DrawableGameComponent.java
com.redarctic.nadia.baseengine.DrawableObject.java
com.redarctic.nadia.baseengine.GameComponent.java
com.redarctic.nadia.baseengine.GameStateManager.java
com.redarctic.nadia.baseengine.GameState.java
com.redarctic.nadia.baseengine.GameSurfaceView.java
com.redarctic.nadia.baseengine.GameSurface.java
com.redarctic.nadia.baseengine.SpriteFont.java
com.redarctic.nadia.baseengine.Sprite.java
com.redarctic.nadia.baseengine.character.BaseModifier.java
com.redarctic.nadia.baseengine.character.Classes.java
com.redarctic.nadia.baseengine.character.FormulaModifierException.java
com.redarctic.nadia.baseengine.character.Player.java
com.redarctic.nadia.baseengine.item.ArmorLocation.java
com.redarctic.nadia.baseengine.item.Armor.java
com.redarctic.nadia.baseengine.item.BaseItem.java
com.redarctic.nadia.baseengine.item.ItemManager.java
com.redarctic.nadia.baseengine.item.ItemType.java
com.redarctic.nadia.baseengine.item.Shield.java
com.redarctic.nadia.baseengine.item.Weapon.java
com.redarctic.nadia.baseengine.item.WeaponsType.java
com.redarctic.nadia.baseengine.sprite.AnimatedSprite.java
com.redarctic.nadia.baseengine.sprite.AnimationException.java
com.redarctic.nadia.baseengine.sprite.AnimationKey.java
com.redarctic.nadia.baseengine.sprite.Animation.java
com.redarctic.nadia.baseengine.tileengine.Camera.java
com.redarctic.nadia.baseengine.tileengine.Engine.java
com.redarctic.nadia.baseengine.tileengine.MapLayer.java
com.redarctic.nadia.baseengine.tileengine.TileException.java
com.redarctic.nadia.baseengine.tileengine.TileMap.java
com.redarctic.nadia.baseengine.tileengine.Tile.java
com.redarctic.nadia.baseengine.tileengine.Tileset.java
com.redarctic.nadia.baseengine.world.Level.java
com.redarctic.nadia.baseengine.world.World.java
com.redarctic.nadia.collision.Circle.java
com.redarctic.nadia.collision.CollisionPolygon.java
com.redarctic.nadia.collision.ConvexPolygonException.java
com.redarctic.nadia.collision.Rectangle.java
com.redarctic.nadia.controls.ButtonPad.java
com.redarctic.nadia.controls.DirectionalPad.java
com.redarctic.nadia.controls.menu.CharacterDialog.java
com.redarctic.nadia.controls.menu.ControlBorder.java
com.redarctic.nadia.controls.menu.ControlManager.java
com.redarctic.nadia.controls.menu.Control.java
com.redarctic.nadia.controls.menu.Label.java
com.redarctic.nadia.controls.menu.LeftRightSelector.java
com.redarctic.nadia.controls.menu.LinkLabel.java
com.redarctic.nadia.controls.menu.Menu.java
com.redarctic.nadia.controls.menu.PictureBox.java
com.redarctic.nadia.controls.menu.SimpleConversation.java
com.redarctic.nadia.ext.MathHelper.java
com.redarctic.nadia.ext.StringHelper.java
com.redarctic.nadia.ext.simplesignalslot.ISignalProvider.java
com.redarctic.nadia.ext.simplesignalslot.ISlotProvider.java
com.redarctic.nadia.ext.simplesignalslot.PrimitiveWrapper.java
com.redarctic.nadia.ext.simplesignalslot.SignalSlotMap.java
com.redarctic.nadia.ext.simplesignalslot.SignalSlotPair.java
com.redarctic.nadia.ext.simplesignalslot.SlotProviderMethodPair.java