Brunet.Concurrent.Channel.Enqueue C# (CSharp) Method

Enqueue() public method

public Enqueue ( object a ) : int
a object
return int
  public virtual int Enqueue(object a) {
    int new_eq = Interlocked.Increment(ref _enqueues);
    if( _max_enqueues > 0 && new_eq > _max_enqueues ) {
      //No good:
      Interlocked.Exchange(ref _enqueues, _max_enqueues);
      throw new InvalidOperationException("Maximum number of Enqueues exceeded");
    }
    if( _closed == 0 ) {
      _queue.Enqueue(a);
      int count = Interlocked.Increment(ref _count);
      FireEnqueue();
      if( new_eq == _max_enqueues ) {
        //We now need to close
        Close();
      }
      return count;
    }
    else {
      throw new InvalidOperationException("Channel is closed, Enqueue failed");
    }
  }
  protected void FireEnqueue() {

Usage Example

Exemplo n.º 1
0
    public override void Reduce(Channel q, object reduce_arg, 
                                  object current_result, RpcResult child_rpc) {

      bool done = false;
      //ISender child_sender = child_rpc.ResultSender;
      //the following can throw an exception, will be handled by the framework
      object child_result = child_rpc.Result;
      
      //child result is a valid result
      if (current_result == null) {
        q.Enqueue(new Brunet.Collections.Pair<object, bool>(child_result, done));
        return;
      }
      
      IDictionary my_entry = current_result as IDictionary;
      IDictionary value = child_result as IDictionary;
      int max_height = (int) my_entry["height"];
      int count = (int) my_entry["count"];

      int y = (int) value["count"];
      my_entry["count"] = count + y;
      int z = (int) value["height"] + 1;
      if (z > max_height) {
        my_entry["height"] = z; 
      }
      q.Enqueue(new Brunet.Collections.Pair<object, bool>(my_entry, done));
    }
All Usage Examples Of Brunet.Concurrent.Channel::Enqueue