+#import "ITVirtualMemoryInfo.h"
+
+@interface ITVirtualMemoryInfo (Private)
+- (BOOL)refreshStats;
+@end
+
+@implementation ITVirtualMemoryInfo
+
+- (id)init
+{
+ if ( ( self = [super init] ) ) {
+ if ([self refreshStats:&stat] == NO) {
+ return nil;
+ }
+ }
+ return self;
+}
+
+- (int)pageSize
+{
+ int pageSize = 0;
+
+ if ( host_page_size(mach_host_self(), &pageSize) != KERN_SUCCESS ) {
+ NSLog(@"Failed to get page size, defaulting to 4096/4k");
+ pageSize = DEFAULT_PAGE_SIZE;
+ }
+
+ return pageSize;
+}
+
+- (int)freePages
+{
+ [self refreshStats:&stat];
+ return stat.free_count;
+}
+
+- (int)activePages
+{
+ [self refreshStats:&stat];
+ return stat.active_count;
+}
+
+- (int)inactivePages
+{
+ [self refreshStats:&stat];
+ return stat.inactive_count;
+}
+
+- (int)wiredPages
+{
+ [self refreshStats:&stat];
+ return stat.wire_count;
+}
+
+- (int)faults
+{
+ [self refreshStats:&stat];
+ return stat.faults;
+}
+
+- (int)copyOnWritePages
+{
+ [self refreshStats:&stat];
+ return stat.cow_faults;
+}
+
+- (int)zeroFilledPages
+{
+ [self refreshStats:&stat];
+ return stat.zero_fill_count;
+}
+
+- (int)reactivatedPages
+{
+ [self refreshStats:&stat];
+ return stat.reactivations;
+}
+
+- (int)pageins
+{
+ [self refreshStats:&stat];
+ return stat.pageins;
+}
+
+- (int)pageouts
+{
+ [self refreshStats:&stat];
+ return stat.pageouts;
+}
+
+- (int)hits
+{
+ [self refreshStats:&stat];
+ return stat.hits;
+}
+
+- (int)lookups
+{
+ [self refreshStats:&stat];
+ return stat.lookups;
+}
+
+- (int)hitratePercentage
+{
+ [self refreshStats:&stat];
+ if ( stat.lookups == 0 ) {
+ return 0;
+ } else {
+ return ( ( stat.hits * 100 ) / stat.lookups );
+ }
+}
+
+- (BOOL)refreshStats:(struct vm_statistics *)myStat
+{
+ bzero(&myStat,sizeof(myStat));
+ mach_port_t myHost = mach_host_self();
+ int count = HOST_VM_INFO_COUNT;
+ NSLog(@"%i",count);
+ int returned = host_statistics(myHost, HOST_VM_INFO, myStat, &count);
+ if ( returned != KERN_SUCCESS ) {
+ NSLog(@"Failed to get Statistics in -refreshStats method of ITVirtualMemoryInfo");
+ NSLog(@"%s",strerror(returned));
+ return NO;
+ } else {
+ return YES;
+ }
+}
+
+@end