|   | 
| /* | 
| * Licensed to the Apache Software Foundation (ASF) under one | 
| * or more contributor license agreements.  See the NOTICE file | 
| * distributed with this work for additional information | 
| * regarding copyright ownership.  The ASF licenses this file | 
| * to you under the Apache License, Version 2.0 (the | 
| * "License"); you may not use this file except in compliance | 
| * with the License.  You may obtain a copy of the License at | 
| * | 
| *   http://www.apache.org/licenses/LICENSE-2.0 | 
| * | 
| * Unless required by applicable law or agreed to in writing, | 
| * software distributed under the License is distributed on an | 
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
| * KIND, either express or implied.  See the License for the | 
| * specific language governing permissions and limitations | 
| * under the License. | 
| */ | 
|   | 
|   | 
| /** | 
|  * AUTO-GENERATED FILE. DO NOT MODIFY. | 
|  */ | 
|   | 
| /* | 
| * Licensed to the Apache Software Foundation (ASF) under one | 
| * or more contributor license agreements.  See the NOTICE file | 
| * distributed with this work for additional information | 
| * regarding copyright ownership.  The ASF licenses this file | 
| * to you under the Apache License, Version 2.0 (the | 
| * "License"); you may not use this file except in compliance | 
| * with the License.  You may obtain a copy of the License at | 
| * | 
| *   http://www.apache.org/licenses/LICENSE-2.0 | 
| * | 
| * Unless required by applicable law or agreed to in writing, | 
| * software distributed under the License is distributed on an | 
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
| * KIND, either express or implied.  See the License for the | 
| * specific language governing permissions and limitations | 
| * under the License. | 
| */ | 
| import { createHashMap, isObject, map, isString } from 'zrender/lib/core/util.js'; | 
| var uidBase = 0; | 
| var OrdinalMeta = /** @class */function () { | 
|   function OrdinalMeta(opt) { | 
|     this.categories = opt.categories || []; | 
|     this._needCollect = opt.needCollect; | 
|     this._deduplication = opt.deduplication; | 
|     this.uid = ++uidBase; | 
|   } | 
|   OrdinalMeta.createByAxisModel = function (axisModel) { | 
|     var option = axisModel.option; | 
|     var data = option.data; | 
|     var categories = data && map(data, getName); | 
|     return new OrdinalMeta({ | 
|       categories: categories, | 
|       needCollect: !categories, | 
|       // deduplication is default in axis. | 
|       deduplication: option.dedplication !== false | 
|     }); | 
|   }; | 
|   ; | 
|   OrdinalMeta.prototype.getOrdinal = function (category) { | 
|     // @ts-ignore | 
|     return this._getOrCreateMap().get(category); | 
|   }; | 
|   /** | 
|    * @return The ordinal. If not found, return NaN. | 
|    */ | 
|   OrdinalMeta.prototype.parseAndCollect = function (category) { | 
|     var index; | 
|     var needCollect = this._needCollect; | 
|     // The value of category dim can be the index of the given category set. | 
|     // This feature is only supported when !needCollect, because we should | 
|     // consider a common case: a value is 2017, which is a number but is | 
|     // expected to be tread as a category. This case usually happen in dataset, | 
|     // where it happent to be no need of the index feature. | 
|     if (!isString(category) && !needCollect) { | 
|       return category; | 
|     } | 
|     // Optimize for the scenario: | 
|     // category is ['2012-01-01', '2012-01-02', ...], where the input | 
|     // data has been ensured not duplicate and is large data. | 
|     // Notice, if a dataset dimension provide categroies, usually echarts | 
|     // should remove duplication except user tell echarts dont do that | 
|     // (set axis.deduplication = false), because echarts do not know whether | 
|     // the values in the category dimension has duplication (consider the | 
|     // parallel-aqi example) | 
|     if (needCollect && !this._deduplication) { | 
|       index = this.categories.length; | 
|       this.categories[index] = category; | 
|       return index; | 
|     } | 
|     var map = this._getOrCreateMap(); | 
|     // @ts-ignore | 
|     index = map.get(category); | 
|     if (index == null) { | 
|       if (needCollect) { | 
|         index = this.categories.length; | 
|         this.categories[index] = category; | 
|         // @ts-ignore | 
|         map.set(category, index); | 
|       } else { | 
|         index = NaN; | 
|       } | 
|     } | 
|     return index; | 
|   }; | 
|   // Consider big data, do not create map until needed. | 
|   OrdinalMeta.prototype._getOrCreateMap = function () { | 
|     return this._map || (this._map = createHashMap(this.categories)); | 
|   }; | 
|   return OrdinalMeta; | 
| }(); | 
| function getName(obj) { | 
|   if (isObject(obj) && obj.value != null) { | 
|     return obj.value; | 
|   } else { | 
|     return obj + ''; | 
|   } | 
| } | 
| export default OrdinalMeta; |