s_matrix 0.0.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e3c71d1514129d41285ca6bcdba7675d8c679a15
4
- data.tar.gz: 1d805c4c4711ab18cf4265db484c59bfd7aba042
3
+ metadata.gz: 9f8531538924a03ba311631db046c9297191ae0d
4
+ data.tar.gz: 16ac09c06c0106317814bb73553fce502fdf8746
5
5
  SHA512:
6
- metadata.gz: ce62e5637c30997f00aea492b231b2076f0e4880e052204b648a02bf5e1ac241469134c7adf92250cc2a9c55a2931866ca9c220efd55c383452ce456503c3d83
7
- data.tar.gz: d5dc439be30b0d6ba4284de0c9ae5d1de460361395ecc1083bbae105dcb87e5771fea1fc224465474d1473fef98b464f0b494cbecf78a8e9224a85e188a99414
6
+ metadata.gz: 9424d88c77864237d2f7a41dc6bc5ae01f2a339bf3302c0749386abaafb968908cc21c421e8a2f752924b5e1c46f19faf960968737c0677dca04010d9f3eefc5
7
+ data.tar.gz: 46c2d3de7e6f9227a8b5a583d0bce41928b3fb2ee10851f108a8513816649c95da7326a8651f7d453260fb9a9efd1f0a2f96d339fd6797e980e62d139e15178b
data/README.md CHANGED
@@ -1,7 +1,18 @@
1
- # SMatrix
2
-
3
- # Reduce memory usage for a large number of config. For example, game config in excel
4
-
1
+ Current version 1.0.0
2
+ Latest stable version is 1.0.0
3
+
4
+ ### Matrix reduce memory usage for large Hash.
5
+ Matrix store the hash like this: <br>
6
+ # {<br>
7
+ # '234234' => {'id' => '23232', 'name' => 'haha'},<br>
8
+ # '234235' => {'id' => '23235', 'name' => 'haha2', 'hp' => '232'}<br>
9
+ # '234236' => {'id' => '23235', 'name' => 'haha2', 'attack' => '2322'}<br>
10
+ # }<br>
11
+ For example, loading a game config ./spec/equipment\_strengthen.plist will use 480M when using ruby Hash like this:<br>
12
+ # {'234232' => {id: '23423', name: 'haha'}}<br>
13
+ Because there are about 1440000 ruby String objects when loading to memory.<br>
14
+ And it will use 5M when using SMatrix.<br>
15
+ Result from test: rspec ./spec/performance\_spec.rb<br>
5
16
 
6
17
  ## Installation
7
18
 
@@ -17,20 +28,25 @@ Or install it yourself as:
17
28
 
18
29
  $ gem install s_matrix
19
30
 
