Home | History | Annotate | Download | only in kati
      1 // Copyright 2015 Google Inc. All rights reserved
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //      http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 package kati
     16 
     17 import "sync"
     18 
     19 type symtabT struct {
     20 	mu sync.Mutex
     21 	m  map[string]string
     22 }
     23 
     24 var symtab = &symtabT{
     25 	m: make(map[string]string),
     26 }
     27 
     28 func intern(s string) string {
     29 	symtab.mu.Lock()
     30 	v, ok := symtab.m[s]
     31 	if ok {
     32 		symtab.mu.Unlock()
     33 		return v
     34 	}
     35 	symtab.m[s] = s
     36 	symtab.mu.Unlock()
     37 	return s
     38 }
     39 
     40 func internBytes(s []byte) string {
     41 	return intern(string(s))
     42 }
     43