Add a file for a c-array bitsery extension

This commit is contained in:
Robbert van der Helm
2020-03-08 23:03:10 +01:00
parent 2fda0bc9f2
commit 765dcf01e3
2 changed files with 57 additions and 1 deletions
+56
View File
@@ -0,0 +1,56 @@
// yabridge: a Wine VST bridge
// Copyright (C) 2020 Robbert van der Helm
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
#pragma once
// This is a modified version of `bitsery::ext::PointerOwner` in an attempt to
// support C-style arrays with no compile time known length. This should be
// upstreamed if it works.
#include <bitsery/ext/pointer.h>
// TODO: Implement
template <template <typename> class TPtrManager,
template <typename>
class TPolymorphicContext,
typename RTTI>
class PointerObjectExtensionMultipleBase
: public bitsery::ext::pointer_utils::
PointerObjectExtensionBase<TPtrManager, TPolymorphicContext, RTTI> {};
template <typename RTTI>
using PointerOwnerMultipleBase = PointerObjectExtensionMultipleBase<
bitsery::ext::pointer_details::PtrOwnerManager,
bitsery::ext::PolymorphicContext,
RTTI>;
using PointerOwnerMultiple =
PointerOwnerMultipleBase<bitsery::ext::StandardRTTI>;
namespace bitsery {
namespace traits {
template <typename T, typename RTTI>
struct ExtensionTraits<::PointerOwnerMultipleBase<RTTI>, T*> {
using TValue = T;
static constexpr bool SupportValueOverload = true;
static constexpr bool SupportObjectOverload = true;
// if underlying type is not polymorphic, then we can enable lambda syntax
static constexpr bool SupportLambdaOverload =
!RTTI::template isPolymorphic<TValue>();
};
} // namespace traits
} // namespace bitsery
+1 -1
View File
@@ -25,7 +25,7 @@
#include <variant>
#pragma once
#include "bitsery.h"
/**
* The maximum number of audio channels supported.