property_map.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _KJS_PROPERTY_MAP_H_
00024 #define _KJS_PROPERTY_MAP_H_
00025
00026 #include "identifier.h"
00027
00028 namespace KJS {
00029
00030 class Object;
00031 class ReferenceList;
00032 class ValueImp;
00033
00034 class SavedProperty;
00035
00036 struct PropertyMapHashTable;
00037
00038 class SavedProperties {
00039 friend class PropertyMap;
00040 public:
00041 SavedProperties();
00042 ~SavedProperties();
00043
00044 private:
00045 int _count;
00046 SavedProperty *_properties;
00047
00048 SavedProperties(const SavedProperties&);
00049 SavedProperties& operator=(const SavedProperties&);
00050 };
00051
00052 struct PropertyMapHashTableEntry
00053 {
00054 PropertyMapHashTableEntry() : key(0) { }
00055 UString::Rep *key;
00056 ValueImp *value;
00057 int attributes;
00058 };
00059
00060 class PropertyMap {
00061 public:
00062 PropertyMap();
00063 ~PropertyMap();
00064
00065 void clear();
00066
00067 void put(const Identifier &name, ValueImp *value, int attributes);
00068 void remove(const Identifier &name);
00069 ValueImp *get(const Identifier &name) const;
00070 ValueImp *get(const Identifier &name, int &attributes) const;
00071
00072 void mark() const;
00073 void addEnumerablesToReferenceList(ReferenceList &, const Object &) const;
00074 void addSparseArrayPropertiesToReferenceList(ReferenceList &, const Object &) const;
00075
00076 void save(SavedProperties &) const;
00077 void restore(const SavedProperties &p);
00078
00079 private:
00080 int hash(const UString::Rep *) const;
00081 static bool keysMatch(const UString::Rep *, const UString::Rep *);
00082 void expand();
00083
00084 void insert(UString::Rep *, ValueImp *value, int attributes);
00085
00086 void checkConsistency();
00087
00088 typedef PropertyMapHashTableEntry Entry;
00089 typedef PropertyMapHashTable Table;
00090
00091 Table *_table;
00092
00093 Entry _singleEntry;
00094 };
00095
00096 }
00097
00098 #endif // _KJS_PROPERTY_MAP_H_
This file is part of the documentation for kjs Library Version 3.2.0.