20
- ## Usage
21
-
22
- TODO: Write usage instructions here
23
-
24
- ## Contributing
25
- 1. Fork it ( https://github.com/libinzhangyuan/s_matrix/fork )
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create a new Pull Request
30
-
31
- gem build s_matrix.gemspec
32
-
33
- gem install ./s_matrix-0.0.1.gem # please change version number to current one.
34
-
35
- gem push s_matrix-0.0.1.gem
36
31
 
32
+ ## Usage
33
+ ### initialize the config const
34
+ # every thing will change to string (.to\_s) when saving to SMatrix<br>
35
+ EQUIPMENTS = SMatrix.new<br>
36
+ EQUIPMENTS.add\_row('10001', {'id' => '10001', 'name' => 'wood sword', 'attack' => '342'})<br>
37
+ EQUIPMENTS.add\_row('20002', {id: 10002, name: 'shoe', speed: 5})<br>
38
+
39
+ ### use the config const
40
+ # everything get back will be string<br>
41
+ EQUIPMENTS\['10001'].should == {'id' => '10001', 'name' => 'wood sword', 'attack' => '342''}<br>
42
+ EQUIPMENTS\['10001']['id'].should == '10001'<br>
43
+ EQUIPMENTS\['10001'][:id].should == '10001'<br>
44
+ EQUIPMENTS\['20002'].should == {'id' => '10002', 'name' => 'shoe', 'speed' => '5'}<br>
45
+ EQUIPMENTS\['20002']['attack'].should == '552'<br>
46
+ EQUIPMENTS.size.should == 2
47
+ # or you can use get\_row instead of []<br>
48
+ EQUIPMENTS.get\_row('20002')<br>
49
+ # each
50
+ EQUIPMENTS.each {|k, v| k == '10001', v == {'id' => '10001', 'name' => 'sword', ...} }
51
+ # for debug
52
+ puts EQUIPMENTS.to_s
@@ -0,0 +1,22 @@
1
+ # SMatrix
2
+ Please coding following the 'Code Compelte' book.
3
+ And please write the rspec test.
4
+
5
+ ## Contributing
6
+ 1. Fork it ( https://github.com/libinzhangyuan/s_matrix/fork )
7
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
8
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
9
+ 4. Push to the branch (`git push origin my-new-feature`)
10
+ 5. Create a new Pull Request
11
+
12
+ ## Compile
13
+ rake clean
14
+ rake compile
15
+
16
+ ## Test
17
+ rspec ./spec
18
+
19
+ # how to build gem
20
+ gem build s_matrix.gemspec
21
+ gem install ./s_matrix-0.0.1.gem # please change version number to current one. Find version at lib/s_matrix/version.rb.
22
+ gem push s_matrix-0.0.1.gem
@@ -12,6 +12,7 @@ GMatx::GMatx(void)
12
12
  void GMatx::add_row(const std::string& id, const t_key_value_hash& row_content)
13
13
  {
14
14
  // 处理新增的title
15
+ // deal the new title
15
16
  //
16
17
  for (t_key_value_hash::const_iterator iter = row_content.begin();
17
18
  iter != row_content.end(); ++iter)
@@ -21,7 +22,7 @@ void GMatx::add_row(const std::string& id, const t_key_value_hash& row_content)
21
22
  m_titles.add_title(title);
22
23
  }
23
24
 
24
- // 加到content中
25
+ // 加到content中 add this row to content.
25
26
  //
26
27
  m_contents.set_row_with_order(id, row_content, m_titles.get_titles());
27
28
  }
data/ext/s_matrix/gmatx.h CHANGED
@@ -13,6 +13,7 @@ public:
13
13
  void add_row(const std::string& id, const t_key_value_hash& row_content);
14
14
 
15
15
  // 当找不到id所对应的行时,返回的t_key_value_hash数据的size=0
16
+ // size of t_key_value_hash will be zero when couldn't find the row.
16
17
  t_key_value_hash get_row(const std::string& id) const;
17
18
  std::string to_s(void) const;
18
19
  size_t size(void) const;
@@ -63,6 +63,7 @@ std::string MatxContent::to_s(const std::vector<std::string>& titles) const
63
63
  void MatxContent::set_row_with_order(const std::string& id, const t_key_value_hash& row_content, const std::vector<std::string>& titles_for_order)
64
64
  {
65
65
  // 根据titles_for_order的顺序,组装出value
66
+ // assemble the values following the order of titles_for_order.
66
67
  std::vector<std::string> values;
67
68
  for (std::vector<std::string>::const_iterator iter = titles_for_order.begin();
68
69
  iter != titles_for_order.end(); ++iter)
@@ -78,5 +79,6 @@ void MatxContent::set_row_with_order(const std::string& id, const t_key_value_ha
78
79
  }
79
80
 
80
81
  // 保存行
82
+ // save row.
81
83
  m_rows[id] = MatxRow(values);
82
84
  }
@@ -12,6 +12,7 @@ public:
12
12
  MatxContent(void);
13
13
 
14
14
  // 按照titles_for_order中的顺序,格式化row_content中的内容,来设置新行
15
+ // set new row following the order of titles_for_order.
15
16
  void set_row_with_order(const std::string& id, const t_key_value_hash& row_content, const std::vector<std::string>& titles_for_order);
16
17
 
17
18
  const MatxRow& get_row(const std::string& id) const;
@@ -70,7 +70,7 @@ static VALUE t_add_row(VALUE self, VALUE id, VALUE row)
70
70
  Check_Type(row, T_HASH);
71
71
 
72
72
 
73
- // 处理id
73
+ // 处理id deal with id
74
74
  //
75
75
  VALUE id_str = rb_funcall(id, rb_intern("to_s"), 0);
76
76
  char* p_id_c_str = StringValuePtr(id_str);
@@ -78,12 +78,12 @@ static VALUE t_add_row(VALUE self, VALUE id, VALUE row)
78
78
  if (p_id_c_str[0] == 0)
79
79
  rb_raise(rb_eTypeError, "id can't be blank!");
80
80
 
81
- // 处理row
81
+ // 处理row deal with row
82
82
  //
83
83
  t_key_value_hash row_hash;
84
84
  rb_hash_foreach(row, (int (*)(ANYARGS))t_add_row_hash_iter_func, (VALUE)&row_hash);
85
85
 
86
- // 存数据
86
+ // 存数据 store data
87
87
  //
88
88
  class GMatx* pMatx = NULL;
89
89
  Data_Get_Struct(self, class GMatx, pMatx);
@@ -110,11 +110,11 @@ static VALUE row_hash_to_ruby_hash(const t_key_value_hash& row_hash)
110
110
 
111
111
  static VALUE t_get_row(VALUE self, VALUE id)
112
112
  {
113
- // 处理id
113
+ // 处理id deal with id
114
114
  //
115
115
  VALUE id_str = rb_funcall(id, rb_intern("to_s"), 0);
116
116
  char* p_id_c_str = StringValuePtr(id_str);
117
- // id 为空字符串
117
+ // id 为空字符串 check whether id blank
118
118
  if (p_id_c_str[0] == 0)
119
119
  rb_raise(rb_eTypeError, "id can't be blank!");
120
120
 
@@ -1,5 +1,5 @@
1
1
  class SMatrix
2
- VERSION = "0.0.3"
2
+ VERSION = "1.0.0"
3
3
  end
4
4
 
5
5
  require "s_matrix/s_matrix"
data/lib/s_matrix.rb CHANGED
@@ -4,7 +4,7 @@ require 's_matrix'
4
4
 
5
5
 
6
6
  class SMatrix
7
- def self.test
8
- 3
7
+ def [](index)
8
+ self.get_row(index.to_s)
9
9
  end
10
10
  end
data/s_matrix.gemspec CHANGED
@@ -27,6 +27,6 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "rake-compiler", "~> 0.9"
28
28
 
29
29
 
30
- # 临时添加测试用
31
- spec.add_development_dependency "plist", "~> 3.1.0"
30
+ # for testing
31
+ spec.add_development_dependency "plist", "~> 3.1"
32
32
  end
data/spec/smatrix_spec.rb CHANGED
@@ -85,6 +85,16 @@ describe SMatrix do
85
85
  end
86
86
  end
87
87
 
88
+ describe '[]' do
89
+ it '' do
90
+ a = SMatrix.new
91
+ a.add_row('2', {a: 2})
92
+ a.add_row('2', {b: 3})
93
+ expect(a['2']).to eq({'a' => nil, 'b' => '3'})
94
+ expect(a['2'][:a]).to eq nil
95
+ expect(a['2']['b']).to eq '3'
96
+ end
97
+ end
88
98
 
89
99
  end
90
100
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: s_matrix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - zhangyuan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-27 00:00:00.000000000 Z
11
+ date: 2014-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 3.1.0
75
+ version: '3.1'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 3.1.0
82
+ version: '3.1'
83
83
  description: not finish
84
84
  email:
85
85
  - libinzhangyuan@gmail.com
@@ -92,6 +92,7 @@ files:
92
92
  - Gemfile
93
93
  - LICENSE
94
94
  - README.md
95
+ - README_for_contributor.md
95
96
  - Rakefile
96
97
  - ext/s_matrix/Makefile
97
98
  - ext/s_matrix/extconf.rb