Permalink
Browse files

refactoring into separate files

  • Loading branch information...
1 parent 12649cb commit e3268e8d72d30987c895a158f118267039daf28d @steveyen steveyen committed Sep 20, 2010
Showing with 449 additions and 503 deletions.
  1. +88 −0 items_ht.js
  2. +10 −349 main.js
  3. +315 −0 server_ascii.js
  4. +36 −0 test.out
  5. +0 −154 treap.js
View
@@ -0,0 +1,88 @@
+#!/usr/bin/env node
+
+/* Copyright 2010 NorthScale, Inc.
+ *
+ * Licensed 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.
+ */
+var sys = require('sys');
+
+// ----------------------------------------------------
+
+// An asynchronous (callback-oriented) items
+// implementation using hashtable, with range support.
+//
+function mkItems() {
+ var ht = {};
+ var truth = function() { return true; };
+
+ var self = {
+ lookup: function(keys, cb) {
+ if (typeof(keys) == 'string') {
+ keys = [keys];
+ }
+
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
+ if (cb(key, ht[key]) == false) {
+ break;
+ }
+ }
+
+ cb(null);
+ },
+ update: function(k, cb) {
+ ht[k] = cb(k, ht[k]);
+ cb(null);
+ },
+ remove: function(k, cb) {
+ var prev = ht[k];
+ delete ht[k];
+ cb(k, prev);
+ cb(null);
+ },
+ reset: function(cb) { ht = {}; cb(null); },
+ range: function(startKey,
+ startInclusion,
+ endKey,
+ endInclusion,
+ cb) {
+ var startPredicate =
+ startKey ?
+ (startInclusion ?
+ (function(k) { return k >= startKey }) :
+ (function(k) { return k > startKey })) :
+ truth;
+
+ var endPredicate =
+ endKey ?
+ (endInclusion ?
+ (function(k) { return k <= endKey }) :
+ (function(k) { return k < endKey })) :
+ truth;
+
+ for (var k in ht) {
+ if (startPredicate(k) && endPredicate(k)) {
+ if (cb(k, ht[k]) == false) {
+ break;
+ }
+ }
+ }
+
+ cb(null);
+ }
+ };
+
+ return self;
+}
+
+exports.mkItems = mkItems;
Oops, something went wrong.

0 comments on commit e3268e8

Please sign in to comment.