-
Notifications
You must be signed in to change notification settings - Fork 49
/
Copy pathentries.cpp
99 lines (85 loc) · 2.49 KB
/
entries.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/* entries.cpp
* Richard Gibson, Jul 1, 2013
* email: [email protected]
*
* Contains the remaining Entries procedures that are not implemented in
* entries.hpp
*
* Copyright (C) 2013 by Richard Gibson
*/
/* C / C++ / STL includes */
#include <assert.h>
#include <string.h>
#include <stdio.h>
#include <sys/mman.h>
/* C project_acpc_poker includes */
extern "C" {
}
/* Pure CFR includes */
#include "entries.hpp"
#include "constants.hpp"
Entries::Entries( size_t new_num_entries_per_bucket,
size_t new_total_num_entries )
: num_entries_per_bucket( new_num_entries_per_bucket ),
total_num_entries( new_total_num_entries )
{
}
Entries::~Entries( )
{
}
size_t Entries::get_entry_index( const int bucket, const int64_t soln_idx ) const
{
return ( num_entries_per_bucket * bucket ) + soln_idx;
}
Entries *new_loaded_entries( const size_t num_entries_per_bucket,
const size_t total_num_entries,
void **data )
{
/* First, read the entry type */
pure_cfr_entry_type_t *type_ptr = ( pure_cfr_entry_type_t * ) ( *data );
pure_cfr_entry_type_t type = *type_ptr;
/* Advance the data pointer past the entry type */
type_ptr += 1;
( *data ) = ( void * ) type_ptr;
/* Load the appropriate type of entries and advance data past the entries */
Entries *entries = NULL;
switch( type ) {
case TYPE_UINT8_T: {
uint8_t *uint8_t_data = ( uint8_t * ) ( *data );
entries = new Entries_der<uint8_t>( num_entries_per_bucket, total_num_entries,
uint8_t_data );
uint8_t_data += total_num_entries;
( *data ) = ( void * ) uint8_t_data;
break;
}
case TYPE_INT: {
int *int_data = ( int * ) ( *data );
entries = new Entries_der<int>( num_entries_per_bucket, total_num_entries,
int_data );
int_data += total_num_entries;
( *data ) = ( void * ) int_data;
break;
}
case TYPE_UINT32_T: {
uint32_t *uint32_t_data = ( uint32_t * ) ( *data );
entries = new Entries_der<uint32_t>( num_entries_per_bucket,
total_num_entries, uint32_t_data );
uint32_t_data += total_num_entries;
( *data ) = ( void * ) uint32_t_data;
break;
}
case TYPE_UINT64_T: {
uint64_t *uint64_t_data = ( uint64_t * ) ( *data );
entries = new Entries_der<uint64_t>( num_entries_per_bucket,
total_num_entries, uint64_t_data );
uint64_t_data += total_num_entries;
( *data ) = ( void * ) uint64_t_data;
break;
}
default: {
fprintf( stderr, "unrecognized entry type [%d]\n", type );
break;
}
}
return entries;
}