Giter Site home page Giter Site logo

bipbuffer's Issues

RFC bipbup_offer() : try to fit after A before activating B

Here's a different implementation of bipbup_offer() :

  • if B is in use, append data there (no change)
  • if B is unused, and there is enough space after A, append data there
  • fallback : activate B area and write data there, if possible.

Advantage is slightly increased efficiency, at basically 0 cost.

Note : currently untested

*****
int bipbuf_offer(bipbuf_t* me, const unsigned char *data, const int size)
{
    if (1 == me->b_inuse)
    {
	/* check available space between region B and region A */
        if ((me->a_start - me->b_end) < size) return 0;

        memcpy(me->data + me->b_end, data, size);
        me->b_end += size;
	return size;
    }

    /* no B area (yet). Check if we can fit in the remaining space */
    if (size < (me->size - me->a_end))
    {
        memcpy(me->data + me->a_end, data, size);
        me->a_end += size;
	return size;
    }

    /* didn't fit, activate B if possible */
    if (size > (me->a_start))
    {
	/* won't fit */
	return 0;
    }

    me->b_inuse = 1;
    memcpy(me->data, data, size);
    me->b_end += size;
    return size;
}

bipbuf_offer can not work correct

if I have a buff like below:

****12**
    ^
    |
    A

Region B is not used.
Now, if I want to offer more than 2 bytes for example 4 bytes "3456", the bipbuf_offer will return 0.
But there are enough buffer for 4bytes, it can offer region B and the result will like below:

345612**
^   ^
|   |
B   A

how

if I have a buff like below:

**12
^
|
A
Region B is not used.
Now, if I want to offer more than 2 bytes for example 4 bytes "3456", the bipbuf_offer will return 0.
But there are enough buffer for 4bytes, it can offer region B and the result will like below:

345612**
^ ^
| |
B A

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.