Erlang (programming language)/Tutorials/ETS: Difference between revisions

From Citizendium
Jump to navigation Jump to search
imported>Eric Evers
imported>Eric Evers
Line 17: Line 17:
  populate( Kingdom, [{micky,mouse}, {mini,mouse}, {goofy}] ),
  populate( Kingdom, [{micky,mouse}, {mini,mouse}, {goofy}] ),
  Member = ets:member( Kingdom, micky ),
  Member = ets:member( Kingdom, micky ),
  io:format( " ~w ~n ", [ Member ] ),
  io:format( " member ~w ~n ", [ Member ] ),
  show_next_key( Kingdom, micky ),
  show_next_key( Kingdom, micky ),
  find_animal( Kingdom, Animal ).
  find_animal( Kingdom, Animal ).
Line 39: Line 39:
  % ==============
  % ==============
  % 53> test_ets:start().
  % 53> test_ets:start().
  % true  
  % member true  
  %  next mini  
  %  next mini  
  %  next goofy  
  %  next goofy  
  %  next '$end_of_table'  
  %  next '$end_of_table'  
  %  [[mini],[micky]]
  %  [[mini],[micky]]

Revision as of 19:36, 17 April 2008

ETS local data storage

ETS is the erlang table storage system, which provides hash storage and access functions. ETS data is stored in a process as long as it is running. Here is a simple sample of how to use the most simple functions in ETS

Sample program: test_ets.erl

-module(test_ets).
-compile(export_all).

start() -> start( mouse ).

start( Animal ) ->
	Kingdom = ets:new( 'magic',  [] ),
	% note: table is not square
	populate( Kingdom, [{micky,mouse}, {mini,mouse}, {goofy}] ),
	Member = ets:member( Kingdom, micky ),
	io:format( " member ~w ~n ", [ Member ] ),
	show_next_key( Kingdom, micky ),
	find_animal( Kingdom, Animal ).
	
show_next_key( _Kingdom, '$end_of_table' ) -> done;
show_next_key( Kingdom,  Key) ->
	Next = ets:next( Kingdom, Key ),
	io:format( " next ~w ~n ", [ Next ] ),
	show_next_key( Kingdom, Next ).

populate( _Kingdom, [] ) -> {done,start};
populate( Kingdom, [H | T] ) ->
		ets:insert( Kingdom, H ),
		populate( Kingdom, T ).
	
find_animal( Kingdom, Animal ) ->
	ets:match( Kingdom, { '$1', Animal } ).
% ==============
% sample output
% ==============
% 53> test_ets:start().
% member true 
%  next mini 
%  next goofy 
%  next '$end_of_table' 
%  [[mini],[micky]]