Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature-Request] Buffer Partitioning Utility #39

Open
Scrappers-glitch opened this issue Mar 8, 2023 · 0 comments
Open

[Feature-Request] Buffer Partitioning Utility #39

Scrappers-glitch opened this issue Mar 8, 2023 · 0 comments
Labels
enhancement New feature or request future-release For future releases question Further information is requested

Comments

@Scrappers-glitch
Copy link
Member

Provides an advanced buffer partitioning as a separate library.

For example:

#include<stdio.h>
#include<stdlib.h>

typedef struct {
    void* start_address;
    void* end_address;
    size_t offset;
    size_t size;
    size_t pointer_location;

    void (*invalidate)(void*);

} MemoryPartition;

static inline void invalidate(MemoryPartition* partition) {
    partition->start_address += partition->offset;
    partition->end_address = partition->start_address + partition->size;
    partition->pointer_location = partition->offset + partition->size;
}

static inline MemoryPartition create(void* buffer, size_t offset, size_t size) {
    MemoryPartition partition = {
        buffer + offset,
        (buffer + offset) + size,
        offset,
        size,
        offset + size,
        &invalidate
    };

    return partition;
}

int main() {
    const size_t size = 4;
    void* buffer = (void*) malloc(size * 3);
    printf("Allocated buffer start address = %p\n", buffer);
    
    const MemoryPartition partition0 = create(buffer, 0, size);
    printf("Partition0 start address = %p\n", partition0.start_address);
    printf("Partition0 end address = %p\n", partition0.end_address);
    
    const MemoryPartition partition1 = create(buffer, partition0.pointer_location + 1, size);
    printf("Partition1 start address = %p\n", partition1.start_address);
    printf("Partition1 end address = %p\n", partition1.end_address);
    
    const MemoryPartition partition2 = create(buffer, partition1.pointer_location + 1, size);
    printf("Partition2 start address = %p\n", partition2.start_address);
    printf("Partition2 end address = %p\n", partition2.end_address);

    /* add some data to the partitions */
    *((int*) partition0.start_address) = 44;
    *((int*) partition1.start_address) = 55;
    *((int*) partition2.start_address) = 255;
    
    printf("%s\n", "ls part: Print partitions data: ");
    printf("%i\n", *((int*) partition0.start_address));
    printf("%i\n", *((int*) partition1.start_address));
    printf("%i\n", *((int*) partition2.start_address));

    return 0;
}
@Scrappers-glitch Scrappers-glitch added enhancement New feature or request question Further information is requested labels Mar 8, 2023
@Scrappers-glitch Scrappers-glitch added the future-release For future releases label Mar 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request future-release For future releases question Further information is requested
Projects
None yet
Development

No branches or pull requests

1 participant