slackbuilds/libraries/LucenePlusPlus/boost.patch

204 lines
6.5 KiB
Diff

diff -Naupr a/CMakeLists.txt c/CMakeLists.txt
--- a/CMakeLists.txt 2024-02-18 19:18:26.000000000 +0100
+++ c/CMakeLists.txt 2025-03-31 10:09:11.175008239 +0200
@@ -47,7 +47,7 @@ include(dependencies)
include(Lucene++Docs)
# Enable C++11
-set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
####################################
diff -Naupr a/src/core/document/NumericField.cpp c/src/core/document/NumericField.cpp
--- a/src/core/document/NumericField.cpp 2024-02-18 19:18:26.000000000 +0100
+++ c/src/core/document/NumericField.cpp 2025-03-31 10:29:14.383300303 +0200
@@ -4,6 +4,10 @@
// or the GNU Lesser General Public License.
/////////////////////////////////////////////////////////////////////////////
+#include <boost/variant/get.hpp>
+#include <locale>
+#include <codecvt>
+
#include "LuceneInc.h"
#include "NumericField.h"
#include "Field.h"
@@ -53,9 +57,23 @@ ReaderPtr NumericField::readerValue() {
}
String NumericField::stringValue() {
- StringStream value;
- value << fieldsData;
- return value.str();
+ std::stringstream value;
+
+ // Estrazione del valore numerico (come prima)
+ if (int* v = boost::get<int>(&fieldsData)) {
+ value << *v;
+ } else if (int64_t* v = boost::get<int64_t>(&fieldsData)) {
+ value << *v;
+ } else if (double* v = boost::get<double>(&fieldsData)) {
+ value << *v;
+ } else {
+ value << "0";
+ }
+
+ std::string narrowStr = value.str();
+ std::wstring wideStr(narrowStr.begin(), narrowStr.end());
+ return String(wideStr);
+
}
int64_t NumericField::getNumericValue() {
diff -Naupr a/src/core/search/FieldDoc.cpp c/src/core/search/FieldDoc.cpp
--- a/src/core/search/FieldDoc.cpp 2024-02-18 19:18:26.000000000 +0100
+++ c/src/core/search/FieldDoc.cpp 2025-03-31 10:42:12.819612969 +0200
@@ -6,6 +6,7 @@
#include "LuceneInc.h"
#include "FieldDoc.h"
+#include <boost/variant/get.hpp>
namespace Lucene {
@@ -19,14 +20,31 @@ FieldDoc::~FieldDoc() {
String FieldDoc::toString() {
StringStream buffer;
buffer << ScoreDoc::toString() << L"[";
+
+ bool first = true;
for (Collection<ComparableValue>::iterator field = fields.begin(); field != fields.end(); ++field) {
- if (field != fields.begin()) {
+ if (!first) {
buffer << L", ";
}
- buffer << *field;
+ first = false;
+
+ // Gestione del boost::variant
+ if (const std::wstring* s = boost::get<std::wstring>(&*field)) {
+ buffer << *s;
+ } else if (const int32_t* i = boost::get<int32_t>(&*field)) {
+ buffer << *i;
+ } else if (const int64_t* l = boost::get<int64_t>(&*field)) {
+ buffer << *l;
+ } else if (const double* d = boost::get<double>(&*field)) {
+ buffer << *d;
+ } else if (const uint8_t* b = boost::get<uint8_t>(&*field)) {
+ buffer << static_cast<int>(*b);
+ }
+ // Aggiungi altri tipi se necessario
}
+
buffer << L"]";
return buffer.str();
}
-}
+} // namespace Lucene
diff -Naupr a/src/core/search/NumericRangeQuery.cpp c/src/core/search/NumericRangeQuery.cpp
--- a/src/core/search/NumericRangeQuery.cpp 2024-02-18 19:18:26.000000000 +0100
+++ c/src/core/search/NumericRangeQuery.cpp 2025-03-31 10:46:59.001580233 +0200
@@ -3,7 +3,7 @@
// Distributable under the terms of either the Apache License (Version 2.0)
// or the GNU Lesser General Public License.
/////////////////////////////////////////////////////////////////////////////
-
+#include <boost/variant/get.hpp>
#include "LuceneInc.h"
#include "NumericRangeQuery.h"
#include "_NumericRangeQuery.h"
@@ -131,17 +131,36 @@ String NumericRangeQuery::toString(const
buffer << this->field << L":";
}
buffer << (minInclusive ? L"[" : L"{");
+
+ // Gestione del valore minimo
if (VariantUtils::isNull(min)) {
buffer << L"*";
} else {
- buffer << min;
+ // Estrazione del valore dal variant
+ if (const int32_t* i = boost::get<int32_t>(&min)) {
+ buffer << *i;
+ } else if (const int64_t* l = boost::get<int64_t>(&min)) {
+ buffer << *l;
+ } else if (const double* d = boost::get<double>(&min)) {
+ buffer << *d;
+ }
}
+
buffer << L" TO ";
+
+ // Gestione del valore massimo (NOTA: c'è un bug nel codice originale che usa 'min' invece di 'max')
if (VariantUtils::isNull(max)) {
buffer << L"*";
} else {
- buffer << max;
+ if (const int32_t* i = boost::get<int32_t>(&max)) {
+ buffer << *i;
+ } else if (const int64_t* l = boost::get<int64_t>(&max)) {
+ buffer << *l;
+ } else if (const double* d = boost::get<double>(&max)) {
+ buffer << *d;
+ }
}
+
buffer << (maxInclusive ? L"]" : L"}");
buffer << boostString();
return buffer.str();
diff -Naupr a/src/core/search/TermRangeQuery.cpp c/src/core/search/TermRangeQuery.cpp
--- a/src/core/search/TermRangeQuery.cpp 2024-02-18 19:18:26.000000000 +0100
+++ c/src/core/search/TermRangeQuery.cpp 2025-03-31 10:51:38.091670633 +0200
@@ -10,6 +10,7 @@
#include "Collator.h"
#include "StringUtils.h"
#include "VariantUtils.h"
+#include <boost/variant/get.hpp>
namespace Lucene {
@@ -72,22 +73,39 @@ String TermRangeQuery::toString(const St
buffer << getField() << L":";
}
buffer << (includeLower ? L"[" : L"{");
+
+ // Gestione del lowerTerm
if (VariantUtils::isNull(lowerTerm)) {
buffer << L"*";
} else {
- buffer << lowerTerm;
+ // Estrazione del valore stringa dal variant
+ if (const String* s = boost::get<String>(&lowerTerm)) {
+ buffer << *s;
+ } else if (const std::wstring* ws = boost::get<std::wstring>(&lowerTerm)) {
+ buffer << *ws;
+ }
+ // Aggiungi altri tipi se necessario
}
+
buffer << L" TO ";
+
+ // Gestione dell'upperTerm
if (VariantUtils::isNull(upperTerm)) {
buffer << L"*";
} else {
- buffer << upperTerm;
+ if (const String* s = boost::get<String>(&upperTerm)) {
+ buffer << *s;
+ } else if (const std::wstring* ws = boost::get<std::wstring>(&upperTerm)) {
+ buffer << *ws;
+ }
}
+
buffer << (includeUpper ? L"]" : L"}");
buffer << boostString();
return buffer.str();
}
+
bool TermRangeQuery::equals(const LuceneObjectPtr& other) {
if (LuceneObject::equals(other)) {
return true;