From 2c358e705bbde855b12780be86ef19501a62dfed Mon Sep 17 00:00:00 2001 From: Mason Reed Date: Tue, 3 Mar 2026 07:57:33 -0800 Subject: [WARP] Server-side constraint matching Reduce networked functions by constraining on the returned set of functions on the server --- plugins/warp/api/python/warp.py | 10 ++++++++-- plugins/warp/api/warp.cpp | 9 +++++++-- plugins/warp/api/warp.h | 2 +- plugins/warp/api/warpcore.h | 2 +- 4 files changed, 17 insertions(+), 6 deletions(-) (limited to 'plugins/warp/api') diff --git a/plugins/warp/api/python/warp.py b/plugins/warp/api/python/warp.py index a699ebbc..2ba1c681 100644 --- a/plugins/warp/api/python/warp.py +++ b/plugins/warp/api/python/warp.py @@ -426,11 +426,17 @@ class WarpContainer(metaclass=_WarpContainerMetaclass): core_guids[i] = guids[i].uuid return warpcore.BNWARPContainerRemoveTypes(self.handle, source.uuid, core_guids, count) - def fetch_functions(self, target: WarpTarget, guids: List[FunctionGUID], source_tags: Optional[List[str]] = None): + def fetch_functions(self, target: WarpTarget, guids: List[FunctionGUID], source_tags: Optional[List[str]] = None, constraints: Optional[List[ConstraintGUID]] = None): count = len(guids) core_guids = (warpcore.BNWARPFunctionGUID * count)() for i in range(count): core_guids[i] = guids[i].uuid + if constraints is None: + constraints = [] + constraints_count = len(constraints) + core_constraints = (warpcore.BNWARPConstraintGUID * constraints_count)() + for i in range(constraints_count): + core_constraints[i] = constraints[i].uuid if source_tags is None: source_tags = [] source_tags_ptr = (ctypes.c_char_p * len(source_tags))() @@ -438,7 +444,7 @@ class WarpContainer(metaclass=_WarpContainerMetaclass): for i in range(len(source_tags)): source_tags_ptr[i] = source_tags[i].encode('utf-8') source_tags_array_ptr = ctypes.cast(source_tags_ptr, ctypes.POINTER(ctypes.c_char_p)) - warpcore.BNWARPContainerFetchFunctions(self.handle, target.handle, source_tags_array_ptr, source_tags_len, core_guids, count) + warpcore.BNWARPContainerFetchFunctions(self.handle, target.handle, source_tags_array_ptr, source_tags_len, core_guids, count, core_constraints, constraints_count) def get_sources_with_function_guid(self, target: WarpTarget, guid: FunctionGUID) -> List[Source]: count = ctypes.c_size_t() diff --git a/plugins/warp/api/warp.cpp b/plugins/warp/api/warp.cpp index c051e3c7..debbbc00 100644 --- a/plugins/warp/api/warp.cpp +++ b/plugins/warp/api/warp.cpp @@ -353,7 +353,7 @@ bool Container::RemoveTypes(const Source &source, const std::vector &g return result; } -void Container::FetchFunctions(const Target &target, const std::vector &guids, const std::vector &tags) const +void Container::FetchFunctions(const Target &target, const std::vector &guids, const std::vector &tags, const std::vector &constraints) const { size_t count = guids.size(); BNWARPFunctionGUID *apiGuids = new BNWARPFunctionGUID[count]; @@ -363,9 +363,14 @@ void Container::FetchFunctions(const Target &target, const std::vector Container::GetSourcesWithFunctionGUID(const Target& target, const FunctionGUID &guid) const diff --git a/plugins/warp/api/warp.h b/plugins/warp/api/warp.h index 01f4aaee..ccb4da97 100644 --- a/plugins/warp/api/warp.h +++ b/plugins/warp/api/warp.h @@ -409,7 +409,7 @@ namespace Warp { bool RemoveTypes(const Source &source, const std::vector &guids) const; - void FetchFunctions(const Target &target, const std::vector &guids, const std::vector &tags = {}) const; + void FetchFunctions(const Target &target, const std::vector &guids, const std::vector &tags = {}, const std::vector &constraints = {}) const; std::vector GetSourcesWithFunctionGUID(const Target &target, const FunctionGUID &guid) const; diff --git a/plugins/warp/api/warpcore.h b/plugins/warp/api/warpcore.h index c52485aa..21ef105b 100644 --- a/plugins/warp/api/warpcore.h +++ b/plugins/warp/api/warpcore.h @@ -128,7 +128,7 @@ extern "C" WARP_FFI_API bool BNWARPContainerRemoveFunctions(BNWARPContainer* container, const BNWARPTarget* target, const BNWARPSource* source, BNWARPFunction** functions, size_t count); WARP_FFI_API bool BNWARPContainerRemoveTypes(BNWARPContainer* container, const BNWARPSource* source, BNWARPTypeGUID* types, size_t count); - WARP_FFI_API void BNWARPContainerFetchFunctions(BNWARPContainer* container, BNWARPTarget* target, const char** sourceTags, size_t sourceTagCount, const BNWARPTypeGUID* guids, size_t count); + WARP_FFI_API void BNWARPContainerFetchFunctions(BNWARPContainer* container, BNWARPTarget* target, const char** sourceTags, size_t sourceTagCount, const BNWARPFunctionGUID* guids, size_t count, const BNWARPConstraintGUID* constraints, size_t constraintCount); WARP_FFI_API BNWARPSource* BNWARPContainerGetSourcesWithFunctionGUID(BNWARPContainer* container, const BNWARPTarget* target, const BNWARPFunctionGUID* guid, size_t* count); WARP_FFI_API BNWARPSource* BNWARPContainerGetSourcesWithTypeGUID(BNWARPContainer* container, const BNWARPTypeGUID* guid, size_t* count); -- cgit v1.3.1