@@ -86,7 +86,7 @@ impl<D: QueryData, F: QueryFilter> QueryState<D, F> {
86
86
///
87
87
/// This doesn't use `NopWorldQuery` as it loses filter functionality, for example
88
88
/// `NopWorldQuery<Changed<T>>` is functionally equivalent to `With<T>`.
89
- pub fn as_nop ( & self ) -> & QueryState < NopWorldQuery < D > , F > {
89
+ pub ( crate ) fn as_nop ( & self ) -> & QueryState < NopWorldQuery < D > , F > {
90
90
// SAFETY: `NopWorldQuery` doesn't have any accesses and defers to
91
91
// `D` for table/archetype matching
92
92
unsafe { self . as_transmuted_state :: < NopWorldQuery < D > , F > ( ) }
@@ -244,6 +244,24 @@ impl<D: QueryData, F: QueryFilter> QueryState<D, F> {
244
244
}
245
245
}
246
246
247
+ /// Returns `true` if the given [`Entity`] matches the query.
248
+ ///
249
+ /// This is always guaranteed to run in `O(1)` time.
250
+ #[ inline]
251
+ pub fn contains ( & self , entity : Entity , world : & World , last_run : Tick , this_run : Tick ) -> bool {
252
+ // SAFETY: NopFetch does not access any members while &self ensures no one has exclusive access
253
+ unsafe {
254
+ self . as_nop ( )
255
+ . get_unchecked_manual (
256
+ world. as_unsafe_world_cell_readonly ( ) ,
257
+ entity,
258
+ last_run,
259
+ this_run,
260
+ )
261
+ . is_ok ( )
262
+ }
263
+ }
264
+
247
265
/// Checks if the query is empty for the given [`UnsafeWorldCell`].
248
266
///
249
267
/// # Safety
@@ -570,6 +588,8 @@ impl<D: QueryData, F: QueryFilter> QueryState<D, F> {
570
588
/// Gets the query result for the given [`World`] and [`Entity`].
571
589
///
572
590
/// This can only be called for read-only queries, see [`Self::get_mut`] for write-queries.
591
+ ///
592
+ /// This is always guaranteed to run in `O(1)` time.
573
593
#[ inline]
574
594
pub fn get < ' w > (
575
595
& mut self ,
@@ -642,6 +662,8 @@ impl<D: QueryData, F: QueryFilter> QueryState<D, F> {
642
662
}
643
663
644
664
/// Gets the query result for the given [`World`] and [`Entity`].
665
+ ///
666
+ /// This is always guaranteed to run in `O(1)` time.
645
667
#[ inline]
646
668
pub fn get_mut < ' w > (
647
669
& mut self ,
@@ -733,6 +755,8 @@ impl<D: QueryData, F: QueryFilter> QueryState<D, F> {
733
755
/// access to `self`.
734
756
///
735
757
/// This can only be called for read-only queries, see [`Self::get_mut`] for mutable queries.
758
+ ///
759
+ /// This is always guaranteed to run in `O(1)` time.
736
760
#[ inline]
737
761
pub fn get_manual < ' w > (
738
762
& self ,
@@ -753,6 +777,8 @@ impl<D: QueryData, F: QueryFilter> QueryState<D, F> {
753
777
754
778
/// Gets the query result for the given [`World`] and [`Entity`].
755
779
///
780
+ /// This is always guaranteed to run in `O(1)` time.
781
+ ///
756
782
/// # Safety
757
783
///
758
784
/// This does not check for mutable query correctness. To be safe, make sure mutable queries
@@ -770,6 +796,8 @@ impl<D: QueryData, F: QueryFilter> QueryState<D, F> {
770
796
/// Gets the query result for the given [`World`] and [`Entity`], where the last change and
771
797
/// the current change tick are given.
772
798
///
799
+ /// This is always guaranteed to run in `O(1)` time.
800
+ ///
773
801
/// # Safety
774
802
///
775
803
/// This does not check for mutable query correctness. To be safe, make sure mutable queries
@@ -850,6 +878,8 @@ impl<D: QueryData, F: QueryFilter> QueryState<D, F> {
850
878
/// Gets the query results for the given [`World`] and array of [`Entity`], where the last change and
851
879
/// the current change tick are given.
852
880
///
881
+ /// This is always guaranteed to run in `O(1)` time.
882
+ ///
853
883
/// # Safety
854
884
///
855
885
/// This does not check for unique access to subsets of the entity-component data.
0 commit comments