WebGPUWeakMap.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. export default class WebGPUWeakMap extends WeakMap {
  2. constructor() {
  3. super();
  4. }
  5. get( keys ) {
  6. if ( Array.isArray( keys ) ) {
  7. let map = this;
  8. for ( let i = 0; i < keys.length - 1; i ++ ) {
  9. map = map.get( keys[ i ] );
  10. if ( map === undefined ) return undefined;
  11. }
  12. return map.get( keys[ keys.length - 1 ] );
  13. } else {
  14. return super.get( keys );
  15. }
  16. }
  17. set( keys, value ) {
  18. if ( Array.isArray( keys ) ) {
  19. let map = this;
  20. for ( let i = 0; i < keys.length - 1; i ++ ) {
  21. const key = keys[ i ];
  22. if ( map.has( key ) === false ) map.set( key, new WeakMap() );
  23. map = map.get( key );
  24. }
  25. return map.set( keys[ keys.length - 1 ], value );
  26. } else {
  27. return super.set( keys, value );
  28. }
  29. }
  30. delete( keys ) {
  31. if ( Array.isArray( keys ) ) {
  32. let map = this;
  33. for ( let i = 0; i < keys.length - 1; i ++ ) {
  34. map = map.get( keys[ i ] );
  35. if ( map === undefined ) return false;
  36. }
  37. return map.delete( keys[ keys.length - 1 ] );
  38. } else {
  39. return super.delete( keys );
  40. }
  41. }
  42. }