public BoltResponseMessageWriterV1(PackProvider packerProvider, PackOutput output, LogService logService)
 {
     this._output   = output;
     this._packer   = packerProvider.NewPacker(output);
     this._log      = logService.GetInternalLog(this.GetType());
     this._encoders = RegisterEncoders();
 }
 public DefaultBoltConnection(BoltChannel channel, PackOutput output, BoltStateMachine machine, LogService logService, BoltConnectionLifetimeListener listener, BoltConnectionQueueMonitor queueMonitor, int maxBatchSize)
 {
     this._id           = channel.Id();
     this._channel      = channel;
     this._output       = output;
     this._machine      = machine;
     this._listener     = listener;
     this._queueMonitor = queueMonitor;
     this._log          = logService.GetInternalLog(this.GetType());
     this._userLog      = logService.GetUserLog(this.GetType());
     this._maxBatchSize = maxBatchSize;
     this._batch        = new List <Job>(maxBatchSize);
 }
Beispiel #3
0
        public void Pack(PackSettings settings, List<PackInput> inputs, List<PackOutputList> outputs)
        {
            int X_LIMIT = settings.Size.Width - settings.Border;
            int Y_LIMIT = settings.Size.Height - settings.Border;

            List<Tree> trees = new List<Tree>();
            trees.Add(new Tree(settings.Size));

            // create a LUT for sort input
            List<int> sorted = new List<int>(inputs.Count);
            for (int i = 0; i < inputs.Count; ++i)
                sorted.Add(i);

            sorted.Sort(delegate(int a, int b)
            {
                Size sza = inputs[a].Size;
                Size szb = inputs[b].Size;

                int areaa = sza.Width * sza.Height;
                int areab = szb.Width * szb.Height;

                return areab - areaa;
            });

            // perform packing
            foreach(int i in sorted)
            {
                Size sz = inputs[i].Size;
                if (sz.Width > settings.Size.Width || sz.Height > settings.Size.Height)
                {
                    if(debug)
                        Console.WriteLine("warning: input {0}:{1} is too large!", i, sz);
                    continue;
                }

                // apply borders, if the input is small enough
                if (sz.Width < X_LIMIT)
                    sz.Width += settings.Border * 2;

                if (sz.Height < Y_LIMIT)
                    sz.Height += settings.Border * 2;

                Size szr = new Size(sz.Height, sz.Width);

                int ret = -1;

                // find a tree to insert the input
                foreach (Tree tree in trees)
                {
                    ret = tree.Insert(sz);

                    if (-1 != ret) // packed
                    {
                        tree.Nodes[ret].Input = i;
                        break;
                    }
                    else if (AllowRotate)
                    {
                        ret = tree.Insert(szr);
                        if (-1 != ret) // packed
                        {
                            tree.Nodes[ret].Input = i;
                            tree.Nodes[ret].Rotated = true;
                            //Console.WriteLine("input {0} is rotated", i);
                            break;
                        }
                    }
                }

                // if running out of spaces, create a new tree for packing
                if(-1 == ret)
                {
                    if(debug)
                        Console.WriteLine("Running out of space, allocate a new texture");
                    Tree tree = new Tree(settings.Size);
                    trees.Add(tree);

                    ret = tree.Insert(sz);
                    if (-1 != ret) // packed
                        tree.Nodes[ret].Input = i;
                    else
                        if(debug) Console.WriteLine("still cannot pack input {0}:{1}!", i, sz);
                }
            }

            // output pack results
            foreach (Tree tree in trees)
            {
                PackOutputList polist = new PackOutputList();
                foreach (Node node in tree.Nodes)
                {
                    if (!node.IsFilled())
                        continue;

                    PackOutput po = new PackOutput();
                    PackInput pi = inputs[node.Input];

                    if (pi.Size.Width < settings.Size.Width - 1)
                        po.X = node.Rect.X + settings.Border;

                    if (pi.Size.Height < settings.Size.Height - 1)
                        po.Y = node.Rect.Y + settings.Border;

                    po.Input = node.Input;
                    po.Rotated = node.Rotated;

                    polist.Add(po);
                }

                outputs.Add(polist);
            }
        }
Beispiel #4
0
 public Packer(PackOutput @out)
 {
     this.Out = @out;
 }
Beispiel #5
0
 internal MetricsReportingBoltConnection(BoltChannel channel, PackOutput output, BoltStateMachine machine, LogService logService, BoltConnectionLifetimeListener listener, BoltConnectionQueueMonitor queueMonitor, int maxBatchSize, BoltConnectionMetricsMonitor metricsMonitor, Clock clock) : base(channel, output, machine, logService, listener, queueMonitor, maxBatchSize)
 {
     this._metricsMonitor = metricsMonitor;
     this._clock          = clock;
 }
Beispiel #6
0
 internal MetricsReportingBoltConnection(BoltChannel channel, PackOutput output, BoltStateMachine machine, LogService logService, BoltConnectionLifetimeListener listener, BoltConnectionQueueMonitor queueMonitor, BoltConnectionMetricsMonitor metricsMonitor, Clock clock) : this(channel, output, machine, logService, listener, queueMonitor, DefaultMaxBatchSize, metricsMonitor, clock)
 {
 }
Beispiel #7
0
 protected internal PackerV1(PackOutput output) : base(output)
 {
 }
Beispiel #8
0
 public override Org.Neo4j.Bolt.messaging.Neo4jPack_Packer NewPacker(PackOutput output)
 {
     return(new PackerV1(output));
 }
 public DefaultBoltConnection(BoltChannel channel, PackOutput output, BoltStateMachine machine, LogService logService, BoltConnectionLifetimeListener listener, BoltConnectionQueueMonitor queueMonitor) : this(channel, output, machine, logService, listener, queueMonitor, DefaultMaxBatchSize)
 {
 }
Beispiel #10
0
 public SynchronousBoltConnection(BoltStateMachine machine)
 {
     this._channel = new EmbeddedChannel();
     this._output  = new ChunkedOutput(this._channel, TransportThrottleGroup.NO_THROTTLE);
     this._machine = machine;
 }
Beispiel #11
0
 internal PackerV2(PackOutput output) : base(output)
 {
 }