mirror of
https://github.com/Chaoscaot/schemsearch.git
synced 2025-12-25 23:57:06 +01:00
Refactor code structure and improve performance by optimizing OpenCL kernel and adding timing macros; update Cargo.toml for release profile settings; enhance main.rs and sinks.rs for better readability and organization.
This commit is contained in:
8
schemsearch-lib/src/.idea/modules.xml
generated
Normal file
8
schemsearch-lib/src/.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/src.iml" filepath="$PROJECT_DIR$/.idea/src.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
8
schemsearch-lib/src/.idea/src.iml
generated
Normal file
8
schemsearch-lib/src/.idea/src.iml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="CPP_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
6
schemsearch-lib/src/.idea/vcs.xml
generated
Normal file
6
schemsearch-lib/src/.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
63
schemsearch-lib/src/.idea/workspace.xml
generated
Normal file
63
schemsearch-lib/src/.idea/workspace.xml
generated
Normal file
@@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CMakeSettings">
|
||||
<configurations>
|
||||
<configuration PROFILE_NAME="Debug" ENABLED="true" CONFIG_NAME="Debug" />
|
||||
</configurations>
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="352451bc-b368-403e-b1be-bfdcb573471f" name="Changes" comment="">
|
||||
<change afterPath="$PROJECT_DIR$/../../schemsearch-py/Cargo.toml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/../../schemsearch-py/pyproject.toml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/../../schemsearch-py/src/lib.rs" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../../Cargo.toml" beforeDir="false" afterPath="$PROJECT_DIR$/../../Cargo.toml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../../SchemSearch.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../SchemSearch.java" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="ClangdSettings">
|
||||
<option name="formatViaClangd" value="false" />
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../.." />
|
||||
</component>
|
||||
<component name="ProjectColorInfo"><![CDATA[{
|
||||
"customColor": "",
|
||||
"associatedIndex": 8
|
||||
}]]></component>
|
||||
<component name="ProjectId" id="2gFqSldpa6G5CPOKD9Sjp2GUcRW" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent"><![CDATA[{
|
||||
"keyToString": {
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"RunOnceActivity.cidr.known.project.marker": "true",
|
||||
"RunOnceActivity.readMode.enableVisualFormatting": "true",
|
||||
"cf.first.check.clang-format": "false",
|
||||
"cidr.known.project.marker": "true",
|
||||
"git-widget-placeholder": "master",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"vue.rearranger.settings.migration": "true"
|
||||
}
|
||||
}]]></component>
|
||||
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="352451bc-b368-403e-b1be-bfdcb573471f" name="Changes" comment="" />
|
||||
<created>1715303674752</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1715303674752</updated>
|
||||
<workItem from="1715303675811" duration="8000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -1,16 +1,19 @@
|
||||
use crate::pattern_mapper::{match_palette, match_palette_adapt};
|
||||
use math::round::ceil;
|
||||
use schemsearch_common::Match;
|
||||
use schemsearch_common::time;
|
||||
use schemsearch_common::{Match, SearchBehavior};
|
||||
use schemsearch_files::SpongeSchematic;
|
||||
use schemsearch_ocl_matcher::ocl_search;
|
||||
use crate::{SearchBehavior};
|
||||
use crate::pattern_mapper::{match_palette, match_palette_adapt};
|
||||
|
||||
pub fn search(
|
||||
schem: SpongeSchematic,
|
||||
pattern_schem: &SpongeSchematic,
|
||||
search_behavior: SearchBehavior,
|
||||
) -> Vec<Match> {
|
||||
if schem.width < pattern_schem.width || schem.height < pattern_schem.height || schem.length < pattern_schem.length {
|
||||
if schem.width < pattern_schem.width
|
||||
|| schem.height < pattern_schem.height
|
||||
|| schem.length < pattern_schem.length
|
||||
{
|
||||
return Vec::new();
|
||||
}
|
||||
|
||||
@@ -18,17 +21,27 @@ pub fn search(
|
||||
return Vec::new();
|
||||
}
|
||||
|
||||
let pattern_schem = match_palette(&schem, &pattern_schem, search_behavior.ignore_block_data);
|
||||
let pattern_schem = time!(match_palette, {
|
||||
match_palette(&schem, &pattern_schem, search_behavior.ignore_block_data)
|
||||
});
|
||||
|
||||
let mut matches: Vec<Match> = Vec::with_capacity(4);
|
||||
|
||||
let schem_data = if search_behavior.ignore_block_data {
|
||||
match_palette_adapt(&schem, &pattern_schem.palette, search_behavior.ignore_block_data)
|
||||
match_palette_adapt(
|
||||
&schem,
|
||||
&pattern_schem.palette,
|
||||
search_behavior.ignore_block_data,
|
||||
)
|
||||
} else {
|
||||
schem.block_data
|
||||
};
|
||||
|
||||
let air_id = if search_behavior.ignore_air || search_behavior.air_as_any { pattern_schem.palette.get("minecraft:air").unwrap_or(&-1) } else { &-1};
|
||||
let air_id = if search_behavior.ignore_air || search_behavior.air_as_any {
|
||||
pattern_schem.palette.get("minecraft:air").unwrap_or(&-1)
|
||||
} else {
|
||||
&-1
|
||||
};
|
||||
|
||||
let pattern_blocks = pattern_schem.block_data.len() as f32;
|
||||
let i_pattern_blocks = pattern_blocks as i32;
|
||||
@@ -42,29 +55,42 @@ pub fn search(
|
||||
let schem_length = schem.length as usize;
|
||||
|
||||
if search_behavior.opencl {
|
||||
return ocl_search(schem_data.as_slice(), [schem_width, schem_height, schem_length], pattern_schem.block_data.as_slice(), [pattern_width, pattern_height, pattern_length], *air_id, search_behavior).unwrap()
|
||||
return time!(ocl_search, {
|
||||
ocl_search(
|
||||
schem_data.as_slice(),
|
||||
[schem_width, schem_height, schem_length],
|
||||
pattern_schem.block_data.as_slice(),
|
||||
[pattern_width, pattern_height, pattern_length],
|
||||
*air_id,
|
||||
search_behavior,
|
||||
)
|
||||
.unwrap()
|
||||
});
|
||||
}
|
||||
|
||||
let schem_data = schem_data.as_ptr();
|
||||
|
||||
let pattern_data = pattern_schem.block_data.as_ptr();
|
||||
|
||||
let skip_amount = ceil((pattern_blocks * (1.0 - search_behavior.threshold)) as f64, 0) as i32;
|
||||
let skip_amount = ceil(
|
||||
(pattern_blocks * (1.0 - search_behavior.threshold)) as f64,
|
||||
0,
|
||||
) as i32;
|
||||
|
||||
for y in 0..=schem_height - pattern_height {
|
||||
for z in 0..=schem_length - pattern_length {
|
||||
for x in 0..=schem_width - pattern_width {
|
||||
let mut not_matching = 0;
|
||||
'outer:
|
||||
for j in 0..pattern_height {
|
||||
'outer: for j in 0..pattern_height {
|
||||
for k in 0..pattern_length {
|
||||
'inner:
|
||||
for i in 0..pattern_width {
|
||||
'inner: for i in 0..pattern_width {
|
||||
let index = (x + i) + schem_width * ((z + k) + (y + j) * schem_length);
|
||||
let pattern_index = i + pattern_width * (k + j * pattern_length);
|
||||
let data = unsafe { *schem_data.add(index) };
|
||||
let pattern_data = unsafe { *pattern_data.add(pattern_index) };
|
||||
if (search_behavior.ignore_air && data != *air_id) || (search_behavior.air_as_any && pattern_data != *air_id) {
|
||||
if (search_behavior.ignore_air && data != *air_id)
|
||||
|| (search_behavior.air_as_any && pattern_data != *air_id)
|
||||
{
|
||||
continue 'inner;
|
||||
}
|
||||
if data != pattern_data {
|
||||
@@ -90,4 +116,4 @@ pub fn search(
|
||||
}
|
||||
|
||||
return matches;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user