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

Ownership of dynamic values #17

Open
nameofuser1 opened this issue Dec 13, 2020 · 2 comments
Open

Ownership of dynamic values #17

nameofuser1 opened this issue Dec 13, 2020 · 2 comments

Comments

@nameofuser1
Copy link
Collaborator

nameofuser1 commented Dec 13, 2020

Иногда полезно иметь возможность сохранить сообщение с динамическими полями. Есть предложение написать класс обертку над сообщением и сделать специализации функций сериализации и парсинга:

class Storage<T> {
    T msg;
     MemoryAllocator mem;
}

int parse<Storage<T>> (Storage<T> &msg, MessageInfo &info)  {
}

Пока конкретный интерфейс не продумывал, но в планах пофантазировать.

Несколько тонких моментов, о которых можно подумать:

  1. В таком случае в общем-то передавать аллокатор/память отдельными аргументами возможно и нет смысла, тк он будет храниться внутри Storage.
  2. Запретить вызовы parse на динамических сообщениях, если при вызове не используется Storage. Можно как-нибудь разделить два варианта вызова, чтобы не тащить лишние аргументы на сообщениях без динамических полей.
  3. Когда будет очищаться аллокатор. Сейчас он конструируется при вызове parse и стирается после выхода, в итоге мануально его сбрасывать не нужно. Возможно в случае со Storage получится обойтись без создания объекта каждый раз и без мануального контроля. Из идей при вызове метода parse на Storage, вызывать функцию reset, которая будет сбрасывать аллокатор.

@ygorshkov @DrTon что думаете? Может есть другие пути?

@ygorshkov
Copy link

возможно я не так понял постановку задачи, но хранение аллокатора рядом с сообщением ничего не даст, так как аллокатор сам не владеет никокой памятью

@nameofuser1
Copy link
Collaborator Author

@ygorshkov да, я не очень ясно выразился. Также я хочу сделать так, чтобы он владел памятью. Примерно как тут, только чтобы конструировать каждый раз не нужно было:
https://github.com/microavia/messgen/blob/master/port/cpp/messgen/stl.h

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants