OpenStack opens a stack if one exists at the given directory. If one does not already exist, a new stack is created.
(dataDir string)
| 23 | // OpenStack opens a stack if one exists at the given directory. If one |
| 24 | // does not already exist, a new stack is created. |
| 25 | func OpenStack(dataDir string) (*Stack, error) { |
| 26 | var err error |
| 27 | |
| 28 | // Create a new Stack. |
| 29 | s := &Stack{ |
| 30 | DataDir: dataDir, |
| 31 | db: &leveldb.DB{}, |
| 32 | head: 0, |
| 33 | tail: 0, |
| 34 | isOpen: false, |
| 35 | } |
| 36 | |
| 37 | // Open database for the stack. |
| 38 | s.db, err = leveldb.OpenFile(dataDir, nil) |
| 39 | if err != nil { |
| 40 | return s, err |
| 41 | } |
| 42 | |
| 43 | // Check if this Goque type can open the requested data directory. |
| 44 | ok, err := checkGoqueType(dataDir, goqueStack) |
| 45 | if err != nil { |
| 46 | return s, err |
| 47 | } |
| 48 | if !ok { |
| 49 | return s, ErrIncompatibleType |
| 50 | } |
| 51 | |
| 52 | // Set isOpen and return. |
| 53 | s.isOpen = true |
| 54 | return s, s.init() |
| 55 | } |
| 56 | |
| 57 | // Push adds an item to the stack. |
| 58 | func (s *Stack) Push(value []byte) (*Item, error) { |