mirror of
https://github.com/RetroShare/libretroshare.git
synced 2026-09-14 11:05:45 +05:00
RsGxsImage owns a malloc'd buffer and declares a destructor, a copy constructor and a copy assignment. RsMsgMetaData and RsGxsGenericMsgData declare destructors too, and so does RsGxsChannelPost. Each of those user declared destructors suppresses the implicit move operations, so every std::move() on a post silently resolved to the copy constructor: a malloc plus memcpy of the thumbnail. That cost is paid far more often than it looks. A channel's post array is copied whole at four hand-off points between the store, the service and the model, none of which reserve, so vector growth copies on top. Worse, std::sort falls back to copies as well, which for a few thousand posts means tens of thousands of thumbnail duplications -- and that sort runs in the GUI thread. Give RsGxsImage real move operations that steal the buffer, and explicitly default the copy and move operations of RsMsgMetaData, RsGxsGenericMsgData and RsGxsChannelPost. The resulting RsGxsChannelPost move constructor is noexcept, which is what std::vector requires to move rather than copy on reallocation. Then use them where the arrays are handed over: reserve and move in getPostData() and sortPosts() instead of copying element by element, and move the sorted array back into the caller's vector. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .github/workflows | ||
| .reuse | ||
| gradle/wrapper | ||
| LICENSES | ||
| misc/Android | ||
| src | ||
| tests | ||
| .gitattributes | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| build.gradle | ||
| CMakeLists.txt | ||
| COPYING | ||
| gradlew | ||
| gradlew.bat | ||
| README.asciidoc | ||
| settings.gradle | ||
// SPDX-FileCopyrightText: 2022 Retroshare Team <contact@retroshare.cc>
// SPDX-FileCopyrightText: 2022-2026 Gioacchino Mazzurco <gio@retroshare.cc>
// SPDX-License-Identifier: CC-BY-SA-4.0
== RetroShare library
RetroShare is a decentralized, private, secure, cross-platform, communication
software.
RetroShare functionalities (file sharing, chat, messages, forums, channels...)
are implemented under the hood by libretroshare which offers a documented C++ and
JSON API.
While RetroShare is an application on its own, libretroshare is meant to be
used as part of other programs, some of them are
https://retroshare.cc[RetroShare-gui],
https://retroshare.cc[RetroShare-service],
https://gitlab.com/elRepo.io/elRepo.io-android[elRepo.io]
(let us know if there are more).
=== Continuous integration
image:https://gitlab.com/RetroShare/libretroshare/badges/master/pipeline.svg[link="https://gitlab.com/RetroShare/libretroshare/-/commits/master",title="pipeline status"]
=== Developer Documentation
All public API methods are documented with Doxygen comments, so the most updated
way to read documentation is reading those comments in `src/retroshare/`.
To use libretroshare as part of your Android application we suggest to add our
maven repository, and then specify the variant and version that fits your needs
as dependency. RetroShare is then exposed as an Android Service as you can see
at https://gitlab.com/RetroShare/libretroshare/-/blob/master/src/rs_android/org/retroshare/service/RetroShareServiceAndroid.java?ref_type=heads[RetroShareServiceAndroid.java] start it and then interact with it
via RetroShare JSON API.
.Example of adding libretroshare as dependency in Gradle
--------------------------------------------------------------------------------
repositories {
maven {
url "https://gitlab.com/api/v4/projects/32730908/packages/maven"
}
}
dependencies {
// Look at https://gitlab.com/RetroShare/libretroshare/-/packages for
// available options.
// Minimum Android platform supported goes here ⬇
// Build variant goes here ⬇
// Version goes here ⬇
implementation "org.retroshare.service:libretroshare-MinApiLevel21-release:72f8b7e8"
}
--------------------------------------------------------------------------------
{empty} +
image:https://deepwiki.com/badge.svg[link="https://deepwiki.com/RetroShare/libretroshare",title="Ask DeepWiki"]